Upload
rina-uzhevko
View
718
Download
10
Embed Size (px)
Citation preview
Учим автотесты человеческомуязыку с помощью Allure и PyTestУсов Андрей
О себе• Тестирование бекендов
• Интеграционное тестирование клиент-сервер
3
Тестирование бекендов• API
• Интеграционное тестирование
• Функциональное тестирование серверного ПО
4
АвтотестыНачало
def test_feature_1():
#make something
assert a == b
def test_feature_2():
...
if __name__ == '__main__':
test_feature_1()
test_feature_2()
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
Проблемы
• Тесты падают на первой ошибке
• Нет механизма setup и teardown
Узнаем про тестовые фреймворки
8
Фреймфорк: PyTestclass TestSomeModule:
def test_feature_1(self):
...
def test_feature_2(self):
....
9
Добавляем setup и teardownclass TestSomeModule:
def setup(self):
# перед каждым тестом
def teardown(self):
# после каждого теста
def test_feature_1(self):
...
10
Запуск из терминалаpy.test ./file_with_tests.py
11
Выхлоп
...
def test_feature_2(self):
...
> assert a == b
E assert 'zsa' == 'aaaa'
12
Решенные проблемы• Проходят все тесты
• Есть setup и teardown
Но выхлоп все еще сложный
13
Тест упалЗаводим баг
Ожидания
Подготовка: приводим систему в сотояние A
1. Делаем раз
2. Делаем два
3. Смотрим результат
Проблема: результат не совпадает с ожидаемым
Логи и нужные файлы приложены к тикету
15
Реальность
def setup(self):
пыщь пыщь ...
def test_feature_1(self):
bla bla bla...
assert a > b
16
Тестовые данныеdata
├── first
├── second
│ ├── 123
│ └── 345
└── third
17
Итого
• Неочевидные шаги
• Данные далеко
• Не ясно состояние системы
18
Allure
allure.qatools.ru
Что такое Allure?Allure - an open-source framework designed
to create test execution reports clear
to everyone in the team.
21
Как это работает?• При выполнении тестов генерируется XML файл отчета
• Сохрараняются аттачи
• Специальная утилита генерирует web-отчет
22
Адаптор для PyTestpip install pytest-allure-adaptor
23
Проблема: Шаги
def test_feature_1(self):
make_something_1()
make_something_2()
assert a == b
24
Проблема: Шаги
def make_something_1():
# внутренний код
# бизнес шаг
25
Проблема: Шаги
import allure
def make_something_1():
# внутренний код
with allure.step("Делаем шаг 1")
# бизнес шаг
26
Пройденный тест
27
Проваленный тест
28
Проблема: Что сломалосьdef test_feature_1(self):
make_something_1()
make_something_2()
assert a == b
29
Делаем assert шагомdef test_feature_1(self):
make_something_1()
make_something_2()
check_some_object(a, 1)
30
Делаем assert шагомdef check_some_object(a, b):
# внутренний код
with allure.step("Проверяем наш объект"):
assert a == b, 'Some Error Text'
31
Пройденный тест
32
Проваленный тест
33
Данные
Представление данныхtree = {
"name": "Elena",
"age": 19,
"parents": {...}
}
assert tree == {...}, ???
35
Применяем 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
Данные прикладываются
37
Визуализация
38
Приоритеты
@allure.severity("blocker")
def test_feature_1(self):
...
39
Деление на фичи
@allure.feature("Auth")
def test_feature_1(self):
...
40
Story
@allure.story("Проверяем авторизацию при полнолунии")
def test_feature_1(self):
...
41
Features and Stories
42
Тест на баг
@pytest.mark.xfail()
@allure.issue("http://jira.company.ru/PPX-204")
def test_feature_1(self):
...
43
Пропускаем тест
@pytest.mark.skipif("условие")
def test_feature_1(self):
...
44
Итоги
• Пишем шаги на языке бизнес-логики
• Прикладываем нужную информацию
• Классифицируем по фичам и user story
• Контролируем падения тестов
45