Какие инструменты используются для составления комбинаций в pairwise testing
Что проверяют
Понимаете ли вы, откуда берётся экономия в pairwise и где она заканчивается, а не только помните название утилиты. Следом обычно просят показать, как задать ограничения между параметрами и как подключить сгенерированный набор к тестам на Python.
Как отвечать
Сначала суть: большинство дефектов конфигураций проявляется на одном параметре или на сочетании двух, поэтому достаточно, чтобы каждая пара значений встретилась хотя бы в одном тесте. Четыре параметра по три значения дают 81 полную комбинацию, а все пары покрываются девятью строками.
Инструменты:
- PICT: консольная утилита с открытым кодом. Модель описывается текстом, ограничения пишутся как
IF [OS] = "Windows" THEN [Browser] <> "Safari";, сила покрытия меняется ключом/o:3, обязательные сочетания подмешиваются из файла-затравки; - allpairspy: библиотека на Python,
AllPairs(parameters, filter_func=...)возвращает строки, а фильтр отсекает недопустимые сочетания. Результат удобно передать вpytest.mark.parametrize; - ACTS: бесплатный генератор покрывающих массивов, умеет не только пары, но и покрытие троек и выше с ограничениями;
- дизайнеры тест-кейсов в системах управления тестированием: визуальный редактор параметров, полезен, когда модель ведут аналитики.
Рабочая схема в Python-проекте: модель лежит в репозитории, генерация делается скриптом, набор сохраняется в файл и читается фикстурой или параметризацией. Так покрытие не меняется от прогона к прогону, а правка модели видна в ревью.
Где спотыкаются
Подают pairwise как замену полному перебору. Он не ловит дефекты, которые проявляются только на сочетании трёх параметров, поэтому для рискованных мест берут /o:3 или добавляют ручные кейсы.
Забивают в модель сырые значения вместо классов эквивалентности. Тогда комбинаций снова сотни, а смысла в них меньше.
Не описывают ограничения. Генератор выдаёт невозможные сочетания вроде Safari на Windows, такие тесты падают или их молча выкидывают, и пары, которые встречались только в этих строках, остаются без покрытия.