Инструменты необходимые для тестирования Linux

Инструменты необходимые для тестирования Linux

Максим Уваров 

Введение

Данная статья представляет из себя набор тех утилит, с которыми приходится сталкиваться 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. Есть в любом дистрибутиве.