Статья, о том, что же такое «плохая» функция и как сделать из нее «хорошую»? 👍
Секреты хорошей функции:
- Она внятно названа
- Соответствует принципу единственной обязанности
- Содержит докстроку
- Возвращает значение
- Состоит не более чем из 50 строк
- Она идемпотентная и, если это возможно, чистая
> Выполнить все пункты для конкретной функции порой невозможно
https://habr.com/company/piter/blog/426381/
Секреты хорошей функции:
- Она внятно названа
- Соответствует принципу единственной обязанности
- Содержит докстроку
- Возвращает значение
- Состоит не более чем из 50 строк
- Она идемпотентная и, если это возможно, чистая
> Выполнить все пункты для конкретной функции порой невозможно
https://habr.com/company/piter/blog/426381/
Хабр
Как сделать функции на Python еще лучше
Собственно, заголовок этой замечательной статьи от Джеффа Кнаппа (Jeff Knupp), автора книги "Writing Idiomatic Python" полностью отражает ее суть. Читайте внимат...
Интересная статья про апдейты ПО, про риски и как и минимизировать
https://tproger.ru/articles/extending-software-functionality/
https://tproger.ru/articles/extending-software-functionality/
Tproger
Как расширить функциональность ПО на продакшене, ничего не сломав
Когда делаешь апргейд на продакшне, велик шанс что-нибудь сломать. Рассказываем, как сделать всё правильно
В статье описаны примеры с чего начать автоматическое тестирование вашего приложения на разных окружениях используя unittest или pytest а так же статические анализаторы кода
https://realpython.com/python-testing/
https://realpython.com/python-testing/
Realpython
Getting Started With Testing in Python – Real Python
Learn Python testing in depth by writing unit and integration tests, measuring performance, and uncovering security issues. Find bugs before your users do!
Сила "звёздочек" в python 💪
https://tproger.ru/translations/asterisks-in-python-what-they-are-and-how-to-use-them/
https://tproger.ru/translations/asterisks-in-python-what-they-are-and-how-to-use-them/
Tproger
Звёздный Python: где и как используются * и **
В Python много где можно встретить операторы * и **, которые в зависимости от контекста дают разный эффект. Разбираемся, как и где использовать «звёздочки».
Доклад Михаила Поляруша на SeleniumCamp, как быстро и просто начать писать тексты на python 💪😎
https://youtu.be/MvofVGJHfJI
https://youtu.be/MvofVGJHfJI
YouTube
От идеи до Selenium теста всего лишь один шаг — Python
Python очень часто сравнивают с другими языками программирования. Например, программы, написанные на python будут чуть дольше выполняться, чем на Java, но зато их можно разработать буквально в 2-3 раза быстрее, чем аналогичную программу на Java.
Скорость…
Скорость…
Очень часто в тестах, нужны какие то случайные данные
- заполнить форму
- создать пользователя
- и т.д ...
Можно конечно воспользоваться "паттерном" проектирования и "захардкодидь" все 👽
А можно воспольззоваться библиотекой
- как начать пользоваться
- как изменить локализацию
- как можно кастомизировать faker
https://semaphoreci.com/community/tutorials/generating-fake-data-for-python-unit-tests-with-faker
- заполнить форму
- создать пользователя
- и т.д ...
Можно конечно воспользоваться "паттерном" проектирования и "захардкодидь" все 👽
А можно воспольззоваться библиотекой
faker ☺️pip install fakerВ статье довольно подробно описано плюс есть примеры кода
- как начать пользоваться
- как изменить локализацию
- как можно кастомизировать faker
https://semaphoreci.com/community/tutorials/generating-fake-data-for-python-unit-tests-with-faker
Semaphore
Generating Fake Data for Python Unit Tests with Faker - Semaphore
Learn how to use Faker library to generate fake data sets in your Python unit tests.
Heisenbug 2018 Moscow
большая техническая конференция для тестировщиков и не только 😄
6-7 декабря, смотрите бесплатную трансляцию
link 👉 https://www.youtube.com/watch?v=4M55s_YqKc4
большая техническая конференция для тестировщиков и не только 😄
6-7 декабря, смотрите бесплатную трансляцию
link 👉 https://www.youtube.com/watch?v=4M55s_YqKc4
YouTube
Бесплатная трансляция Heisenbug 2018 Moscow. Зал 1. День 1.
Ближайшая конференция — Heisenbug 2025 Spring, 5—6 апреля (Москва + онлайн-трансляция).
Подробности и билеты: https://jrg.su/Tq0vcu
— — . .
Подробности и билеты: https://jrg.su/Tq0vcu
— — . .
Библиотека которая поможет Вам генерировать тестовые данные
описав небольшие модели, можно просто быстро и красиво создавать нужные сущности со связами для тестов
работает с ORM:
- Django
- SqlAlchemy
- Mongo
Очень прикольный подход, если Вам он почему то не подходит, можно просто перенять идею 😉
doc 👉 https://factoryboy.readthedocs.io/en/latest/index.html
link 👉 https://github.com/FactoryBoy/factory_boy
описав небольшие модели, можно просто быстро и красиво создавать нужные сущности со связами для тестов
работает с ORM:
- Django
- SqlAlchemy
- Mongo
Очень прикольный подход, если Вам он почему то не подходит, можно просто перенять идею 😉
pip install factory_boydoc 👉 https://factoryboy.readthedocs.io/en/latest/index.html
link 👉 https://github.com/FactoryBoy/factory_boy
GitHub
GitHub - FactoryBoy/factory_boy: A test fixtures replacement for Python
A test fixtures replacement for Python. Contribute to FactoryBoy/factory_boy development by creating an account on GitHub.
Модульное тестирование и Python в Mail.Ru
Статья состоит из трёх частей:
- чего добиваются с помощью модульного тестирования
- принципы, которым следуют
- как упомянутые принципы реализованы на Python
link 👉 https://bit.ly/2Lu9IYK
video 👉 https://youtu.be/npJVGhmQSU4
Статья состоит из трёх частей:
- чего добиваются с помощью модульного тестирования
- принципы, которым следуют
- как упомянутые принципы реализованы на Python
link 👉 https://bit.ly/2Lu9IYK
video 👉 https://youtu.be/npJVGhmQSU4
Еще больше докладов 😁 XP DAYS UKRAINE 2018
https://www.youtube.com/playlist?reload=9&list=PLrw9xNHk9SGQdBS8wKrKyMYP_XxUXszq1
https://www.youtube.com/playlist?reload=9&list=PLrw9xNHk9SGQdBS8wKrKyMYP_XxUXszq1
YouTube
XP DAYS UKRAINE 2018 - YouTube
"Отладка в Python"
Достаточно старая запись доклада с Moscow Python conf
Но все же будет полезно для тех кто до сих пор пользуются
Альтернатива есть 😂
link 👉 https://youtu.be/nHhifqUm_Qg
Достаточно старая запись доклада с Moscow Python conf
Но все же будет полезно для тех кто до сих пор пользуются
print() для дебага.Альтернатива есть 😂
link 👉 https://youtu.be/nHhifqUm_Qg
YouTube
Кирилл Борисов (Яндекс) - Отладка в Python: 2016 edition
Доклад с Moscow Python Conf 2016 (http://conf.python.ru)
Слайды: https://conf.python.ru/otladka-v-python-2016-edition/
Спросите любого программиста и он честно вам ответит, что 90% процентов его времени уходит на поиск ошибок. Подпишусь под этим и я, сменивший…
Слайды: https://conf.python.ru/otladka-v-python-2016-edition/
Спросите любого программиста и он честно вам ответит, что 90% процентов его времени уходит на поиск ошибок. Подпишусь под этим и я, сменивший…
Аннотации типов Python
В старых версиях Python, аннотации типов писались в комментариях или docstring и это не очень прикольно выглядело, но лучше, чем ничего
Начаиная с Python3.6+ поддерживаются аннотации типов переменных, полей класса, аргументов и возвращаемых значений функций
de
описаны основные встроеные типы модуля typing
инструменты поддерживающие анотации
link 👉 https://bit.ly/2QNQyTH
В старых версиях Python, аннотации типов писались в комментариях или docstring и это не очень прикольно выглядело, но лучше, чем ничего
def multiply(x, y):
"""
:param int x:
:param int y:
:rtype: int
"""
return x * yНачаиная с Python3.6+ поддерживаются аннотации типов переменных, полей класса, аргументов и возвращаемых значений функций
de
f multiply(x: int, y: int) -> int:
return x * y
В статье приведены примеры написания и использования анотацийописаны основные встроеные типы модуля typing
инструменты поддерживающие анотации
link 👉 https://bit.ly/2QNQyTH
Хабр
Введение в аннотации типов Python
Введение Автор иллюстрации — Magdalena Tomczyk Вторая часть Python — язык с динамической типизацией и позволяет нам довольно вольно оперировать переменными разн...
Mock in tests
#python #mock #tests #pytest #unittest
В статье объясняется что такое “мок”, зачем они нужны
Приведены множество примеров как использовать “моки”
Так приведено сравнение 2х библиотек для “моков”
mock
monkeypatch
#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/2FGCVPm7 code editing tips
#python #pycharm #pycon
Отличны доклад от Jetbrains
Андрей Власовских рассказал, как ускорить и упростить свою работу в PyCharm
Показал несколько полезных shortcut 👍
Я для себя открыл парочку новых 😁
link 👉https://youtu.be/FW3_OPBxk2s
#python #pycharm #pycon
Отличны доклад от Jetbrains
Андрей Власовских рассказал, как ускорить и упростить свою работу в PyCharm
Показал несколько полезных shortcut 👍
Я для себя открыл парочку новых 😁
link 👉https://youtu.be/FW3_OPBxk2s
Soft assert
#tests #pytest
Очень часто в тестах нужно сделать несколько проверок
Это конечно противоречит понятию “Один тест, одна проверка”
Но это в идеальном мире, а не в нашем 😁
example:
В такой реализации есть одна проблема
При срабатывании первого
И если там тоже есть проблемы, то мы о них узнаем когда пофиксят первую
Решением может быть реализация кастомных
example:
link 👉https://bit.ly/2MnM9kR
#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_checkexample:
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 есть “замечательные флаги” для запуска таких тестов:
-
-
example:
Но в таком случаее нужно все равно сидеть запускать тесты в ручную,
пока звезды не сойдуться и flaky test не упадет,
а можно написать свой тест генератор 😁
conftest.py
И будет Вам “счастье” 😇
link 👉 https://bit.ly/2S8POID
#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 20link 👉 https://bit.ly/2S8POID
Linting …
#python #lint
Холиварный рассказ про линтеры 😍
Зачем они нам нужны и как их применять на проекте
Лично мое мнение, линтер
Какие бывают линтеры:
- Pylint
- Flake8
- SonarQube
- MyPy
👉link: https://bit.ly/2EbFRkC
👉video: https://youtu.be/7IVCOzL41Lk
#python #lint
Холиварный рассказ про линтеры 😍
Зачем они нам нужны и как их применять на проекте
Лично мое мнение, линтер
must have на проекте, в разы упрошает код ревьюКакие бывают линтеры:
- Pylint
- Flake8
- SonarQube
- MyPy
👉link: https://bit.ly/2EbFRkC
👉video: https://youtu.be/7IVCOzL41Lk
Pytest + Selenium
#pytest #selenium
Небольшой туториал - pytest в связке с selenium
- Приведены примеры создания фикстур драверов
- Пример реализации кросбраузерного тестирования, с помошью одной фикстуры и 2х браузеров
- Также показано как создавать
Статья будет полезна для новичков или для тех кто только начал смотреть в строну pytest или selenium 👌
👉 link: https://bit.ly/2ExhLCr
#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
В статье описаны примеры
- Создание Generic-типов
- Объявление анотаций Callable
- Как помочь статическому анализатору с помощью Cast
- А так же как узнать об анотациях в интерпретаторе
👉link: https://bit.ly/2GYQpYf
👉link part 1: https://bit.ly/2C3yEmy