SlideShare uma empresa Scribd logo
1 de 34
Baixar para ler offline
Нескучное тестирование
с pytest
Роман Иманкулов / @rdotpy / 27 июня 2014
Почему программисты
не любят писать тесты?
Тестирование в Python — это
религия
• Врождённая греховность
• Очищение через страдание
• Мистический опыт
Врождённая греховность
 Врожденные пороки — нестрогая типизация и duck
typing
• Как следствие — природная склонность программиста
на Python к совершению маленьких и глупых ошибок
Очищение через страдание
Boilerplate Code
    class TestSequenceFunctions(unittest.TestCase):
        def setUp(self):
            ...
        def tearDown(self):
            ...
        def testFoo(self):
            ...
Очищение через страдание
Многословные ассерты
    
    self.assertEqual(foo, 1, 
                     'foo is not equal to one')
Мистический опыт
Django testing setups & teardowns
Есть ли альтернатива?
pytest
pytest — это не еще один
xUnit фреймворк!
pytest fixtures
То, что отличает pytest
от других фреймворков
pytest fixtures
Наивный подход. Как это бы сделал я сам
file: fixtures.py
    def get_user():
        return User(name='Roman', age=30, ...)        
file: test_user.py
    def test_user():
        user = get_user()
        assert user.name == 'Roman'
pytest fixtures
Подход pytest
file: conftest.py
    @pytest.fixture
    def user():
        return User(name='Roman', age=30, ...)        
file: test_user.py
    def test_user(user):
        assert user.name == 'Roman'
Зависимости между fixtures
@pytest.fixture
def user():
    return User(name='Roman', age=30, ...)       
@pytest.fixture
def task(user):
    return Task(user=user, name='...')
def test_task(task):
    assert task.user.name == 'Roman'
Fixture dependencies. Patching object
@pytest.fixture
def premium(user)
    user.set_premium()
def test_premium(user, premium):
    assert user.is_premum()
yield_fixture
setup и teardown
в одном флаконе
@pytest.yield_fixture
def user():
    obj = User(name='Roman', age=30, ...)       
    yield obj
    obj.delete()
Fixture scopes
• function scope
• module scope
• session scope
Session fixture. Локальный кеш
@pytest.yield_fixture(scope='session', autouse=True)
def local_cache():
    old_settings = settings.CACHES
    settings.CACHES = {'default': {…}}
    yield
    settings.CACHES = old_settings
Function fixture.
Database transaction rollback
@pytest.yield_fixture
def tx():
    db().start_transaction()
    yield
    db().rollback()
def test_user(user, tx, project, task):
    # project & task will be removed automatically
Session fixture. Чистый redis
@pytest.yield_fixture(scope='session')
def redis_server():
    proc = subp.Popen(['redis­server', '­­port', 7777], ... )
    yield proc
    proc.terminate()
@pytest.fixture
def rc(redis_server):
    client = redis.StrictRedis('redis://127.0.0.1:7777')
    client.flushall()
    return client
fixtures parametrization
Функция возвращает функцию
@pytest.fixture
def set_lang(user):
    def func(lang_code):    
        user.set_lang(lang_code)
    return func
def test_languages(user, set_lang):
    set_lang('ru')
    ...
Странные вещи
Fixtures в отдельном потоке
http://bit.ly/test_pool
@pytest.fixture(scope='session')
def item_gen():
    gen = Generator(lambda: .)
    gen.start()
    return gen
@pytest.yield_fixture
def item(item_gen, item_rel):
    item = item_gen.get()
    yield item
    item_rel.put(item)
@pytest.fixture(scope='session')
def item_rel():
    rel = Releaser(lambda o: ...)
    rel.start()
    return rel
Как ещё использовать fixtures
• warnings: turn MySQL warnings to errors
• mock: подготовка mockup объектов
• freezegun: управление временем
• selenium: запуск веб-драйвера
О чём я ещё не рассказал
def pytest_addoption(parser):
    parser.addoption("­­clean­mysql",
  action="store_true", default=False)
@pytest.fixture(scope='session', autouse=True)
def clean_mysql(request):
    if not request.config.getoption('­­clean­mysql'):   
        return
     # clean MySQL tables heres
О чём я ещё не рассказал
@pytest.mark.parametrize("input,expected", [
    ("3+5", 8),
    ("2+4", 6),
])
def test_eval(input, expected):
    assert eval(input) == expected
О чём я ещё не рассказал
• pytest-django: интеграция с Django
• pytest-xdist: параллельные и
распределенные тесты
О чём я ещё не рассказал
• tox: выполнение тестов для разных python
• detox: то же самое, только параллельно
[tox]
envlist = py26,py27
[testenv]
deps=pytest  
commands=py.test
Спасибо! Вопросы?
Роман Иманкулов / @rdotpy / http://imankulov.name

