Ответ
Для позиции middle/senior QA Automation Engineer обычно достаточно 3-5 лет коммерческого опыта работы с Python в тестировании. Этот опыт должен включать:
- Автоматизацию разных уровней: Unit, API, E2E.
- Работу с ключевыми инструментами:
pytestилиunittestкак основа.requests/aiohttpдля API-тестов.Selenium WebDriver,PlaywrightилиSeleniumBaseдля UI-автоматизации.Allureилиpytest-htmlдля отчетов.
- Понимание паттернов: Page Object/Page Component, использование фикстур (
@pytest.fixture) и параметризации (@pytest.mark.parametrize).
Пример параметризованного UI-теста с Playwright:
import pytest
from playwright.sync_api import Page, expect
@pytest.mark.parametrize("username, password", [
("standard_user", "secret_sauce"),
("problem_user", "secret_sauce"),
])
def test_successful_login(page: Page, username, password):
page.goto("https://www.saucedemo.com/")
page.locator("[data-test='username']").fill(username)
page.locator("[data-test='password']").fill(password)
page.locator("[data-test='login-button']").click()
expect(page.locator(".inventory_list")).to_be_visible()
Опыт подтверждается реальными проектами, сложностью реализованных автотестов (интеграция с CI/CD, работа с Docker, тестирование микросервисов) и, желательно, контрибуциями в open-source.
Ответ 18+ 🔞
Слушай, а вот этот ваш «миддл-сеньор» — это вообще что за зверь такой, а? Ну, по факту, если ты не совсем распиздяй, то лет за 3-5 ты уже должен понимать, что к чему. Не просто «я умею писать скрипты», а чтобы уже мозги на место встали, понимаешь?
Опыт-то, он, блядь, должен быть коммерческий, а не «дома на компе пет-проектик». И в этом опыте должно быть всё: от этих ваших юнит-тестов, которые как мелкие пакостники, до жирных E2E-сценариев, которые, если сломаются, могут всю команду на уши поднять, ёпта.
Инструменты? Да хуй с ними, с названиями. Главное — чтоб ты в них, как рыба в воде, а не как мартышка с гранатой. pytest — это святое, без него вообще нихуя. API тесты на requests — это как азбука, блядь. А если ты ещё и в UI автоматизации не просто кнопки кликаешь, а понимаешь, как там под капотом всё ебётся — с Selenium или Playwright — вот это уже дело.
И паттерны эти… Ну, Page Object, например. Это ж не просто чтобы умным выглядеть, а чтобы потом, когда проект раздуется, не пришлось всё переписывать, потому что ты насрал кодом в одном месте. Фикстуры, параметризация — это чтобы не быть обезьяной-копипастером, а делать работу умно.
Вот, смотри, примерчик, как нормальный человек тест пишет. Не просто так, а с параметризацией, чтобы одним махом несколько кейсов проверить. Код не трогаю, он и так хорош.
import pytest
from playwright.sync_api import Page, expect
@pytest.mark.parametrize("username, password", [
("standard_user", "secret_sauce"),
("problem_user", "secret_sauce"),
])
def test_successful_login(page: Page, username, password):
page.goto("https://www.saucedemo.com/")
page.locator("[data-test='username']").fill(username)
page.locator("[data-test='password']").fill(password)
page.locator("[data-test='login-button']").click()
expect(page.locator(".inventory_list")).to_be_visible()
Но это, блядь, цветочки. Опыт-то настоящий виден по другому. Когда ты не просто тесты гоняешь, а встроил это всё в CI/CD, чтобы оно само бегало и ругалось. Когда с Docker'ом танцевал, чтобы окружение не плакало. Когда микросервисы тестировал, а там один запрос — и полсистемы встали, пиздец. Или, там, в open-source что-то закоммитил — не просто баг нашел, а фикс предложил. Вот тогда да, тогда можно разговаривать. А так — просто ещё один чувак с ноутбуком, блядь.