Как установить переключатели функций в тестах, запускаемых при непрерывной интеграции?
Как можно проводить тестирование при использовании переключателей функций? Вы хотите, чтобы ваш компьютер для разработки был как можно ближе к производству. Из видео, которые я смотрел, переключатели функций реализованы таким образом, чтобы позволить определенным людям "использовать" функцию (т. Е. От 0 до 100 % пользователей или выбранных пользователей и т. Д.).
Чтобы правильно выполнять непрерывную интеграцию, нужно ли вам использовать те же параметры переключения функций, что и на производственных серверах, когда дело доходит до тестирования? Или, что еще лучше, если эта функция не отключена в рабочей среде, убедитесь, что она включена, когда речь идет о запуске автоматических тестов в конвейере сборки? Вы заканчиваете тем, что включаете функциональные переключатели в свой код тестирования или пишете тесты в новом файле? Когда новая функция является обязательным этапом процесса, который должен выполняться для системных тестов?
1 ответ
В команде из нескольких человек, которые регулярно используют переключатели функций, нецелесообразно проводить комбинаторное тестирование всех переключателей или даже планировать тестирование комбинаций переключателей, которые, как ожидается, будут взаимодействовать. Практическая стратегия тестирования переключаемого кода должна работать для одного переключателя без учета состояний других переключателей. Я видел, что следующий процесс работает довольно хорошо:
Поскольку мы перемещаем весь код в производство как можно скорее, когда в проект изначально вводится тумблер, пишутся новые тесты, чтобы охватить весь тумблерный код при включенном тумблере. Поскольку мы тщательно тестируем, тесты для этого кода с отключенным состоянием уже существуют; эти тесты изменены так, что переключение явно отключено. Переключаемый код может быть разработан за переключателем столько времени, сколько необходимо.
Непосредственно перед включением переключателя в рабочей среде все тесты (не только тесты переключенного кода, но и весь набор тестов приложения) выполняются с включенным переключателем. Это ловит любые поломки из-за непредвиденного взаимодействия с другими функциями.
Тумблер включен в производство
Переключатель удаляется из кода (вместе с любым кодом, активным только при отключенном переключателе), и код развертывается в рабочей среде.
Этот процесс применяется как к случаям, когда тумблер скрывает только совершенно новые функциональные возможности (так что нет кода, который запускается только при выключенном тумблере), так и к случаям, когда тумблер выбирает между двумя или более версиями кода, например, сплит-тест.,
Чтобы ответить на пару ваших конкретных вопросов:
Идет ли проверка разных переключенных состояний в одном и том же файле или в другом файле, зависит от размера переключаемой функции. Если это небольшое изменение, проще всего сохранить обе версии в одном файле. Если это полная перезапись основной функции, вероятно, проще иметь один или несколько новых тестовых файлов, посвященных новому состоянию переключателя. Количество файлов, затронутых переключателем, также зависит от вашей тестовой архитектуры. Например, в проекте Rails, который использует RSpec и Cucumber, для переключения может потребоваться новые тесты в функциях Cucumber (приемочные / интеграционные тесты), спецификации маршрутизации, спецификации контроллера и спецификации модели, и, опять же, тесты переключения на каждом уровне могут находиться в том же файле или в другом файле, в зависимости от размера переключаемой функции.
Под "системными тестами" я имею в виду ручные тесты. Я предпочитаю не иметь тех. Вместо этого я автоматизирую все тесты, включая приемочные тесты, поэтому то, что я написал выше, применимо ко всем тестам. Если оставить это в стороне, то новое состояние переключателя становится законным один раз временно, когда мы запускаем все тесты с включенным переключателем перед его включением в производство, а затем навсегда, когда мы удаляем переключение.