Mais conteúdo relacionado

Mais procurados

Exercicios Filas (Queues) - Estruturas de dados e algoritmos com Java
Exercicios Filas (Queues) - Estruturas de dados e algoritmos com JavaExercicios Filas (Queues) - Estruturas de dados e algoritmos com Java
Exercicios Filas (Queues) - Estruturas de dados e algoritmos com JavaLoiane Groner
 
TestNG introduction
TestNG introductionTestNG introduction
TestNG introductionDenis Bazhin
 
Automated Python Test Frameworks for Hardware Verification and Validation
Automated Python Test Frameworks for Hardware Verification and ValidationAutomated Python Test Frameworks for Hardware Verification and Validation
Automated Python Test Frameworks for Hardware Verification and ValidationBarbara Jones
 
Automation testing & Unit testing
Automation testing & Unit testingAutomation testing & Unit testing
Automation testing & Unit testingKapil Rajpurohit
 
Python Functions Tutorial | Working With Functions In Python | Python Trainin...
Python Functions Tutorial | Working With Functions In Python | Python Trainin...Python Functions Tutorial | Working With Functions In Python | Python Trainin...
Python Functions Tutorial | Working With Functions In Python | Python Trainin...Edureka!
 
Testing in-python-and-pytest-framework
Testing in-python-and-pytest-frameworkTesting in-python-and-pytest-framework
Testing in-python-and-pytest-frameworkArulalan T
 
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018Kenneth Ceyer
 
Mockito a simple, intuitive mocking framework
Mockito   a simple, intuitive mocking frameworkMockito   a simple, intuitive mocking framework
Mockito a simple, intuitive mocking frameworkPhat VU
 
Automação e virtualização de serviços
Automação e virtualização de serviçosAutomação e virtualização de serviços
Automação e virtualização de serviçosElias Nogueira
 
Monitoring Docker Containers with Metricbeat, Elasticsearch, and Kibana
Monitoring Docker Containers with Metricbeat, Elasticsearch, and KibanaMonitoring Docker Containers with Metricbeat, Elasticsearch, and Kibana
Monitoring Docker Containers with Metricbeat, Elasticsearch, and KibanaQbox
 
Functional Programming in JavaScript by Luis Atencio
Functional Programming in JavaScript by Luis AtencioFunctional Programming in JavaScript by Luis Atencio
Functional Programming in JavaScript by Luis AtencioLuis Atencio
 
Criando uma arquitetura para seus testes de API com RestAssured
Criando uma arquitetura para seus testes de API com RestAssuredCriando uma arquitetura para seus testes de API com RestAssured
Criando uma arquitetura para seus testes de API com RestAssuredElias Nogueira
 

Mais procurados (20)

Java Unit Testing
Java Unit TestingJava Unit Testing
Java Unit Testing
 
Interfacing C/C++ and Python with SWIG
Interfacing C/C++ and Python with SWIGInterfacing C/C++ and Python with SWIG
Interfacing C/C++ and Python with SWIG
 
Exercicios Filas (Queues) - Estruturas de dados e algoritmos com Java
Exercicios Filas (Queues) - Estruturas de dados e algoritmos com JavaExercicios Filas (Queues) - Estruturas de dados e algoritmos com Java
Exercicios Filas (Queues) - Estruturas de dados e algoritmos com Java
 
TestNG introduction
TestNG introductionTestNG introduction
TestNG introduction
 
Introduction to JUnit
Introduction to JUnitIntroduction to JUnit
Introduction to JUnit
 
Árvores Rubro Negra
Árvores Rubro NegraÁrvores Rubro Negra
Árvores Rubro Negra
 
Automated Python Test Frameworks for Hardware Verification and Validation
Automated Python Test Frameworks for Hardware Verification and ValidationAutomated Python Test Frameworks for Hardware Verification and Validation
Automated Python Test Frameworks for Hardware Verification and Validation
 
TestNG
TestNGTestNG
TestNG
 
Automation testing & Unit testing
Automation testing & Unit testingAutomation testing & Unit testing
Automation testing & Unit testing
 
Python Functions Tutorial | Working With Functions In Python | Python Trainin...
Python Functions Tutorial | Working With Functions In Python | Python Trainin...Python Functions Tutorial | Working With Functions In Python | Python Trainin...
Python Functions Tutorial | Working With Functions In Python | Python Trainin...
 
Testing in-python-and-pytest-framework
Testing in-python-and-pytest-frameworkTesting in-python-and-pytest-framework
Testing in-python-and-pytest-framework
 
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018
 
Mockito a simple, intuitive mocking framework
Mockito   a simple, intuitive mocking frameworkMockito   a simple, intuitive mocking framework
Mockito a simple, intuitive mocking framework
 
Automação e virtualização de serviços
Automação e virtualização de serviçosAutomação e virtualização de serviços
Automação e virtualização de serviços
 
