[Заметка] Библиотека расширенного логирования для RobotFramework

Проблема

Logger в RobotFramework позволяет сохранять сообщения из кода тестов либо библиотек.
Однако, зачастую требуется сохранить и файл для дальнейшего анализа.
Например, к ситуациям, которые требуют дополнительного инструмента логирования относятся:

  • сохранение лог-файла\конфига тестируемой подсистемы
  • сохранение сообщений от подсистемы в отдельный файл
  • автогенерация файла данных для дальнейшего использования.

Да, в RobotFramework есть кейворды, сохраняющие данные в файл и кейворды копирования файла. Но мне необходимо проверять код от разных тестировщиков, и я не хочу искать эти файлы по всей файловой системе, да и иметь логирование в одну строчку гораздо удобнее.

Решение

Необходима библиотека, которая способна сохранять доп. информацию и файлы по заранее определённым правилам.

В качестве такого правила предлагается сохранять файлы в каталоге
${OUTPUT_DIR}/<имя папки для доп. логов>/test suite/…/test suite/test case/.
Таким образом, найти файл, относящийся к определённому тесту не составит труда.

Ссылка на библиотеку:

Ссылка на документацию:

Рассмотрим библиотеку подробнее

При инициализации библиотеки, можно задать 2 необязательных параметра:

  1. output_dir - каталог, где хранятся основные файлы логов Robot Framework. По умолчанию - ${OUTPUT_DIR}
  2. test_log_folder_name - имя каталога, где будут храниться доп. файлы логов. По умолчанию - Advanced_Logs

В библиотеке реализованы 2 кейворда:

  1. Create_Advanced_Logdir, который создаёт иерархию папок для
    последующей записи в них файлов
  2. Write_Advanced_Testlog, который
    записывает content в файл filename. При этом иерархия папок будет
    создана безусловно.

Первый кейворд удобен в том случае, когда Вы хотите, например, сохранить файл с удалённого сервера: кейворд вернёт Вам необходимый путь, который можно использовать в дальнейшем.

Пример:

| *Settings* | *Value* |
| Library | AdvancedLogging |
| Library | SSHLibrary |
| *Test Cases* | *Action* | *Argument* |
| ${ADV_LOGS_DIR}= | Create advanced logdir | |
| Get File | /home/user/log.txt | ${ADV_LOGS_DIR}/log.txt |
=>
File ${OUTPUT_DIR}/Advanced_Logs/<TestSuite name>/<Test name>/log.txt 

Второй кейворд удобен, когда вам надо быстро сохранить информацию в файл.

Пример:

| Write advanced testlog | log_for_test.log | test message |
=>
File ${OUTPUT_DIR}/Advanced_Logs/<TestSuite name>/<TestCase name>/log_for_test.log with content 'test message'

Вывод

Данная библиотека было написана мной довольно давно. Я так к ней привык на различных проектах, что уже на автомате пишу в Test setup кейворде:

${ADV_LOGS_DIR}=    Create advanced logdir
Set test variable    ${ADV_LOGS_DIR}    ${ADV_LOGS_DIR}

и далее в тесте, например

Write advanced testlog    output_from_web_server.html    ${response_body}
Get File | /opt/apache/logs/error.log | ${ADV_LOGS_DIR}/error.log |

Пару мелких замечаний по коду

в коде лучше использоваться

import os
os.sep

для конкатенации пути лучше использовать

import os
os.path.join("dir1", "dir2", "file")

Да, такое замечание мне делали ранее.
Когда я попытался переделать библиотеку, то столкнулся с тем, что мне нужна явная замена

suite_name = suite_name.replace('.',self.sep)

/+ из-за, если мне не изменяет помять, ${output_dir} мне не удалось воспользоваться join