Лучший способ тестирования инструментов командной строки?

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

Мне интересно, может ли кто-нибудь предложить хорошие методы или инструменты для хорошей работы такого рода.

Изменить: для уточнения это UNIX

Спасибо заранее. Том

8 ответов

Aruba является расширение огурца для тестирования приложения с командной строкой, написанные на любом языке программирования.

Чтобы использовать его, вам понадобится ruby ​​для запуска тестов, но цель арубы - предоставить библиотеку предопределенных определений шагов, чтобы вам не нужно было писать какой-либо код ruby, чтобы сделать работоспособный набор тестов, (Хотя в какой-то момент вам, вероятно, захочется написать немного рубинов, чтобы сделать несколько пользовательских шагов.)

Вы можете увидеть сложный пример инструмента командной строки, протестированного с арубой: jingweno/gh


Я рекомендую структурировать код инструмента командной строки, чтобы утилита командной строки была клиентом библиотеки функций и/или классов.

Вместо того, чтобы просто использовать std:: cout для вывода на печать, имейте, чтобы функция библиотек взяла ссылку на ostream, которая по умолчанию соответствует std:: cout. Когда вы тестируете, укажите std:: stringstream для сбора результата.

Наконец, просто сравните результаты своей утилиты с ожидаемыми результатами с помощью вашей любимой модульной системы тестирования.

(Я прошу прощения за конкретный пример на С++... Я уверен, что есть способы делать подобные вещи и на других языках).


Используя Cram, вы можете написать тесты, которые напоминают сеанс интерактивной оболочки. Cram затем воспроизводит команды из теста, сравнивает вывод с ссылкой и сообщает о различиях. Формат тестов довольно гибкий и позволяет вам сопоставлять выходные данные с помощью регулярных выражений Perl или оболочечных подстановок.


Вы должны иметь возможность вызывать их из оболочки script (пакетный файл, в операционных системах MS), перенаправлять вывод в файл, затем программно сканировать файл, чтобы убедиться, что он имеет правильный вывод. Я не знаю рамки тестирования, которая автоматизирует это для вас, но она должна быть достаточно простой, чтобы настроить ее самостоятельно.


Я немного поработал с этим (loooong time hehe), используя Expect, чтобы проверить, что произошло, что я, umm, ожидается


Летучие мыши (Bash Автоматизированная система тестирования) от Сэма Стивенсона. Он крошечный, написанный исключительно в оболочке и имеющий хороший набор функций.

Раньше предполагаемая Аруба выглядела интересной, но в некоторых случаях это могло бы быть спокойным излишеством с точки зрения зависимостей (рубин, огурец)


Вы можете сделать это из командного файла или другого сервера сценариев Windows.

Но я обещаю использовать планировщик задач, например (http://www.splinterware.com/products/wincron.htm) или другое бесплатное/профессиональное программное обеспечение.

Там вы можете легко скопировать/вставить параметры командной строки, которые вы должны изменить, когда вы хотите проверить свое программное обеспечение примерно на 100 раз?!


Вы можете использовать perl с библиотекой Test:: more, которая предоставляет отличную инфраструктуру для тестирования CLI. Хотя в основном это предназначено для модульного тестирования, вы можете расширить его, чтобы протестировать рабочие процессы пользователей.

Некоторые из методов:

# Various ways to say "ok"
 ok($got eq $expected, $test_name);
 is ($got, $expected, $test_name);
 isnt($got, $expected, $test_name);
 # Rather than print STDERR "# here what went wrong\n"
 diag("here what went wrong");
 like ($got, qr/expected/, $test_name);
 unlike($got, qr/expected/, $test_name);
 cmp_ok($got, '==', $expected, $test_name);

command-line automation testing perl-testing

licensed under cc by-sa 3.0 with attribution.