Monitoring Docker Containers with Metricbeat, Elasticsearch, and Kibana
Monitoring Docker Containers with Metricbeat, Elasticsearch, and KibanaMonitoring Docker Containers with Metricbeat, Elasticsearch, and Kibana
Monitoring Docker Containers with Metricbeat, Elasticsearch, and Kibana
 
Test studio
Test studioTest studio
Test studio
 
Functional Programming in JavaScript by Luis Atencio
Functional Programming in JavaScript by Luis AtencioFunctional Programming in JavaScript by Luis Atencio
Functional Programming in JavaScript by Luis Atencio
 
PHPUnit Cheat Sheet
PHPUnit Cheat SheetPHPUnit Cheat Sheet
PHPUnit Cheat Sheet
 
Criando uma arquitetura para seus testes de API com RestAssured
Criando uma arquitetura para seus testes de API com RestAssuredCriando uma arquitetura para seus testes de API com RestAssured
Criando uma arquitetura para seus testes de API com RestAssured
 
PyTorch 2 Internals
PyTorch 2 InternalsPyTorch 2 Internals
PyTorch 2 Internals
 

Semelhante a Нескучное тестирование с pytest

Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNGДмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNGDataArt
 
Тестирование в mail.ru (Дмитрий Зенович)
Тестирование в mail.ru (Дмитрий Зенович)Тестирование в mail.ru (Дмитрий Зенович)
Тестирование в mail.ru (Дмитрий Зенович)Ontico
 
Введение в специальность. Якин Дмитрий - QA: полицейский, нянька и прочие рол...
Введение в специальность. Якин Дмитрий - QA: полицейский, нянька и прочие рол...Введение в специальность. Якин Дмитрий - QA: полицейский, нянька и прочие рол...
Введение в специальность. Якин Дмитрий - QA: полицейский, нянька и прочие рол...kontur_student
 
тесты с фикстурами
тесты с фикстурамитесты с фикстурами
тесты с фикстурамиIvan Grishaev
 
Особенности тестирования открытого ПО
Особенности тестирования открытого ПООсобенности тестирования открытого ПО
Особенности тестирования открытого ПОAlexey Lyanguzov
 
Специфика тестирования проектов с открытым исходным кодом
Специфика тестирования проектов с открытым исходным кодомСпецифика тестирования проектов с открытым исходным кодом
Специфика тестирования проектов с открытым исходным кодомSQALab
 
Промышленный подход к автоматизации тестирования или Keyword-driven testing в...
Промышленный подход к автоматизации тестирования или Keyword-driven testing в...Промышленный подход к автоматизации тестирования или Keyword-driven testing в...
Промышленный подход к автоматизации тестирования или Keyword-driven testing в...SQALab
 
Промышленный подход к автоматизации тестирования или Keyword-driven testing в...
Промышленный подход к автоматизации тестирования или Keyword-driven testing в...Промышленный подход к автоматизации тестирования или Keyword-driven testing в...
Промышленный подход к автоматизации тестирования или Keyword-driven testing в...Maksim Grinevich
 
Иван Евтухович — Как перестать релизиться и начать жить
Иван Евтухович — Как перестать релизиться и начать житьИван Евтухович — Как перестать релизиться и начать жить
Иван Евтухович — Как перестать релизиться и начать житьDaria Oreshkina
 
лившиц владимир - независимое тестирование миф
лившиц владимир - независимое тестирование мифлившиц владимир - независимое тестирование миф
лившиц владимир - независимое тестирование мифMagneta AI
 
Юнит тестирование в Web. Как получать пользу и удовольствие.
Юнит тестирование в Web. Как получать пользу и удовольствие.Юнит тестирование в Web. Как получать пользу и удовольствие.
Юнит тестирование в Web. Как получать пользу и удовольствие.Sergey Ryabenko
 
Опыт использования Erlang в разработке многопользовательской игры
Опыт использования Erlang в разработке многопользовательской игрыОпыт использования Erlang в разработке многопользовательской игры
Опыт использования Erlang в разработке многопользовательской игрыYuri Zhloba
 
Юрий Жлоба - Опыт использования Erlang в разработке многопользовательской игры.
Юрий Жлоба -  Опыт использования Erlang в разработке многопользовательской игры.Юрий Жлоба -  Опыт использования Erlang в разработке многопользовательской игры.
Юрий Жлоба - Опыт использования Erlang в разработке многопользовательской игры.IT Share
 
Учим автотесты человеческому языку с помощью Allure и PyTest
Учим автотесты человеческому языку с помощью Allure и PyTestУчим автотесты человеческому языку с помощью Allure и PyTest
Учим автотесты человеческому языку с помощью Allure и PyTestRina Uzhevko
 
