#testing #command-line #automated-tests #integration-testing #command-line-arguments
#тестирование #командная строка #автоматизированные тесты #интеграция-тестирование #аргументы командной строки
Вопрос:
Я разрабатываю утилиту командной строки, которая имеет МНОГО флагов. Типичная команда выглядит следующим образом:
mycommand --foo=A --bar=B --jar=C --gnar=D --binks=E
В большинстве случаев выводится сообщение об успешном завершении, но я все еще хочу проверить другие источники, такие как внешняя база данных, чтобы гарантировать фактический успех.
Я начинаю создавать интеграционные тесты и не уверен в наилучшем способе сделать это. Мои основные проблемы заключаются в:
- Существует множество комбинаций флагов, как мне узнать, какие комбинации тестировать? Если вы посчитаете более 10 флагов, которые можно использовать вместе…
- Необходимо ли тестировать перестановки флагов?
- Как создать фреймворк, способный автоматизировать тесты и затем проверять результаты.
- Как отслеживать большое количество флагов и обеспечивать порядок, чтобы было легко определить, какие комбинации были реализованы, а какие нет.
Мысль о ручной записи отдельных случаев и проверке результатов в формате, подобном модульному тестированию, является пугающей.
Кто-нибудь знает шаблон, который можно использовать для автоматизации этого типа тестирования? Возможно, даже программное обеспечение, которое пытается решить эту проблему? Как люди, работающие с GNU commandline tools, тестировали свое программное обеспечение?
Ответ №1:
Я думаю, что это очень специфично для вашего приложения.
Во-первых, как вы определяете успешность выполнения вашего приложения? Это результирующий код? Это что-то, что выводится на консоль?
Что касается вопроса 2, это зависит от того, как вы анализируете эти флаги в своем приложении. В большинстве случаев порядок флагов не важен, но бывают случаи, когда это так. Я надеюсь, вам не нужно проверять перестановки флагов, потому что это добавило бы много вариантов для тестирования.
В общем случае вам следует проанализировать, каково влияние каждого флага. Возможно, что флаг не мешает другим, и тогда его просто нужно протестировать один раз. Это также относится к флагам, которые предназначены для использования отдельно (например, —help или —version). Вам также необходимо проанализировать, какие значения вы должны проверить для каждого флага. Обычно вы хотите попробовать каждый вид возможных допустимых значений и каждый вид возможных недопустимых значений.
Я думаю, что для выполнения тестов можно было бы написать простой скрипт bash или любой язык сценариев, например Python. Используя вложенные циклы, вы могли бы попробовать для каждого флага возможные значения, включая тесты на недопустимые значения и случай, когда флаг не установлен. Я создам многомерную матрицу результатов, которую следует проанализировать, чтобы увидеть, соответствуют ли результаты ожидаемому.
Комментарии:
1. Спасибо за отзыв. В большинстве случаев команды выдают сообщение об успешном завершении, однако манипулируется объект, внешний по отношению к команде. Поэтому мне нужно выполнить некоторую дополнительную работу для проверки (например, запросить базу данных). Я поиграю с идеей вложенных циклов, однако, похоже, было бы сложно организовать тест таким образом.
Ответ №2:
Когда я пишу приложения (на языках сценариев), у меня есть функция, которая анализирует строку командной строки. Я использую исходный файл, который я разрабатываю, и модульное тестирование этой функции напрямую, а не с использованием командной оболочки.