Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Учим автотесты человеческому языку с помощью Allure и PyTest

1,879 views

Published on

Доклад Андрея Усова на весенней встрече Московского клуба тестировщиков (MSTC,12.03.2016г) в офисе Mail.ru

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Учим автотесты человеческому языку с помощью Allure и PyTest

  1. 1. Учим автотесты человеческому языку с помощью Allure и PyTest Усов Андрей
  2. 2. О себе •  Тестирование бекендов •  Интеграционное тестирование клиент-сервер 3
  3. 3. Тестирование бекендов •  API •  Интеграционное тестирование •  Функциональное тестирование серверного ПО 4
  4. 4. Автотесты Начало
  5. 5. def test_feature_1(): #make something assert a == b def test_feature_2(): ... if __name__ == '__main__': test_feature_1() test_feature_2() 6
  6. 6. Выхлоп /usr/bin/python3.4 /home/demo/main.py Traceback (most recent call last): File "/home/demo/main.py", line 18, in module test_feature_2() File "/home/demo/main.py", line 13, in test_feature_2 assert a == b AssertionError 7
  7. 7. Проблемы •  Тесты падают на первой ошибке •  Нет механизма setup и teardown Узнаем про тестовые фреймворки 8
  8. 8. Фреймфорк: PyTest class TestSomeModule: def test_feature_1(self): ... def test_feature_2(self): .... 9
  9. 9. Добавляем setup и teardown class TestSomeModule: def setup(self): # перед каждым тестом def teardown(self): # после каждого теста def test_feature_1(self): ... 10
  10. 10. Запуск из терминала py.test ./file_with_tests.py 11
  11. 11. Выхлоп ... def test_feature_2(self): ... > assert a == b E assert 'zsa' == 'aaaa' 12
  12. 12. Решенные проблемы •  Проходят все тесты •  Есть setup и teardown Но выхлоп все еще сложный 13
  13. 13. Тест упал Заводим баг
  14. 14. Ожидания Подготовка: приводим систему в сотояние A 1. Делаем раз 2. Делаем два 3. Смотрим результат Проблема: результат не совпадает с ожидаемым Логи и нужные файлы приложены к тикету 15
  15. 15. Реальность def setup(self): пыщь пыщь ... def test_feature_1(self): bla bla bla... assert a > b 16
  16. 16. Тестовые данные data ├── first ├── second │   ├── 123 │   └── 345 └── third 17
  17. 17. Итого •  Неочевидные шаги •  Данные далеко •  Не ясно состояние системы 18
  18. 18. Allure
  19. 19. allure.qatools.ru
  20. 20. Что такое Allure? Allure - an open-source framework designed to create test execution reports clear to everyone in the team. 21
  21. 21. Как это работает? •  При выполнении тестов генерируется XML файл отчета •  Сохрараняются аттачи •  Специальная утилита генерирует web-отчет 22
  22. 22. Адаптор для PyTest pip install pytest-allure-adaptor 23
  23. 23. Проблема: Шаги def test_feature_1(self): make_something_1() make_something_2() assert a == b 24
  24. 24. Проблема: Шаги def make_something_1(): # внутренний код # бизнес шаг 25
  25. 25. Проблема: Шаги import allure def make_something_1(): # внутренний код with allure.step("Делаем шаг 1") # бизнес шаг 26
  26. 26. Пройденный тест 27
  27. 27. Проваленный тест 28
  28. 28. Проблема: Что сломалось def test_feature_1(self): make_something_1() make_something_2() assert a == b 29
  29. 29. Делаем assert шагом def test_feature_1(self): make_something_1() make_something_2() check_some_object(a, 1) 30
  30. 30. Делаем assert шагом def check_some_object(a, b): # внутренний код with allure.step("Проверяем наш объект"): assert a == b, 'Some Error Text' 31
  31. 31. Пройденный тест 32
  32. 32. Проваленный тест 33
  33. 33. Данные
  34. 34. Представление данных tree = { "name": "Elena", "age": 19, "parents": {...} } assert tree == {...}, ??? 35
  35. 35. Применяем attach from allure.constants import AttachmentType as AT with allure.step("Проверяем наш объект"): allure.attach("expected", json.dumps(b), type=AT.JSON) allure.attach("real", json.dumps(a), type=AT.JSON) assert a == b 36
  36. 36. Данные прикладываются 37
  37. 37. Визуализация 38
  38. 38. Приоритеты @allure.severity("blocker") def test_feature_1(self): ... 39
  39. 39. Деление на фичи @allure.feature("Auth") def test_feature_1(self): ... 40
  40. 40. Story @allure.story("Проверяем авторизацию при полнолунии") def test_feature_1(self): ... 41
  41. 41. Features and Stories 42
  42. 42. Тест на баг @pytest.mark.xfail() @allure.issue("http://jira.company.ru/PPX-204") def test_feature_1(self): ... 43
  43. 43. Пропускаем тест @pytest.mark.skipif("условие") def test_feature_1(self): ... 44
  44. 44. Итоги •  Пишем шаги на языке бизнес-логики •  Прикладываем нужную информацию •  Классифицируем по фичам и user story •  Контролируем падения тестов 45
  45. 45. Вопросы? Усов Андрей usovand@gmail.com 46

×