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

Slides:



Advertisements
Similar presentations
PM Options Setup Organizations Navigate to the Organizations Application under the Administration Module.
Advertisements

Люди и роботы: первые шаги навстречу Илья Гельфенбейн.
Testing/Testing In Rails 1 Alan and Saskia 2/8/2008.
Presenter: James Huang Date: Sept. 29,  HTTP and WWW  Bottle Web Framework  Request Routing  Sending Static Files  Handling HTML  HTTP Errors.
Kit Chan ATS Lua Plugin Kit Chan Hi, My name is kit.
December, 2008 CS-591 Securing Servers: International Capture the Flag 1 Nadine Sundquist CS591-F2008 University of Colorado, Colorado Springs Dr. C. Edward.
GoogleTest Primer. Outline Basic Concepts Assertions Basic Assertions Binary Comparison String Comparison Floating-Point Comparison Simple Tests Test.
Installation and Deployment in Microsoft Dynamics CRM 4.0
SQL Injection Defense in Python Edgar Román October 4, 2011.
ЗАРЯДКА НА АНГЛИЙСКОМ ЯЗЫКЕ.  Зарядка на уроке английского языка может стать самым любимым и веселым занятием для детей, при том, что она проходит исключительно.
Работа выполнена учителем физики Паниной О. В. Руководитель:
Автоматическая генерация кода программ с явным выделением состояний Канжелев С.Ю. магистрант СПбГУ ИТМО Шалыто А.А. доктор технических наук профессор СПбГУ.
R1R2R3R4R5R6R7R1R2R3R4R5R6R7. Аксиома R 1. В пространстве существуют плоскости. В каждой плоскости пространства выполняются все аксиомы планиметрии.
Астащенко Александр, 445 группа Научный руководитель: В.Г.Шистеров.
Разработка информационной системы накопительной программы лояльности для мобильных устройств Автор: Дьяченко Василий Владимирович мат-мех, 545 группа Научный.
Всевоволод Головизнин, MVC – паттерн проектирование, в котором бизнес - логика, управляющая логика и интерфейс разделены на три отдельных компонента.
Санкт-Петербургский Государственный Университет Математико-механический факультет Кафедра системного программирования Научный руководитель: Я.А. Кириленко.
Bank ownership and lending behavior Alejandro Micco, Ugo Panizza Politicians and banks: Political influences on government-owned banks in emerging markets.
АВДАШЕВА СВЕТЛАНА КАФЕДРА ЭКОНОМИЧЕСКОГО АНАЛИЗА ОРГАНИЗАЦИЙ И РЫНКОВ 2011/2012 УЧЕБНЫЙ ГОД Теория отраслевых рынков (по выбору для 3 курса факультета.
Учитель математики Кулакова Т.М. МОУ ООШ №15 г.о Новокуйбышевск Самарской области Сентябрь 2011г.
Преподаватель: Арутюнова Е. В. (ст.преп.) Выполнила: студентка 1 курс ФЖ Манаенкова Елена Москва, 2010.
ООП Классы – 2. Ссылки Ссылка – еще одно имя объекта. Используйте ссылки вместо указателя. Это более безопасно. Complex c(10,10); Complex c2& = c; c2+=10;
Функции IV. Биоинформатические ресурсы для работы с мембранными белками А.Б.Рахманинова (3 и 4 апреля 2007г.)
Михаил Налётов Активные продажи на сайте. Может ли ваш сайт работать еще эффективнее?
Основы цифровой обработки речевых сигналов. Общая схема процесса речеобразования x[n] – дискретные отсчеты сигнала возбуждения y[n] – дискретные отсчеты.
Сравнение различных методов хранения XML в реляционных базах данных и в разных системах. Нгуен Тхань Хуен- 545 группа Руководитель : Б.А. Новиков Рецензент:
 Нужно много различных протоколов связи  Каждый из них может реализовываться на разных платформах Современные сети Много устройств, компьютеров и сетей.
Увеличение модульности программного обеспечения на языке Java Курсовая работа студента 345 группы Абишева Тимура Маратовича Научный руководитель: Профессор.
Remote Procedure Calls. 2 Client/Server Paradigm Common model for structuring distributed computations A server is a program (or collection of programs)
Начало Реформации в Европе. Обновление христианства.
Обработка исключений в C# Единая техника обнаружения ошибок времени выполнения и передачи информации о них.
INTRO TO MAKING A WEBSITE Mark Zhang.  HTML  CSS  Javascript  PHP  MySQL  …That’s a lot of stuff!
Unit Testing Using PyUnit Monther Suboh Yazan Hamam Saddam Al-Mahasneh Miran Ahmad
Securing LAMP: Linux, Apache, MySQL and PHP Track 2 Workshop PacNOG 7 July 1, 2010 Pago Pago, American Samoa.
FTP File Transfer Protocol. Introduction transfer file to/from remote host client/server model  client: side that initiates transfer (either to/from.
Module 15: Monitoring. Overview Formulate requirements and identify resources to monitor in a database environment Types of monitoring that can be carried.
Cms 2 YE Closing+ tm Preparation & Closing Job Cost.
Module 8: Server Management. Overview Server-level and instance-level resources such as memory and processes Database-level resources such as logical.
 2004 Prentice Hall, Inc. All rights reserved. Chapter 35 – Python Outline 35.1 Introduction First Python Program Python Keywords 35.2 Basic.
Xcode testing Using XCTest.
Python File Handling. In all the programs you have made so far when program is closed all the data is lost, but what if you want to keep the data to use.
1 Dr Alexiei Dingli Web Science Stream Advanced ROR.
Эти удивительные профессии Учитель английского языка Камышникова Н.А. МОУ СОШ №9 Г.БАЛАШОВА.
Board Games. KnowWant to knowLearnt jigsawpuzzle adominoesyrw cfeukoloased hdscrabbleja eetashiefyjr sfmarblesaet sokbilliards ybackgammonu.
COMMITMENT CONTROL IN ADVANTAGE PLEX for DB2/400 Yolanda Scholtz 18 November 2002 Session - 4E 15: :00 EDGE EMEA Conference
Google App Engine Data Store ae-10-datastore
FTP Server API Implementing the FTP Server Registering FTP Command Callbacks Data and Control Port Close Callbacks Other Server Calls.
Push it To The Limits! Blend. Sketch Flow. Докладчик: Андрей Черных.
Mysql_config_editor How to add a new user mysql_config_editor set --login-path=prod --host=localhost --user=root --password.
Python Let’s get started!.
1 CS 3870/CS 5870: Note 13 Web Service. 2 What is Web Service? Providing functionality online to other Web applications SOAP Simple Object Access Protocol.
SAP Navigation.
Web Server Apache PHP HTTP Request User types URL into browser Address resolved if nec. We use directly Most browsers request.
Oracle Business Intelligence Foundation – Testing and Deploying OBI Repository.
Raina NEC Application Object Describes the methods, properties, and collections of the object that stores information related to the entire Web.
TESTING IN PYTHON ENVIRONMENT By Mr. Siva. STARTER In Pairs, Choose the starter activity sheet and spot the errors in code. Year 9 and > White Card.
PHPUnit Julia Bondar IAPM23. Agenda What is PHPUnit How to write an automated test Writing and running tests with PHPUnit Advantages and disadvantages.
2 Copyright © 2004, Oracle. All rights reserved. Running a Forms Developer Application.
Проект «Почему мыльные пузыри круглые?» Муниципальное автономное общеобразовательное учреждение Чаинского района «Подгорнская средняя общеобразовательная.
Automated Testing with PHPUnit. How do you know your code works?
Тестирование программного обеспечения в Visual Studio Alexander Yakovlev
Ratnadeep Debnath Testing your Django App.
Running a Forms Developer Application
TESTING TEST DRIVEN DEVELOPMENT
Python Let’s get started!.
Module 36 (Expanding Your Control of Windows Victims)
Тестирование кабельных жгутов. Мы предоставляем решения для тестирования качества от стандартных до сложных в области электрических испытаний и измерений.
Дизайн корпоративных сайтов SharePoint 2010
Cloud Based Media Streamer
Flask Web Frameworks for Python
Presentation transcript:

Нескучное тестирование с pytest Роман Иманкулов / @rdotpy / 14 июня 2014

Кратко о докладчике Жизненный путь – с 1983 Python – c 2005 Жизненный путь – с 1983 Python – c 2005 Server-Side для веб – c 2006 Разработка с pytest – c 2012

TDD в 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 Мистический опыт Django testing setups & teardowns

Есть ли альтернатива?

pytest

pytest — это не еще один xUnit фреймворк!

То, что отличает pytest от других фреймворков pytest fixtures

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 @pytest.fixture def user(): 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, ...) 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()

setup и teardown в одном флаконе 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.fixture(scope='session') def item_rel(): rel = Releaser(lambda o: ...) rel.start() return rel @pytest.yield_fixture def item(item_gen, item_rel): item = item_gen.get() yield item item_rel.put(item)

Как ещё использовать fixtures warnings: turn MySQL warnings to errors mock: подготовка mockup объектов freezegun: управление временем selenium: запуск веб-драйвера

Как ещё использовать fixtures Проверка корректности settings перед тестом Залогиненный тестовый http client для Flask или Django

О чём я ещё не рассказал def pytest_addoption(): параметры командной строки @pytest.mark.parametrize: параметризация тестов pytest-django: интеграция с Django pytest-xdist: параллельные и распределенные тесты tox: выполнение тестов для разных python detox: то же самое, только параллельно

Спасибо! Вопросы? Роман Иманкулов / @rdotpy / http://imankulov.name