Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

[Code Recipe] Быстрое создание большого количества dummy тестов с python py.test


(Mykhailo Poliarush) #1

Хочу быстро поделиться простым способом сгенерировать большое количество тестов для py.test http://pytest.org/latest/ фреймворка под ваши нужды.

Небольшая предыстория: Сейчас у меня есть задача протестировать новый excel репортинг прикрученный к нашему фреймворку автоматизации. И для того чтобы сделать немного поумнее чем просто копипаст, я создал небольшой скриптик на python py.test

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

import random
import pytest

def multiply(amount):
    def decorator(cls):
        for i in xrange(amount):
            class_name = cls.__name__ + str(i)
            globals()[class_name] = type(class_name, (cls,), {})
    return decorator

@multiply(10)
class TestExcelDemo(object):
    @pytest.mark.parametrize('data', random.sample(range(200), 10))
    def test_excel_demo(self, data):
        if data % random.randint(1, 3):
            raise AssertionError('failure')
        if data % 3:
            pytest.skip('skip')

Скрипт простой, но выполняет свою задачу на 100%.
Надеюсь кому-то будет полезно! Ставим лайк :smile:

А какие у вас есть полезные скрипты?


(Funker) #2

т.е. скрипт просто создает тестовые классы с пустыми тест методами которые потом стоит наполнить реальной логикой?
или я что-то не так понял


(Mykhailo Poliarush) #3

Нет, ничего наполнять не надо. Надо было просто создать большое количество тестовых классов и методов для тестирования репортинга, вот и все.

Хотя, конечно, если надо, можно и наполнить логикой каждый тест.


(Funker) #4

понятно, спасибо.
А вариант как с TestNG invocationCount = 10 здесь не проходит?
Или нет в python py.test такого функционала?


(Mykhailo Poliarush) #5

Да верное замечено TestNG для джавы. Для py.test такого нет.