Максим Уваров
Введение
Данная статья представляет из себя набор тех утилит, с которыми приходится сталкиваться QA инженеру при тестировании linux/unix подобных таргетов. Здесь описаны лишь некоторые, основные инструменты, с которыми Вам наверняка придется работать. Эта статья будет полезна тем людям, которые только собираются тестировать устройства с линуксом и мало знакомы с теми программами, которые им предстоит использовать. Статья состоит в основном из названия программы и краткого описания, описания того, каким образом можно ее использовать для тестирования. Хотелось бы надеется, что она послужит началом wiki странички с примерно таким же названием.
В данной статье мне хотелось бы рассказать о инструментах для тестирования программ на базе linux. Но большинство данных решений будет применимо к большинству unix-based систем. Сложилось так, что большинство приложений — это консольные приложения, которые легче автоматизировать.
В линуксе все программы можно разделить на следующие группы:
a) ядро (kernel)
Сюда относится само ядро, модули ядра, и userspace level управления ядром ( имеется ввиду /proc и /sys интерфейсы). Поскольку само ядро написано на С и ASM, то для тестирования вам в основном придется использовать именно С. Обычно это небольшие тестовые модули ядра, проверяющие какие либо функции, либо модуль с разным параметрами + скрипт. Как показывает практика лучше использовать не один модуль проверяющий сразу всю фичу, а много модулей проверяющих каждую функцию отдельно. Стоит также не забывать проверять все возможные коды возврата функций.
б) пользовательские программы (userspace level)
Любые приложения работающие на операционной системе. Тут все не однозначно, все зависит от приложения. Естественно если программа написана например на Java, то вам понадобится сама Java, хотя бы для того, чтобы убедится, что программа вообще собирается.
в) ядро + пользовательские программы
Скорее всего с этим видом приложений Вам придется столкнутся больше всего. Данная схема заключает в себя ядерный драйвер, обеспечивающий низкоуровневую связь с каким-либо устройством и пользовательскую программу.
Инструменты
Linux очень удобен для программирования и тестирования. Практически все нужные инструменты присутствуют в любом диструбутиве или их можно бесприпятственно скачать, так как они распространяются под свободной лицензией. Попробуем описать все необходимые инструменты:
- GCC - Gnu C compiler
Основной C, C++ компилятор linux. Если вам надо протестировать сам компилятор, то на сайте gcc есть тесты (входят в исходники gcc3.0 например). Компилирование с опцией -g позволит сделать отладку с помощью gdb.
- bash
Оболочка bash тоже есть в каждом дистрибутиве. Очень удобна для написания скриптов.
- expect
Тоже есть практически в каждом дистрибутиве, используется для автоматизации какого-либо процесса. Простой, но не очень удобный синтаксис TCL.
- expect-perl и expect-python (pyexpect)
Библиотеки expect для скриптовых языков perl и python.
-gdb -Gnu Debuger
Стандартный C/C++ отладчик. Имеет очень много возможностей, если вы им не разу не пользовались, то советую с ним ознакомится. Используйте kgdb для ядра.
-ltt - Linux Trace Toolkit
Если ваше ядро поддерживает LTT, то вы можете просмотреть активные процессы/системные вызовы в данный процесс времени.
-import и gimp
Утилита import из imagemagic и программа gipm могут использоваться для снятия скриншотов при тестировании графических приложений.
-minicom
Термнимальная программа для ручного тестирования. Если нужно автоматизировать работу с консолью, то лучше использовать expect ( или в связке с "cat" и "echo", либо просто открыть /dev/ttySx как файл; иногда второй случай не подходит).
-ltp - Linux Test Suite Page [ltp.sf.net]
Очень хорошая коллекция тестов. Включает в себя тесты файловых систем, системных вызовов и многое другое.
-netperf
Утилита позволяющая проверить производительность сети.
-ircp, irdump, openobex
Улилиты для проверки инфрокрасного порта.
-telnet,ssh
Удаленный shell. Если необходимо часто вводить одни и те же команды, можно воспользоваться expect. Есть в любом дистрибутиве.