t.me/atinfo_chat Telegram группа по автоматизации тестирования

WebDriver + Python: генерация отчетов

Теги: #<Tag:0x00007f9afb09a950> #<Tag:0x00007f9afb09a838> #<Tag:0x00007f9afb09a6f8>

Здравствуйте! Я только начал знакомиться с автоматизированным тестированием и худо-бедно дело движется вперед. Только не смог найти в интернете инфы насчет генерации отчетов о пройденных тестах.

 

Я использую WD + Python. Хочу поставить запуск по расписанию. Чем лучше всего генерить отчеты и как их смотреть? Попробовал HTMLTestRunner, но так и не удалось получить файл на выходе.

И еще подскажите, плз, самый верный способ запустить эти тесты по графику. Или хотя-бы в какую сторону рыть?

 

Заранее большое спасибо!

самый лучший способ для вас будет Jenkins http://jenkins-ci.org/, один выстрелом два зайца убьете

там можно настроить регулярный запуск по разным параметрам, которые вам нужно, например, каждый день, или по изменению файлов на файловой структуре или по изменению код в системе версионнонго контроля

и второе, вы можете геренировать junit xml репорты, и указывать их для своего билда, а сам jenkins уже по ним построит отчеты, вам 100% должно хватить

примерно это будет выглядеть где-то так 

можно конечно попробовать написать свой отчет, пример можете посмотреть тут

https://github.com/davehunt/pytest-mozwebqa/blob/master/pytest_mozwebqa/html_report.py

Очень интересна тема Jenkins + Python + SeleniumWD, т.к. занимаюсь этим относительно недавно-очень инетересно как настроить и подружить этих ребят? Может кто-нибудь рассказать подробнее?

Описание того, что есть: есть скрипты на python+WD, установленый(не настроеный Дженкинс).

Нужно: запускать скрипты по расписанию, или после изменения кода, получать отчет о выполенини скриптов(passwd/failed), делать рассылку на почты.

Ну а есть более конкретные вопросы?

В общем схема выглядит так:

  1. Делаем тесты с помощью py.test или nose
  2. py.test или nose имеют встроенные возможности генерировать junitreport xml файлы на выходе
  3. Все тесты кладем в какой-то репозиторий
  4. Устанавливаем дженкинс и все пакеты python на той машине, где будут проганяться тесты
  5. Создаем билд план и в настройках запуска указываем все те же команды py.test или nose, а выходных результатах указываем, где будет хранится будущий junitreport xml файл.
  6. Да в принципе вот и все

Если будут более конкретные вопросы, с радостью помогу!

Почему бы не использовать стандартный питоновский unittest ?
Опыта работы с с py.test и nose нет, интересно просто. Там проще ?

Речь идет об генерации отчетов, где вы видели в unittest генерацию html отчетов?

1 Симпатия

Упс, таки да, вы правы.
Забыл что мы xmlrunner используем вместе с unittest для генерации репортов.

Ну раз написали, расскажите тогда как у вас обстоят дела с генерацией отчетов и как у вас это реализовано.

https://github.com/lamby/pkg-python-xmlrunner

Ссылочка на модуль
И там же пример прямо:

import unittest
import xmlrunner

    class TestFunctions(unittest.TestCase):
        def test_test1(self):
            pass
    
        def test_test2(self):
            pass
    
    if __name__ == '__main__':
        unittest.main(testRunner=xmlrunner.XMLTestRunner(output='test-reports'))

output='test-reports' путь к папочке куда XMLки кладуться

1 Симпатия

Если вы не против, то вставлю свои пять копеек.
Например мы используем юниттесты питона + HTMLTestRunner

Отчеты получаются такого вида: ссыль

Ссылочка на github проекта: ссыль

Скажу лично от себя: мне очень нравится данное так сказать дополнение. Очень удобно, наглядно. Правда проект уже можно сказать мертвый, последний коммит был 2 года назад. Но! в текущем состоянии он рабочий, даже очень. Но некоторые допилы делал лично, под нужды проекта.

Использование очень легкое, пример:

