Automation with python
1.42K subscribers
1 photo
144 links
Канал агрегатор, все самое интересно об автоматизации на Python

https://www.facebook.com/AutomationWithPython/
Download Telegram
Статья, о том, что же такое «плохая» функция и как сделать из нее «хорошую»? 👍
Секреты хорошей функции:
- Она внятно названа
- Соответствует принципу единственной обязанности
- Содержит докстроку
- Возвращает значение
- Состоит не более чем из 50 строк
- Она идемпотентная и, если это возможно, чистая

> Выполнить все пункты для конкретной функции порой невозможно
https://habr.com/company/piter/blog/426381/
В статье описаны примеры с чего начать автоматическое тестирование вашего приложения на разных окружениях используя unittest или pytest а так же статические анализаторы кода
https://realpython.com/python-testing/
Очень часто в тестах, нужны какие то случайные данные
- заполнить форму
- создать пользователя
- и т.д ...

Можно конечно воспользоваться "паттерном" проектирования и "захардкодидь" все 👽
А можно воспольззоваться библиотекой faker ☺️

pip install faker

В статье довольно подробно описано плюс есть примеры кода
- как начать пользоваться
- как изменить локализацию
- как можно кастомизировать faker

https://semaphoreci.com/community/tutorials/generating-fake-data-for-python-unit-tests-with-faker
Библиотека которая поможет Вам генерировать тестовые данные
описав небольшие модели, можно просто быстро и красиво создавать нужные сущности со связами для тестов
работает с ORM:
- Django
- SqlAlchemy
- Mongo

Очень прикольный подход, если Вам он почему то не подходит, можно просто перенять идею 😉

pip install factory_boy

doc 👉 https://factoryboy.readthedocs.io/en/latest/index.html
link 👉 https://github.com/FactoryBoy/factory_boy
Модульное тестирование и Python в Mail.Ru

Статья состоит из трёх частей:
- чего добиваются с помощью модульного тестирования
- принципы, которым следуют
- как упомянутые принципы реализованы на Python

link 👉 https://bit.ly/2Lu9IYK
video 👉 https://youtu.be/npJVGhmQSU4
Аннотации типов Python
В старых версиях Python, аннотации типов писались в комментариях или docstring и это не очень прикольно выглядело, но лучше, чем ничего

def multiply(x, y):
"""
:param int x:
:param int y:
:rtype: int
"""
return x * y


Начаиная с Python3.6+ поддерживаются аннотации типов переменных, полей класса, аргументов и возвращаемых значений функций

def multiply(x: int, y: int) -> int:
return x * y

В статье приведены примеры написания и использования анотаций
описаны основные встроеные типы модуля typing
инструменты поддерживающие анотации

link 👉 https://bit.ly/2QNQyTH
Mock in tests
#python #mock #tests #pytest #unittest

В статье объясняется что такое “мок”, зачем они нужны
Приведены множество примеров как использовать “моки”
Так приведено сравнение 2х библиотек для “моков”

mock

@mock.patch('__main__.square', return_value=1)
def test_function(self, mocked_square):
self.assertEquals(square(5), 1)

monkeypatch

def test_function(monkeypatch):
monkeypatch.setattr('__main__.square', lambda x: 1)
assert square(5) == 1

link 👉https://bit.ly/2FGCVPm
7 code editing tips
#python #pycharm #pycon

Отличны доклад от Jetbrains
Андрей Власовских рассказал, как ускорить и упростить свою работу в PyCharm
Показал несколько полезных shortcut 👍
Я для себя открыл парочку новых 😁

link 👉https://youtu.be/FW3_OPBxk2s
Soft assert

#tests #pytest

Очень часто в тестах нужно сделать несколько проверок
Это конечно противоречит понятию “Один тест, одна проверка”
Но это в идеальном мире, а не в нашем 😁

example:

def test_one():
response = requests.get(my_test_url).json()
assert response[‘id’] == 1
assert response[‘success’] is True
assert response[‘name’] == ‘test name’

В такой реализации есть одна проблема
При срабатывании первого assert остальные проверки уже не будут совершаться
И если там тоже есть проблемы, то мы о них узнаем когда пофиксят первую
Решением может быть реализация кастомных soft assert или же просто использовать библиотеку (plugin) pytest_check

example:

def test_two(check):
response = requests.get(my_test_url).json()
check.equal(response[‘id’], 1)
check.is_true(response[‘success’])
check.equal(response[‘name’], ‘test name’)

link 👉https://bit.ly/2MnM9kR
Flaky test
#tests #pytest

Довольно часто в работе автоматизатора тестирования встречаются нестабильные тесты (flaky),
которые падают один раз в 10-15 запусков по “непонятным причинам”.
Как же бороться с такими тестами, по запускал в ручную, flaky_test PASSED

Блага у pytest есть “замечательные флаги” для запуска таких тестов:
- -x - остановить при первом падении
- —pdb - устанавливает брейкпоинт дебагера в месте падения

example:

pytest -k flaky_test -x --pdb

Но в таком случаее нужно все равно сидеть запускать тесты в ручную,
пока звезды не сойдуться и flaky test не упадет,
а можно написать свой тест генератор 😁

conftest.py

def pytest_addoption(parser):
parser.addoption(
"--repeat",
action="store",
default=1,
type=int,
metavar='repeat',
help='Number of times to repeat each test. Mostly for debug purposes'
)


def pytest_generate_tests(metafunc):
if metafunc.config.option.repeat > 1:
metafunc.fixturenames.append('repeat')
metafunc.parametrize('repeat', range(metafunc.config.option.repeat))


И будет Вам “счастье” 😇

pytest -k flaky_test -x --pdb --repeat 20

link 👉 https://bit.ly/2S8POID
Linting …
#python #lint

Холиварный рассказ про линтеры 😍
Зачем они нам нужны и как их применять на проекте
Лично мое мнение, линтер must have на проекте, в разы упрошает код ревью

Какие бывают линтеры:
- Pylint
- Flake8
- SonarQube
- MyPy

👉link: https://bit.ly/2EbFRkC
👉video: https://youtu.be/7IVCOzL41Lk
Pytest + Selenium
#pytest #selenium

Небольшой туториал - pytest в связке с selenium
- Приведены примеры создания фикстур драверов chrome & firefox
- Пример реализации кросбраузерного тестирования, с помошью одной фикстуры и 2х браузеров
- Также показано как создавать html репорты
Статья будет полезна для новичков или для тех кто только начал смотреть в строну pytest или selenium 👌

👉 link: https://bit.ly/2ExhLCr
Аннотации типов Python, part 2

В статье описаны примеры
- Создание Generic-типов
- Объявление анотаций Callable
- Как помочь статическому анализатору с помощью Cast
- А так же как узнать об анотациях в интерпретаторе

👉link: https://bit.ly/2GYQpYf
👉link part 1: https://bit.ly/2C3yEmy