QA Engineer
PyTest
Предисловие
По историческому призванию я SQL-щик. Однако судьба занесла меня на BigData и после этого понесла кривая — я освоил и Java, и Python, и функциональное программирование (изучение Scala стоит в списке). Собственно на одном из кусков проекта встала необходимость тестирования кода на Python. Ребята из QA посоветовали для этих целей PyTest, но даже они затруднились толком ответить чем этот зверь хорош. К сожалению, в русскоязычном сегменте информации по данному вопросу не так уж и много: как это используют в Yandex да и все по-хорошему. При этом описанное в этой статье выглядит достаточно сложно для человека начинающего путешествие по этой стезе. Не говоря уже об официальной документации — она приобрела для меня смысл лишь после того, как я разобрался с самим модулем по другим источникам. Не спорю, там написаны интересные вещи, но, к сожалению, совсем не для старта.
Юнит-тестирование Python
Что это и для чего рассказывать смысла не вижу — Википедия все равно знает больше. По поводу существующих модулей для Python хорошо описано на Хабре.
Вводная по необходимым знаниям
На описываемый момент знания Python у меня были достаточно поверхностны — я писал кое-какие несложные модули и знал стандартные вещи. Но при столкновении с PyTest мне пришлось пополнять багаж знаний декораторами тут и тут и конструкцией yield.
Преимущества и недостатки PyTest
1) Независимость от API (no boilerplate). Как код выглядит в том же unittest:
import unittest
class TestUtilDate(unittest.TestCase):
def setUp(self):
#init_something()
pass
def tearDown(self):
#teardown_something()
pass
def test_upper(self):
self.assertEqual('foo'.upper(), 'FOO')
def test_isupper(self):
self.assertTrue('FOO'.isupper())
def test_failed_upper(self):
self.assertEqual('foo'.upper(), 'FOo')
if __name__ == '__main__':
suite = unittest.TestLoader().loadTestsFromTestCase(TestUtilDate)
unittest.TextTestRunner(verbosity=2).run(suite)
То же самое в PyTest:
import pytest
def setup_module(module):
#init_something()
pass
def teardown_module(module):
#teardown_something()
pass
def test_upper():
assert 'foo'.upper() == 'FOO'
def test_isupper():
assert 'FOO'.isupper()
def test_failed_upper():
assert 'foo'.upper() == 'FOo'
2) Подробный отчет. В том числе выгрузка в JUnitXML (для интеграции с Jenkins). Сам вид отчета может изменяться (включая цвета) дополнительными модулями (о них будет позднее отдельно). Ну и вообще цветной отчет в консоли выглядит удобнее — красные FAILED видны сразу.
3) Удобный assert (стандартный из Python). Не приходится держать в голове всю кучу различных assert'ов.
4) Динамические фикстуры всех уровней, которые могут вызываться как автоматически, так и для конкретных тестов.
5) Дополнительные возможности фикстур (возвращаемое значение, финализаторы, область видимости, объект request, автоиспользование, вложенные фикстуры)
6) Параметризация тестов, то есть запуск одного и того же теста с разными наборами параметров. Вообще это относится к пункту 5 «Дополнительные возможности фикстур», но возможность настолько хороша, что достойна отдельного пункта.
7) Метки (marks), позволяющие пропустить любой тест, пометить тест, как падающий (и это его ожидаемое поведение, что полезно при разработке) или просто именовать набор тестов, чтобы можно было запускать только его по имени.
8) Плагины. Данный модуль имеет достаточно большой список дополнительных модулей, которые можно установить отдельно.
9) Возможность запуска тестов написанных на unittest и nose, то есть полная обратная совместимость с ними.
Про недостатки, пусть их и не много, могу сказать следующее:
1) Отсутствие дополнительного уровня вложенности: Для модулей, классов, методов, функций в тестах есть соответствующий уровень. Но логика требует наличие дополнительного уровня testcase, когда та же одна функция может иметь несколько testcase'ов (например, проверка возращаемых значений и ошибок). Это частично компенсируется дополнительным модулем (плагином) pytest-describe, но там встает проблема отсутствия соответствующего уровня фикстуры (scope = “describe”). С этим конечно можно жить, но в некоторых ситуациях может нарушать главный принцип PyTest — «все для простоты и удобства».
2) Необходимость отдельной установки модуля, в том числе в продакшене. Все-таки unittest и doctest входят в базовый инструментарий Python и не требуют дополнительных телодвижений.
3) Для использования PyTest требуется немного больше знаний Python, чем для того же unittest (см. «Вводная по необходимым знаниям»).
Подробное описание модуля и его возможностей под катом.
Пирамида тестов на практике
«Пирамида тестов» — метафора, которая означает группировку тестов программного обеспечения по разным уровням детализации. Она также даёт представление, сколько тестов должно быть в каждой из этих групп. Несмотря на то, что концепция тестовой пирамиды существует довольно давно, многие команды разработчиков по-прежнему пытаются неправильно реализовать её на практике должным образом. В этой статье рассматривается первоначальная концепция тестовой пирамиды и показано, как её воплотить в жизнь. Она показывает, какие виды тестов следует искать на разных уровнях пирамиды, и даёт практические примеры, как их можно реализовать.
- Важность автоматизации (тестов)
- Пирамида тестов
- Какие инструменты и библиотеки мы рассмотрим
- Пример приложения
- Юнит-тесты
- Интеграционные тесты
- Контрактные тесты
- Тесты UI
- Сквозные тесты
- Приёмочные тесты — ваши фичи правильно работают?
- Исследовательское тестирование
- Путаница с терминологией в тестировании
- Внедрение тестов в конвейер развёртывания
- Избегайте дублирования тестов
- Пишите чистый код для тестов
- Заключение
Примечания
Удаленное тестирование. Советы бывалого фрилансера
Всем привет, меня зовут Алексей Петров. Я работаю в Mail.Ru Group директором по качеству в бизнес-юните «Почта и Портал». Сегодня я расскажу о такой интересной и привлекательной во всех отношениях деятельности, как фриланс в тестировании. Как таковым тестированием я начал заниматься в 2005 году. Я любил играть в компьютерные игры и параллельно их тестировал. Я был фанатом «Tony Hawk — American Wasteland», и когда игра попала ко мне за 1,5 месяца до официального мирового релиза, и я мог ее пройти, я был счастлив. После пятидесятого прохождения, когда мне дали диск с релизом, я его сжег, честно. Настолько мне это осточертело! Я до сих пор могу сказать, в какой миссии и какой квест нужно выполнить, все хинты и так далее.
Как не платить за Java хостинг или быстрый старт с Google App Engine
Все мы хоть когда-нибудь писали приложения, облегчающие жизнь. Не на заказ, а просто для себя. Записные книжки, программки учета финансов, набор карточек для изучения иностранного языка — да мало ли в жизни хороших идей? И вот было бы здорово, иметь доступ к этой программке не только со своего компьютера, но и с рабочего! А то и поделиться с друзьями своей замечательной программкой!
Все отлично, если вы, скажем, PHP программист — дешевых и даже бесплатных хостингов море.
А что если вы программист Java? Готовые Tomcat хостинги недешевы, а если у вас еще и несколько таких программок, то желание поделиться ими с друзьями выльется в копеечку.
Что же делать?
Google нам поможет...
(Законы Акина) законы космической инженерии
2. Создание правильной ракеты занимает бесконечное количество времени. Поэтому следует создавать ракеты, в которых что-то неправильно.
Чеклист по UX из 30 пунктов для мобильных приложений
Эта статья — напминалка о том, что нужно перепроверить в дизайне вашего приложения, прежде чем отсылать его на AppStore/GooglePlay. Список поделен на тематические блоки:
- Вход / Регистрация
- Первый опыт
- Ежедневные взаимодействия
- Уведомления
- Параметры аккаунта
- Лента
- Поиск
- AppStore/GooglePlay
Введение в Git
Оглавление
Предисловие
1. Настройка git
....1.1 Конфигурационные файлы
....1.2 Настройки по умолчанию
....1.3 Псевдонимы (aliases)
2. Основы git
....2.1 Создание репозитория
....2.2 Состояние файлов
....2.3 Работа с индексом
....2.4 Работа с коммитами
....2.5 Просмотр истории
....2.6 Работа с удалённым репозиторием
3. Ветвление в git
....3.1 Базовые операций
....3.2 Слияние веток
....3.3 Rerere
4. Указатели в git
....4.1 Перемещение указателей
5. Рекомендуемая литература
Предисловие
Git — самая популярная распределённая система контроля версиями.[1][2]
Основное предназначение Git – это сохранение снимков последовательно улучшающихся состояний вашего проекта (Pro git, 2019).
Как найти работу с релокацией в Европу: практический гайд для IT-специалистов
В этой статье я решил собрать наиболее популярные сайты/ресурсы, на которых реально найти вакансии с переездом в страны Европы.
Telegram-каналы
Джоб-борды для IT-специалистов и нишевые сайты
AngelList
На сегодняшний день AngelList является одним из наиболее популярных сайтов по поиску работы в стартапах по всему миру. Процесс поиска вакансий с релокацией на этом сайте очень прост – во вкладке «Compensation» выбираем опцию «Company Will Sponsor Visa». Чтобы сузить полученный список вакансий до максимально релевантных, можно использовать фильтры «Role» и «Location».
Glassdoor
Многие из вас, наверное, хотя бы раз сталкивались с сайтом Glassdoor. Прежде всего, Glassdoor известен как ресурс, на котором можно почитать отзывы инсайдеров о том или ином работодателе, а также о процессе собеседования и заработных платах в интересующей компании. Помимо этого, на сайте есть огромное количество вакансий в разных странах мира, и не только для IT-специалистов.
Чтобы найти вакансии, которые предлагают релокейт, пишем в поисковой строке relocation developer или relocation и название интересной вам позиции. Чтобы сузить результаты поиска, уточняем город/страну, куда хотели бы переехать.
Поскольку на сайте Glassdoor нет специального фильтра для поиска работы с переездом, при поиске вакансий описанным выше методом могут попадаться нерелевантные. В целом же, ключевое слово relocation в поисковой строке делает свое дело.
Как я стал программистом. Путь от питерского бездомного до Senior Developer-а за 6 лет
В этом году исполняется 6 лет с того дня, как я «пришел» в программирование. К слову, случилось это стихийно, и на момент написания своего первого кода, у меня за плечами не было ни профильного образования, ни малейшего опыта. Сегодня же, я создаю продукт, признанный и уважаемый во всем мире.
Сегодня я хочу рассказать свою историю.
Итак, начну с момента, когда мне исполнился 21 год, я уволился из рядов доблестной российской армии и оказался на серых и холодных улицах Санкт-Петербурга. Осень, отсутствие жилья и денег активировали все клетки головного мозга для ответа на вопрос: «Что делать?».
Автоматизация Для Самых Маленьких. Часть 1.1. Основы виртуализации
Роман Горге вдохновился ею и решил написать обзорный выпуск о виртуализации вообще.
В данной статье мы затронем (или попытаемся затронуть) вопросы: а как собственно происходит виртуализация сетевых функций, как реализован backend основных продуктов, обеспечивающих запуск и управление VM, а также как работает виртуальный свитчинг (OVS и Linux bridge).
Тема виртуализации широка и глубока, объяснить все детали работы гипервизора невозможно (да и не нужно). Мы ограничимся минимальным набором знаний необходимым для понимания работы любого виртуализированного решения, не обязательно Telco.
Содержание
- Введение и краткая история виртуализации
- Типы виртуальных ресурсов — compute, storage, network
- Виртуальная коммутация
- Инструменты виртуализации — libvirt, virsh и прочее
- Заключение
Рендеринг 3D графики с помощью OpenGL
Введение
Рендеринг 3D графики — непростое занятие, но крайне интересное и захватывающее. Эта статья для тех, кто только начинает знакомство с OpenGL или для тех кому интересно, как работают графические конвейеры, и что они из себя представляют. В этой статье не будет точных инструкций, как создать OpenGL контекст и окно или как написать своё первое оконное приложение на OpenGL. Связанно это с особенностями каждого языка программирования и выбором библиотеки или фреймворка для работы с OpenGL (Я буду использовать C++ и GLFW) тем более в сети легко найти туториал под интересующий вас язык. Все примеры, приведённые в статье, будут работать и на других языках с немного изменённой семантикой команд, почему это так, расскажу чуть позже.
О сетевой модели в играх для начинающих
Последние две недели я работал над сетевым движком для своей игры. До этого я вообще ничего не знал о сетевых технологиях в играх, поэтому прочитал множество статей и провёл множество экспериментов, чтобы уяснить все концепции и иметь возможность написать собственный сетевой движок.
В этом руководстве я хотел бы поделиться с вами различными концепциями, которые вам нужно изучить перед написанием собственного игрового движка, а также самыми лучшими ресурсами и статьями для их изучения.
В целом существует два основных типа сетевых архитектур: peer-to-peer и клиент-серверная. В архитектуре peer-to-peer (p2p) данные передаются между любыми парами подключенных игроков, а в клиент-серверной архитектуре данные передаются только между игроками и сервером.
Хотя архитектура peer-to-peer по-прежнему используется в некоторых играх, стандартом является клиент-серверная: она проще в реализации, требует канал меньшей ширины и облегчает защиту от читерства. Поэтому в этом руководстве мы сосредоточимся на клиент-серверной архитектуре.
Обратное собеседование: какие вопросы задавать компании?
Этот текст — перевод репозитория viraptor. Вы можете предложить свои вопросы на английском, в оригинальном репозитории, или на русском — в моём форке, а я постараюсь перевести их и передать автору
Обратное собеседование
Это список вопросов, который может быть интересен соискателю должности технического специалиста. Пункты не упорядочены и могут быть неприменимы к конкретной должности или виду работы. Вначале это был просто список вопросов, но со временем он стал включать ещё и те вещи, которых хотелось бы видеть больше, и «красные флажки», то есть вещи, которых хочется избегать. Ещё я обратил внимание, что многие люди, которых я собеседовал, не задавали эти вопросы, и, я думаю, это были упущенные возможности.
Если вы задавали вопросы, которых нет в этом списке, отправьте пожалуйста пулл-реквест!
Заменит ли автоматизация ручное тестирование?
Решил написать свое мнение касательно того, заменит ли автоматизация тестирования, собственно, тестировщиков. Прежде всего потому, что довольно часто слышу подобное мнение среди Junior QA, кто только делает свои первые шаги в тестировании и уже боится, что чего-то не успел.
Справедливости ради, подобное мнение бытует и среди ребят постарше. Довольно часто считается, что автоматизация — чуть ли не единственный путь развития ручного тестировщика. Обо всем этом и многом другом под катом.
Книга «Kali Linux. Тестирование на проникновение и безопасность»
Sampler. Консольная утилита для визуализации результата любых shell команд
В общем случае с помощью shell команды можно получить любую метрику, без написания кода и интеграций. А значит в консоли должен быть простой и удобный инструмент для визуализации.
Наблюдение за изменением состояния в базе данных, мониторинг размера очередей, телеметрия с удаленных серверов, запуск деплой скриптов и получение нотификации по завершению — конфигурируется за минуту простым YAML файлом.
Код доступен на гитхабе. Инструкции по установке — для Linux, macOS и (экспериментально) Windows.
Аки Феникс
Я выгорел. Давно. Еще толком не начав работать, где-то через год после института, я уже ненавидел всё, что меня окружает в этом чертовом офисе. Я приходил на работу, чтобы ненавидеть. Меня терпели, потому что за первый год я показал впечатляющий рост. Со мной возились, как с младенцем. Меня пытались замотивировать, понять, раззадорить, научить, направить. А я всё больше ненавидел.
Не работайте в плохих проектах
Частенько в дискуссиях на тему работы я встречаю тезисы о том, как плохо работать в том или ином проекте/компании/отрасли и т.д. И несмотря на то, что в отечественном IT в целом очень распространено нытье, многое из обсуждаемого действительно имеет место в реальности. Однако, спустя годы разработки, смены проектов, компаний и даже стека технологий, у меня выработалось понимание проблемы и ее решения с другого ракурса. Об этом и поговорим.
Game Dev Sim: настольная игра про разработку игр
Информация
- В рейтинге
- Не участвует
- Откуда
- Warszawa, Mazowieckie, Польша
- Дата рождения
- Зарегистрирован
- Активность