Инструмент для генерации всех комбинаций пространства параметров (для тестирования)

Предположим, я написал приложение, которое можно вызвать следующим образом:

my_magic_app --foo=yes --bar=5003 --baz=best_baz_ever

Теперь предположим, что я хочу проверить это, задав диапазон bar от некоторого числа до другого, foo — либо да, либо нет, а baz — либо все строки до определенной длины, либо строки из определенного словаря, который у меня есть в файле. Кроме того, мне не нужны все комбинации, а нужны только определенные условия (например, значение bar не может быть больше 5000, если значение foo отрицательное).

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

Требования:

  • Для Unix-подобных операционных систем
  • Бесплатная лицензия
  • Бесплатно
  • Мне все равно, скрипт это или бинарник
  • Предпочитаются языки, не являющиеся тайными (например, bash, python, perl)
Я всегда заканчивал тем, что делал это с помощью специальных сценариев, поэтому для меня это интересный вопрос. Несколько быстрых замечаний: 1) будьте осторожны с размером пространства для тестирования - на удивление легко получить неконтролируемое количество тестов; 2) в общем случае лучше указывать диапазоны самостоятельно (foo в yes no); 3) ожидаемые результаты трудно получить, особенно при таких условиях, как то, что вы даете (вы не хотите, чтобы у вас было две проблемы).
1. Да, я знаю. Болезненный момент 3. У меня есть код для генерации ожидаемых результатов в моем случае (а иногда ожидаемых результатов нет, кроме как не вылетать, или результаты всегда одинаковые), но, да, в целом это проблема.
Это можно сделать с помощью понимания списка.
@dramzy: я ищу существующее программное обеспечение, а не способ реализации этой функциональности...

Ответы (2)

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

Метод и программное обеспечение описаны в этом модуле из курса для выпускников GATech.

Вы можете рассмотреть комбинацию тестирования всех пар и граничного тестирования. Тестирование всех пар — это метод сокращения количества тестовых векторов до тех, которые проверяют все пары комбинаций. Это может значительно сократить количество тестовых случаев, не уменьшая при этом заметного охвата тестами. Очевидно, вам придется удовлетворить свои требования к тестированию, но это действительно отличный метод, когда вы можете его использовать. При тестировании диапазонов чисел обычно действительно интересно проверить только границы. Например, если ввод может быть от 0 до 5000, то интересными тестовыми примерами будут -1, 0, 1, 4999, 5000 и 5001.

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

Я не думаю, что вы сможете избежать написания какого-либо сценария, но вы, безусловно, можете использовать инструменты, разработанные другими людьми. Джеймс Бах, «известный» тестер программного обеспечения, написал инструмент для работы со всеми парами, который вы могли бы использовать.

Хотя это предложение может (или не может) иметь отношение к тому, как я выполняю тестирование, это все же не то, о чем я просил... Мне нужно протестировать все пространство. Сетка, покрывающая его частично, может иметь значение, но не экстремумы. Тем не менее, +1 за усилия.
Спрашивающий четко заявил, что им нужно проверить ВСЕ комбинации. Ни один инструмент не может автоматически угадать, какую комбинацию не стоит пробовать, тем более не зная внутренностей тестируемой программы. Предлагаемый вами инструмент будет «создавать тесты, которые сопоставляют каждое значение каждой из переменных с каждым значением каждой другой переменной хотя бы один раз», что не является нормальным.
По своему опыту тестировщика программного обеспечения я обнаружил, что все пары — полезный инструмент для обеспечения высокой степени охвата при одновременном сокращении количества тестовых случаев. Этот метод хорошо известен в мире тестирования программного обеспечения, и я слышал о нем на конференциях и в книгах. Тем не менее, большинство тестировщиков, с которыми я работал, не знают об этом, потому что они были вовлечены в эту роль. Я предложил это как предложение, потому что во многих случаях это жизнеспособная альтернатива, которая могла бы не рассматриваться.
Опять же - достаточно справедливо, ваш опыт совершенно действителен.
Сокращение количества тестов обычно делается в расчете на то, что разработчики программного обеспечения реализуют код только один раз. Я слишком много раз наблюдал, как код копировался/вставлялся, что приводило к сбоям, которых я не ожидал, потому что я уже проверял это. С тех пор я с удовольствием тестирую больше комбинаций, чем обычно требуется. (Я работаю в QA и в этом случае не согласен с ISTQB) Это относится к тестированию методом черного ящика.