JavaTalks.Unit Testing.Part 1
JavaTalks.Unit Testing.Part 1JavaTalks.Unit Testing.Part 1
JavaTalks.Unit Testing.Part 1sgdread
 
Белым по черному или альтернативное использование unit-тестирования
Белым по черному или альтернативное использование unit-тестированияБелым по черному или альтернативное использование unit-тестирования
Белым по черному или альтернативное использование unit-тестированияSQALab
 
CodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестирования
CodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестированияCodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестирования
CodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестированияCodeFest
 
Обучение тестированию
Обучение тестированиюОбучение тестированию
Обучение тестированиюAPostovalova
 

Semelhante a Нескучное тестирование с pytest (20)

Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNGДмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
 
Тестирование в mail.ru (Дмитрий Зенович)
Тестирование в mail.ru (Дмитрий Зенович)Тестирование в mail.ru (Дмитрий Зенович)
Тестирование в mail.ru (Дмитрий Зенович)
 
Введение в специальность. Якин Дмитрий - QA: полицейский, нянька и прочие рол...
Введение в специальность. Якин Дмитрий - QA: полицейский, нянька и прочие рол...Введение в специальность. Якин Дмитрий - QA: полицейский, нянька и прочие рол...
Введение в специальность. Якин Дмитрий - QA: полицейский, нянька и прочие рол...
 
тесты с фикстурами
тесты с фикстурамитесты с фикстурами
тесты с фикстурами
 
Особенности тестирования открытого ПО
Особенности тестирования открытого ПООсобенности тестирования открытого ПО
Особенности тестирования открытого ПО
 
Специфика тестирования проектов с открытым исходным кодом
Специфика тестирования проектов с открытым исходным кодомСпецифика тестирования проектов с открытым исходным кодом
Специфика тестирования проектов с открытым исходным кодом
 
Промышленный подход к автоматизации тестирования или Keyword-driven testing в...
Промышленный подход к автоматизации тестирования или Keyword-driven testing в...Промышленный подход к автоматизации тестирования или Keyword-driven testing в...
Промышленный подход к автоматизации тестирования или Keyword-driven testing в...
 
Промышленный подход к автоматизации тестирования или Keyword-driven testing в...
Промышленный подход к автоматизации тестирования или Keyword-driven testing в...Промышленный подход к автоматизации тестирования или Keyword-driven testing в...
Промышленный подход к автоматизации тестирования или Keyword-driven testing в...
 
Иван Евтухович — Как перестать релизиться и начать жить
Иван Евтухович — Как перестать релизиться и начать житьИван Евтухович — Как перестать релизиться и начать жить
Иван Евтухович — Как перестать релизиться и начать жить
 
лившиц владимир - независимое тестирование миф
лившиц владимир - независимое тестирование мифлившиц владимир - независимое тестирование миф
лившиц владимир - независимое тестирование миф
 
Юнит тестирование в Web. Как получать пользу и удовольствие.
Юнит тестирование в Web. Как получать пользу и удовольствие.Юнит тестирование в Web. Как получать пользу и удовольствие.
Юнит тестирование в Web. Как получать пользу и удовольствие.
 
Опыт использования Erlang в разработке многопользовательской игры
Опыт использования Erlang в разработке многопользовательской игрыОпыт использования Erlang в разработке многопользовательской игры
Опыт использования Erlang в разработке многопользовательской игры
 
Юрий Жлоба - Опыт использования Erlang в разработке многопользовательской игры.
Юрий Жлоба -  Опыт использования Erlang в разработке многопользовательской игры.Юрий Жлоба -  Опыт использования Erlang в разработке многопользовательской игры.
Юрий Жлоба - Опыт использования Erlang в разработке многопользовательской игры.
 
Учим автотесты человеческому языку с помощью Allure и PyTest
Учим автотесты человеческому языку с помощью Allure и PyTestУчим автотесты человеческому языку с помощью Allure и PyTest
Учим автотесты человеческому языку с помощью Allure и PyTest
 
JavaTalks.Unit Testing.Part 1
JavaTalks.Unit Testing.Part 1JavaTalks.Unit Testing.Part 1
JavaTalks.Unit Testing.Part 1
 
Testing C code with Python
Testing C code with PythonTesting C code with Python
Testing C code with Python
 
10M tests per day
10M tests per day10M tests per day
10M tests per day
 
Белым по черному или альтернативное использование unit-тестирования
Белым по черному или альтернативное использование unit-тестированияБелым по черному или альтернативное использование unit-тестирования
Белым по черному или альтернативное использование unit-тестирования
 
CodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестирования
CodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестированияCodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестирования
CodeFest 2014. Павлов И. — Как делать прототипы в автоматизации тестирования
 
Обучение тестированию
Обучение тестированиюОбучение тестированию
Обучение тестированию
 

Нескучное тестирование с pytest