Большинство примеров тестов в книгах, семинарах и презентациях упрощены настолько, что их невозможно применить в реальных проектах. Из-за такого упрощения, сначала получаешь заряд мотивации, но столкнувшись с суровой действительностью быстро бросаешь написание тестов. Мы решили исправить этот пробел, показав тестирование на реальных примерах из нашей практики. Мы расскажем о тестировании баз данных, сетевых взаимодействий и веб-форм. Также расскажем об инструментах, которые мы используем для тестирования.
Учим автотесты человеческому языку с помощью Allure и PyTestRina UzhevkoДоклад Андрея Усова на весенней встрече Московского клуба тестировщиков (MSTC,12.03.2016г) в офисе Mail.ru
Unit test быстрый стартAntonio Практические основы тестирования на php Unit-test: понятия, тонкости, пути решения, вопросы для проработки.
PHPUnittest fast start
Разработано http://webgloss.ru
Лекция 7. Исключения и менеджеры контекста.Roman BrovkoИсключения, зачем они нужны и как их обрабатывать. Встроенные исключения и базовые классы BaseException и Exception. Операторы try...except..else..finally. Менеджеры контекста и модуль contextlib.
Unit testing iOS ApplicationsAndrey VolobuevSpeech from nixDV 2016 conference
Доклад с конференции nixDV 2016
Andrey Volobuev Khabarovsk
Андрей Волобуев Хабаровск
Нескучное тестирование с pytestRoman ImankulovНаписание юнит-тестов большинству представляется занятием скучным и до некоторой степени бесполезным. Мое мнение — это всё оттого, что сама "классическая" схема юнит-тестов подразумевает непродуктивное написание унылого линейного кода.
В докладе я расскажу о том, как с помощью pytest начать писать тесты, которые приятно читать и поддерживать, почему setUp и tearDown — это прошлый век, как с помощью правильной организации fixtures ускорить исполнение тестов, а также какие ещё уловки могут помочь вам в вашей нелегкой борьбе с рутиной.
Лекция 6. Классы 1.Roman BrovkoСинтаксис объявления классов. Атрибуты, связанные и несвязанные методы, __dict__, __slots__. Статические методы и методы класса. Свойства, декоратор @property. Наследование, перегрузка методов и функция super. Декораторы классов. Магические методы.
Drf vs GraphqlВадим ШевченкоПреимущества и недостатоки в работе Django Rest Framework и GraphQL на примерах
Оптимизация запросов с фронтом. Фильтрация, выборка вложенных данных
Лекция 5. Встроенные коллекции и модуль collections.Roman BrovkoИ снова встроенные коллекции: кортеж, список, множество, словарь - обход в глубину, обзор методов, примеры. Почти всё про модуль collections: именованные кортежи, счётчики, defaultdict, OrderedDict.
Лекция #5. Введение в язык программирования Python 3Яковенко КириллWeb-программирование
Лекция #5. Введение в язык программирования Python 3
Цикл лекций читается в Омском государственном университете им. Ф.М.Достоевского на факультете компьютерных наук.
Лектор: Яковенко Кирилл Сергеевич.
12 - Web-технологии. Django моделиRoman Brovko1. Создание и изменение объектов
2. Загрузка данных из базы
3. QuerySet
4. ModelManagers
5. Расширение ModelManagers
6. Миграции баз данных
Unit testing iOS ApplicationsAndrey VolobuevSpeech from nixDV 2016 conference
Доклад с конференции nixDV 2016
Andrey Volobuev Khabarovsk
Андрей Волобуев Хабаровск
Нескучное тестирование с pytestRoman ImankulovНаписание юнит-тестов большинству представляется занятием скучным и до некоторой степени бесполезным. Мое мнение — это всё оттого, что сама "классическая" схема юнит-тестов подразумевает непродуктивное написание унылого линейного кода.
В докладе я расскажу о том, как с помощью pytest начать писать тесты, которые приятно читать и поддерживать, почему setUp и tearDown — это прошлый век, как с помощью правильной организации fixtures ускорить исполнение тестов, а также какие ещё уловки могут помочь вам в вашей нелегкой борьбе с рутиной.
Лекция 6. Классы 1.Roman BrovkoСинтаксис объявления классов. Атрибуты, связанные и несвязанные методы, __dict__, __slots__. Статические методы и методы класса. Свойства, декоратор @property. Наследование, перегрузка методов и функция super. Декораторы классов. Магические методы.
Drf vs GraphqlВадим ШевченкоПреимущества и недостатоки в работе Django Rest Framework и GraphQL на примерах
Оптимизация запросов с фронтом. Фильтрация, выборка вложенных данных
Лекция 5. Встроенные коллекции и модуль collections.Roman BrovkoИ снова встроенные коллекции: кортеж, список, множество, словарь - обход в глубину, обзор методов, примеры. Почти всё про модуль collections: именованные кортежи, счётчики, defaultdict, OrderedDict.
Лекция #5. Введение в язык программирования Python 3Яковенко КириллWeb-программирование
Лекция #5. Введение в язык программирования Python 3
Цикл лекций читается в Омском государственном университете им. Ф.М.Достоевского на факультете компьютерных наук.
Лектор: Яковенко Кирилл Сергеевич.
12 - Web-технологии. Django моделиRoman Brovko1. Создание и изменение объектов
2. Загрузка данных из базы
3. QuerySet
4. ModelManagers
5. Расширение ModelManagers
6. Миграции баз данных
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Andrey RebrovКак-то так происходит, что “на 10 девчонок по статистике 9 ребят”, а точнее на группу из 5-7 разработчиков – 1 тестировщик. Или его нет совсем. Так что очень часто приходится и код писать, и тестировать, а дата релиза все ближе и ближе.
В тех случаях, когда мы пишем веб-приложение, помочь в нашей нелегкой судьбе может бодрящий микс из Selenium и TestNG... Как это сделали мы, какие потом получили выводы и результаты — все это я и хочу рассказать и показать
TestRail. Некоторые возможности интеграции.PyNSKДокладчик:
Антон Голов
Описание:
Поговорим о некоторых функциях для интеграции TestRail c внешними системами и автоматизации деятельности QA. Будет немного про Google Docs, и некоторый набор методов работы с Testrail, рассмотрим возможности работы с системами автоматизированного тестирования.
iOS and Android Mobile Test AutomationAndrii DzyniaМир мобильных телефонов очень сильно изменил нашу жизнь. В наше время невозможно представить современного человека, без этого чудо устройства. На рынке появляется все больше устройств и приложений. И чтобы удобнее пользоваться этими приложениями пользователи выбирают “умные” телефоны, или как их еще принято называть смартфоны. В своем докладе я хочу поделиться своим опытом автоматизации приложений под Android и iOS. Я расскажу о том, какие инструменты автоматизации я использовал. Поговорим о недостатках этих инструментов и какие из них стоит использовать у себя на проекте.
Дело тестера боится: как в опытных руках могут заиграть Java и TestNgIT61Вячеслав Марков, QA engineer в Weezlabs
Я расскажу о том, как в нашей фирме организовано тестирование бэкенда с помощью тестового фреймворка TestNG и Java. Расскажу о data-driven тестировании и о том, почему его удобно применять. Покажу и опишу разработанную нами структуру типового тестового проекта. Представлю применяемые нами способы сбора и документирования результатов, а так же их анализ в условиях CI.
Python Meetup iQSpace21 октября состоялась 1 встреча одесского сообщества Python-разработчиков - Python Meetup.
Поговорили о новых технологиях, диалектах и инструментарии для создания графических интерфейсов.
Докладчики:
Александр Степанов (Python Team Lead at SteelKiwi Inc.)
Тема: Шаблон проекта. Использование Vagrant, VirtualEnv и Ansible provisioner. Зачем это необходимо?
Евгений Гетманский (Рython team lead at SteelKiwi Inc.)
Тема: Оптимизация работы веб сервера с базой данных на примере Django.
10 - Web-технологии. MVC фреймворки (продолжение)Roman Brovko1. Контроллеры в Django
2. Объекты HttpRequest и HttpResponse
3. Получение GET и POST параметров
4. Работа с HTTP заголовками в Django
5. Декораторы
6. Шаблонизация в Django
7. Наследование шаблонов
8. Context processors
Инсталляционные профили, создание сборокAndrii PodanenkoДоклад на тему Инсталляционные профили, создание сборок.
Автор: Ершов Андрей.
Выступал 11.06.2010 12:30-13:20 в зеленой комнате.
«Scrapy internals» Александр Сибиряков, Scrapinghubit-people- Scrapy is a framework for web scraping that allows for extraction of structured data from HTML/XML through selectors like CSS and XPath. It provides features like an interactive shell, feed exports, encoding support, and more.
- Scrapy is built on top of the Twisted asynchronous networking framework, which provides an event loop and deferreds. It handles protocols and transports like TCP, HTTP, and more across platforms.
- Scrapy architecture includes components like the downloader, scraper, and item pipelines that communicate internally. Flow control is needed between these to limit memory usage and scheduling through techniques like concurrent item limits, memory limits, and delays between calls.
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrainsit-peopleThe document discusses debugging in Python 3.6. It describes tracing and frame evaluation debuggers. Tracing debuggers slow code execution significantly by calling the tracing function on every line. Python 3.6 introduced a new frame evaluation API that allows evaluating frames directly, avoiding the performance issues of tracing. The document demonstrates how to build a debugger using this approach, including setting breakpoints and stepping through code by inserting temporary breakpoints on each line. Frame evaluation allows building a debugger that is faster than tracing debuggers without significant performance penalties.
«Gevent — быть или не быть?» Александр Мокров, Positive Technologiesit-peopleGevent is a concurrency library for Python that uses greenlets, or lightweight coroutines, to provide asynchronous operations and non-blocking I/O. It allows developing highly concurrent applications using a simple and familiar synchronous style. The document compares gevent to other concurrency options like asyncio and discusses how it provides features like asynchronous task execution, event loops, and inter-greenlet communication using queues and callbacks.
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...it-peopleThe document discusses what serverless computing is and how it can be used for building applications. Serverless applications rely on third party services to manage server infrastructure and are event-triggered. Popular serverless frameworks like AWS Lambda, Google Cloud Functions, Microsoft Azure Functions, and Zappa allow developers to write code that runs in a serverless environment and handle events and triggers without having to manage servers.
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologiesit-peopleThe document describes a talk on optimizing Python performance through just-in-time compilation. It discusses how the CPython interpreter works by evaluating bytecode through an evaluation loop. It then talks about how PyPy achieves faster performance through jit compilation of hot loops detected via tracing. The talk dives into the RPython language used to implement PyPy and shows an example of compiling a small Python program to C with RPython. It also discusses using partial evaluation to specialize an interpreter for constant inputs.
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn Systemit-peopleThe document appears to be a transcript of Python code being executed in an interactive Python shell. It contains examples testing the behavior of built-in functions and operators like sorted(), reversed(), isinstance(), sum(), float("nan"), is, min(), and comparisons like ==, <, on various data types including lists, tuples, and dictionaries.
«(Без)опасный Python», Иван Цыганов, Positive Technologiesit-peopleThe document discusses various security vulnerabilities in Python web applications. It begins with an overview of the OWASP Top 10 security risks, with sections focusing on risks related to using components with known vulnerabilities (A9) and insufficient attack protection (A7). For A9, it provides examples of vulnerabilities in popular Python packages and recommends checking changelogs and vulnerability databases. For A7, it recommends implementing attack protections like login attempts logging, rate limiting, and use of a web application firewall. The document also covers security misconfiguration (A5), giving examples like using default settings in production and exposing tracebacks.
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...it-peopleThe document discusses best practices for writing tests in Swift, including recommendations to:
- Write clean, readable tests that focus on asserting a single truth
- Use a domain-specific language in tests for clarity
- Structure tests with "given-when-then"
- Mock dependencies through protocols to enable test isolation
- Favor partial mocks over fully mocking to limit complexity
18. Проект растет - тестов
становится много
...
./tests/
./tests/test_add.py
./tests/test_sub.py
./tests/test_div.py
./tests/test_mul.py
./tests/test_pi.py
19. Nose - запускалка тестов
Устанавливаем nose
$ pip install nose
Запускаем тесты
$ nosetests
..
--------------------------------------------
Ran 100500 tests in 0.219s
OK
23. Запуск тестов в Django
Запуск всех тестов в папке ./blog
$ manage.py test ./blog --settings project.
testing_settings
Запуск тестов в одном файле
$ manage.py test ./blog/test/test_forms.py --settings
project.testing_settings
24. Запуск тестов только для одного класса
$ manage.py test ./blog/test/test_forms.py:PostFormTest
--settings project.testing_settings
Запуск только одного теста
$ manage.py test ./blog/test/test_forms.py:PostFormTest.
test_post_from_submit --settings project.testing_settings
26. Тест view
from django.test import TestCase, Client
class HomePageTest(TestCase):
def test_homepage_is_available(self):
c = Client()
response = c.get('/')
self.assertEquals(response.status_code, 200)
27. class HomePageTest(TestCase):
def setUp(self):
self.posts = [ ]
for i in range(20):
post = Post.objects.create(
title = "Hello %d" % i,
)
self.posts.append(post)
def test_homepage_contains_posts(self):
pass
28. class HomePageTest(TestCase):
def setUp(self):
self.posts = [ ]
for i in range(20):
post = Post.objects.create(
title = "Hello %d" % i,
)
self.posts.append(post)
def test_homepage_contains_posts(self):
c = Client()
response = c.get('/')
self.assertEquals(response.status_code, 200)
self.assertIn(self.posts[-1].title, response.content)
self.assertIn(self.posts[-2].title, response.content)
31. from django.db import models
class Post(models.Model):
picture = models.ImageField(
upload_to='posts', blank=True, null=True)
title = models.CharField(max_length=255)
body = models.CharField(max_length=255)
class Meta:
ordering = ['-id']
32. Отправка формы
class PostFormTest(TestCase):
def test_post_from_submit(self):
c = Client()
params = {'title':'Hello Pycon'}
response = c.post('/posts/add/', params)
self.assertEquals(response.status_code, 302)
post = Post.objects.get(title=params['title'])
40. Прочее в Django
- Middleware
- Template tags, filters
- Context processors
- тестируются модульными тестами как
простые функции, аналогично с
примером 1+1 = 2
41. Особенности тестов view в Django
----------------------------
middleware
-----------------------------
context processors
-----------------------------
template
-----------------------------
view
-----------------------------
models
-----------------------------
network
42. Flexmock
- Заменять части объектов и классов
- Заменять функции, в том числе
встроенные
- Создавать объекты заглушки
- Проверять ожидания (сколько раз
вызван метод, с какими аргументами)
47. Есть требования ...
def get_url_content(url):
# ToDo
# Вернуть контент страницы
# или None, в случае ошибки
pass
48. Как написать тест?
def test_get_url_content(self):
url = 'http://example.com'
text = get_url_content(url)
self.assertEquals(text, ???)
49. Тестирование реализации
Пишем тест имея представление о внутренностях
def get_url_content(url):
try:
response = urllib.urlopen(url)
content = response.read()
response.close()
except IOError:
return None
return content
Неверно с точки зрения теории,
удобно на практике
50. Тест для случая нормального
выполнения
def test_get_url_content(self):
url = 'http://example.com'
response = StringIO("<html>")
(flexmock(urllib)
.should_receive('urlopen')
.with_args(url)
.and_return(response)
.once())
text = get_url_content(url)
self.assertEquals(text, "<html>")
51. Тест в случае ошибки сети
def test_get_url_content_on_ioerror(self):
url = 'http://example.com'
(flexmock(urllib)
.should_receive('urlopen')
.with_args(url)
.and_raise(IOError("test exception"))
.once())
text = get_url_content(url)
self.assertEquals(text, None)