import unittest
import HTMLTestRunner
import time

    class TestFunctions(unittest.TestCase):
        def test_test1(self):
            pass

        def test_test2(self):
            pass

    if __name__ == '__main__':
        suite = unittest.TestSuite()
        suite.addTest(unittest.makeSuite(TestFunctions))
        dateTimeStamp = time.strftime('%Y%m%d_%H_%M_%S')
        buf = file("TestReport" + "_" + dateTimeStamp + ".html", 'wb') 
        runner = HTMLTestRunner.HTMLTestRunner(
             stream=buf,
             title='Test the Report', # Заголовок отчета
             description='Result of tests' # Описание отчета
             )
        runner.run(suite)

UPD. Прошу прощения, сразу не заметил, что автор пробовал использовать данный метод. Если желаете, то смогу подсказать/помочь, т.к. активно использую HTMLTestRunner

UPD2. И только сейчас заметил дату первого поста. Простите, утро, не совсем внимателен

1 Симпатия

Вы случаем не в курсе как настроить его так, чтобы отчеты назывались определенными именами?

Здравствуйте, Михаил. Спасибо, что помогаете разбираться в вопросах :smile:

У меня есть конкретные вопросы по данному топику:

  1. Есть файл xml вида:

<?xml version="1.0" encoding="utf-8"?><testsuite errors="0" failures="0" name="pytest" skips="0" tests="3" time="35.840"><testcase classname="test_Log_in_Wrong_Login_Pin.Untitled" name="test_untitled" time="12.0495848656"/><testcase classname="test_Log_in_successful.Untitled" name="test_Log_in_successful" time="13.5066812038"/><testcase classname="test_Login_Error_all_inputs_empty.Untitled" name="test_all_inputs_empty" time="9.69774913788"/></testsuite>

И голый, ненастроенный Jenkins. Не понял, где его вставлять. Нужно ли какие-то плагины подключать?

  1. Создаем билд план и в настройках запуска указываем все те же команды py.test

2.1 Билд план = job?

2.2 Все те же команды - какие именно и где это вообще указывается? :smile:

Спасибо!

Нужно создать job. И в шагах после сборки выбрать Publish JUnit test result report, а там указать путь в который у вас xml ки падают.

1 Симпатия

Как указал @akim это настраивается в Publish JUnit test results. Я просто покажу картинку.

Вновь принялся за настройку Jenkins, сейчас застрял на процессе запуска команды py.test.

Что есть:

  • тесты на python + selenium WD + py.test. Из eclipse или просто из консоли все работает.

  • тесты в репозитории, там же в корне лежит xml, сгенерированная py.test’ом

  • плагины поставил такие: Jenkins Selenium Plugin, Python Plugin

  • настройки Job:

Ошибка при сборке такая:

Путь к интерпретатору пытался ручками прописать и оставить пустым, результат тот же. Зашел под юзером jenkins, запустил терминал, ввел py.test - запустился, работает.

Помогите, пожалуйста, разобраться :smile:

Такое ощущение, что python нет в системных путях.
Для того, чтобы проверить.
Попробуйте добавить папку python и python\scripts в системные пути, как шаг в дженкинсе.
Или же укажите полный путь к исполняемому файлу py.test

Как вы устанавливали py.test на сервер, где стоит jenkins?

Не знаю, как это делается, если честно.

Устанавливал через pip. Насколько я понимаю, папка py.test вот тут лежит /Library/Python/2.7/site-packages/ Там есть файл pytest.py

Если указать полный путь к pytest.py вот так:

http://puu.sh/6sIdl.png

То будет ошибка:

Под руками сейчас есть только windows, так что пример соответствующий, для windows это делается так

А вообще по правильному, в jenkins есть настройка переменных окружения, пару ссылок для расширения кругозора:

Так на ошибке сказана, что из под jenkins юзера нет прав на запуск файл. Т.е. нужно дать ему chmod 777, чтобы все могли запускать этот файл.

Помогло прописать вот такой путь в шаге сборки /usr/local/bin/py.test Буду копать дальше уже по ошибкам самих тестов :smile: