Часть 1 - семя

Наша история начинается с ошибок (конечно) и лени.

Каждый раз, когда мы хотели развернуть новую версию приложения, мы вручную обновляли базу данных для тестирования определенных сценариев, но никогда не убирали за собой, что иногда оставляло нашу тестовую базу данных в недопустимых сценариях, заставляя нас тратить много времени на поиск ошибок, которые там не было.

Модульных тестов было недостаточно, потому что в большинстве случаев было задействовано несколько компонентов нашего приложения и сложные рабочие процессы.

Поскольку мы так сильно полагались на ручное тестирование, и никто не любит ручное тестирование, оно сильно повлияло на команду и продукт.

Нам нравится получать удовольствие от своей работы. Ручное тестирование - это не весело.

Очень часто мы не тестировали так тщательно, как предполагали, или так часто, как следовало бы. Конечно, это приводило к появлению ошибок, но также заставляло нас очень бояться развертывания. Мы не развертывались часто, а когда делали это, мы не были так уверены в себе, как хотелось бы. Часто мы развертывали код, а затем проверяли производство, чтобы убедиться, что ничего не сломано (здесь никто из нас не свободен от греха).

У нас не было четкого представления о том, как подойти к процессу тестирования, поэтому мы начали с чего-то.

У всех нас были проблемы при ручном тестировании, потому что наши данные были неправильными, поэтому мы хотели убедиться, что все мы получили одни и те же достоверные данные с нуля.

Первой частью нашего репозитория QA была семя, в основном набор файлов json, которые заполняют нашу базу данных mongo свежими и согласованными производственными данными, такими как данные.

# Folder structure
/qa
 - package.json
 - /seed
   - package.json
   - seed.json
   - /seeds
     + users.json
     + organizations.json
     + files.json

Магия обновления базы данных выполняется node-mongo-seed.

Это действительно удобный модуль npm, который стирает базу данных и воссоздает коллекции с помощью файлов json.

Прежде всего, вы должны запустить seed-setup в корне вашего проекта, чтобы создать seed.jsonfile. Этот файл будет содержать определение различных сред, которые вы хотите засеять. Наш выглядит так:

{ 
  "undefined": "localhost/fashioncloud", 
  "localhost": "localhost/fashioncloud", 
  "dev": "USERNAME:PASSWORD@localhost:DB_PORT/DB_NAME", 
  "staging": "USERNAME:PASSWORD@localhost:DB_PORT/STAGING_DB_NAME" 
}

У нас есть строка подключения mongo, определенная для каждой из наших сред стадии разработки. Учетные данные и информация о БД скрыты не только из соображений безопасности, но и во избежание непреднамеренного повторного заполнения неправильной БД.

undefined автоматически сопоставляется с localhost, если не установлена ​​переменная NODE_ENV, поэтому запись localhost на самом деле не нужна.

Затем мы определили несколько сценариев npm, которые устанавливают NODE_ENV и запускают начальный сценарий.

// package.json
"scripts": {
  "seedLocal": "export NODE_ENV=localhost && seed",
  "seedDev": "export NODE_ENV=dev && seed",
  "seedStaging": "export NODE_ENV=staging && seed"
}

Запуск npm run seedLocal уничтожит нашу локальную базу данных и воссоздает ее с исходными файлами.

Исходные файлы - это просто набор файлов json, названных коллекциями. Например, семя для коллекции users может выглядеть следующим образом

// seeds/users.json
[
 {
   "_id": {
     "$oid": "59315139da4d1e7fb2808b49"
   },
   "email": "[email protected]",
   "organization": {
     "$oid": "59315132da4d1e7fb2808b50"
   },
   "created": {
     "$date": "2017-06-02T11:51:21.686Z"
   },
   "__v": 0
 },
 {
   "_id": {
     "$oid": "59315139da4d1e7fb2808b50"
   },
   "email": "[email protected]",
   "organization": {
     "$oid": "59315139da4d1e7fb2808b49"
   },
   "created": {
     "$date": "2017-06-02T11:51:21.686Z"
   },
   "__v": 0
 }
]

Это был, безусловно, очень полезный первый шаг, согласованность больше не была проблемой, и мы могли сосредоточиться на проверке того, что все работает, как ожидалось, в правильном сценарии.

Теперь поэкспериментировать с localhost очень просто: мы можем включать / выключать флаги, изменять ссылки на идентификаторы и играть с данными для функции или воссоздавать конкретный сценарий, и, просто набрав npm run seedLocal, мы получаем свежая копия базы данных.

Конечно, из-за нашей лени мы позаботились о том, чтобы исходные данные были обновлены с учетом всех наших различных условий данных, потому что усилия, необходимые для их воспроизведения вручную каждый раз, больше, чем усилия, необходимые для добавления их в исходные данные.

Все еще уставшие от ручного тестирования (здесь мы серьезно относимся к раздражениям), мы решили ввести тесты e2e.

Проверьте вторую часть здесь!