46

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

Embed Size (px)

Citation preview

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

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

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

О себе•  Тестирование бекендов

•  Интеграционное тестирование клиент-сервер

3

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

Тестирование бекендов•  API

•  Интеграционное тестирование

•  Функциональное тестирование серверного ПО

4

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

АвтотестыНачало

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

def test_feature_1():

#make something

assert a == b

def test_feature_2():

...

if __name__ == '__main__':

test_feature_1()

test_feature_2()

6

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

Выхлоп

/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

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

Проблемы

•  Тесты падают на первой ошибке

•  Нет механизма setup и teardown

Узнаем про тестовые фреймворки

8

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

Фреймфорк: PyTestclass TestSomeModule:

def test_feature_1(self):

...

def test_feature_2(self):

....

9

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

Добавляем setup и teardownclass TestSomeModule:

def setup(self):

# перед каждым тестом

def teardown(self):

# после каждого теста

def test_feature_1(self):

...

10

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

Запуск из терминалаpy.test ./file_with_tests.py

11

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

Выхлоп

...

def test_feature_2(self):

...

> assert a == b

E assert 'zsa' == 'aaaa'

12

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

Решенные проблемы•  Проходят все тесты

•  Есть setup и teardown

Но выхлоп все еще сложный

13

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

Тест упалЗаводим баг

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

Ожидания

Подготовка: приводим систему в сотояние A

1. Делаем раз

2. Делаем два

3. Смотрим результат

Проблема: результат не совпадает с ожидаемым

Логи и нужные файлы приложены к тикету

15

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

Реальность

def setup(self):

пыщь пыщь ...

def test_feature_1(self):

bla bla bla...

assert a > b

16

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

Тестовые данныеdata

├── first

├── second

│   ├── 123

│   └── 345

└── third

17

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

Итого

•  Неочевидные шаги

•  Данные далеко

•  Не ясно состояние системы

18

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

Allure

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

allure.qatools.ru

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

Что такое Allure?Allure - an open-source framework designed

to create test execution reports clear

to everyone in the team.

21

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

Как это работает?•  При выполнении тестов генерируется XML файл отчета

•  Сохрараняются аттачи

•  Специальная утилита генерирует web-отчет

22

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

Адаптор для PyTestpip install pytest-allure-adaptor

23

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

Проблема: Шаги

def test_feature_1(self):

make_something_1()

make_something_2()

assert a == b

24

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

Проблема: Шаги

def make_something_1():

# внутренний код

# бизнес шаг

25

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

Проблема: Шаги

import allure

def make_something_1():

# внутренний код

with allure.step("Делаем шаг 1")

# бизнес шаг

26

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

Пройденный тест

27

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

Проваленный тест

28

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

Проблема: Что сломалосьdef test_feature_1(self):

make_something_1()

make_something_2()

assert a == b

29

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

Делаем assert шагомdef test_feature_1(self):

make_something_1()

make_something_2()

check_some_object(a, 1)

30

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

Делаем assert шагомdef check_some_object(a, b):

# внутренний код

with allure.step("Проверяем наш объект"):

assert a == b, 'Some Error Text'

31

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

Пройденный тест

32

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

Проваленный тест

33

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

Данные

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

Представление данныхtree = {

"name": "Elena",

"age": 19,

"parents": {...}

}

assert tree == {...}, ???

35

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

Применяем attachfrom 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

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

Данные прикладываются

37

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

Визуализация

38

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

Приоритеты

@allure.severity("blocker")

def test_feature_1(self):

...

39

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

Деление на фичи

@allure.feature("Auth")

def test_feature_1(self):

...

40

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

Story

@allure.story("Проверяем авторизацию при полнолунии")

def test_feature_1(self):

...

41

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

Features and Stories

42

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

Тест на баг

@pytest.mark.xfail()

@allure.issue("http://jira.company.ru/PPX-204")

def test_feature_1(self):

...

43

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

Пропускаем тест

@pytest.mark.skipif("условие")

def test_feature_1(self):

...

44

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

Итоги

•  Пишем шаги на языке бизнес-логики

•  Прикладываем нужную информацию

•  Классифицируем по фичам и user story

•  Контролируем падения тестов

45

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

Вопросы?

Усов Андрей

[email protected]

46