Как лучше переключить конкретные тесты по фитнесу?
Можно ли включать или выключать специальные тесты по фитнесу?
В терминологии Фаулера / Ходжсона мы используем "Release Toggles" - то есть переключатели, которые позволяют отключать изменения в нашей тестовой и профессиональной среде до готовности к прайм-тайму. Мы не хотим, чтобы сбои в этих функциях влияли на доставку для профессионалов, поэтому нас не интересуют результаты этих тестов. В этом смысле конвейер CDP имеет переключатели, настроенные на конфигурацию "PRO", для обеспечения быстрого и целенаправленного проведения приемочных тестов. Так как же найти способ игнорировать тесты, связанные с переключением?
Я вижу ответ на этот вопрос: как настроить переключатели функций в тестах, выполняемых при непрерывной интеграции? это означает, что этот пользователь тестирует все стороны переключателей, но это обычно не возможно для нас - например, представьте, что функция требует перезапуска приложения для изменения переключателя из-за DI или чего-либо еще (например, потому что функция требует подключения другого веб-контроллера) - это довольно трудная вещь для фитнеса... она предназначена для медленных тестов и тестирует функциональность, которую нам на самом деле не нужно тестировать (пока).
Поэтому мы хотим иметь возможность разрабатывать функцию (за переключателем) и тесты, приборы (отмеченные тем же переключателем), и когда мы будем готовы включить их, включите их для запуска через конвейер CI. Что-то вроде:
- Решите, что функция нуждается в переключении, поэтому создайте одно поведение TOG123-change-api
- Добавьте переключатель в центральную систему переключения, которую может видеть весь код
- Установите переключатель в положение "false" в конфигурации для сред CI
- Разработайте функциональные и фитнес-тесты для переключения кода
- Когда готов к CDP установлен в true
- При прохождении теста отправьте
- вовремя.. уберите переключение, буквально ища TOG123 и убирая беспорядок..
Бит, на который я не вижу хорошего ответа, состоит в том, как защищать определенные тесты соответствия с условиями (то есть новый тест будет иметь когда: TOG123.enabled, а старый тест будет иметь когда: TOG123.disabled). Фитнес кажется немного... неловко для меня. Являются ли теги тем, что я ищу? Сюиты кажутся слишком широкими на уровне..
1 ответ
Основываясь на вашем описании, теги, кажется, то, что вы ищете. Они позволяют пометить ваши тесты для новой функции и включить или исключить эти тесты в выполняемом вами прогоне.
С другой стороны: если функции являются настоящими "переключателями", т. Е. Их можно включить в производстве, не требуя новой версии, я бы порекомендовал протестировать все стороны переключателей; в противном случае вы не знаете, действительно ли включение / выключение является хорошим / безопасным делом. Если ожидается, что новые функции не будут "готовы к производству" и, следовательно, не требуют тестирования перед развертыванием: зачем включать их в выпускаемую версию продукта? В этой ситуации я бы порекомендовал вам сохранить эти новые функции в отдельной ветке, которая еще не объединена с разработкой / мастером. Затем вы можете поддерживать / разрабатывать тесты для этих функций в одном и том же (или аналогичном, если тесты находятся в другом хранилище). Это предотвращает сложность / код в производстве, который не должен использоваться, а также предотвращает необходимость "убирать беспорядок" впоследствии: очистка является частью ветви. Когда ветка объединена, новая функциональность добавляется, тестируется, и теперь устаревшие тесты / код немедленно удаляются. Это, конечно, требует способности запускать / тестировать вашу систему на основе ветки, но это то, что вы имеете при выполнении непрерывной доставки.