Из Embedded в Automation

В этой статье я поделюсь некоторыми мыслями и соображениями с людьми, которые увлекаются как программированием, так и тестированием, и которые, возможно, рассматривают аналогичный путь.

0
138
Из Embedded в Automation

«Я начинал карьеру в роли Embedded System Test Engineer. В то время я занимался тестированием программно-аппаратной интеграции и проверкой функциональности систем. Но по мере профессионального роста я начал искать другие карьерные пути, которые в большей степени соответствовали моей страсти к тестированию и написанию кода.

В середине своей карьеры я принял решение перейти на должность Software Development Engineer in Test (SDET). Переход дался мне нелегко – потребовалось освоить новые навыки, адаптироваться к новым рабочим процессам, и решать более сложные задачи.

В этой статье я поделюсь некоторыми мыслями и соображениями с людьми, которые увлекаются как программированием, так и тестированием, и которые, возможно, рассматривают аналогичный путь.

Переход от Embedded к Automation

Тестирование встраиваемых систем и автоматизация тестирования направлены на повышение качества продуктов. Они имеют схожие стратегии тестирования и требуют сотрудничества с кроссфункциональными командами. Однако они различаются наборами навыков, инструментами тестирования и тестовыми окружениями. Список сходств и различий в таблице:

Как я стал автоматизатором

Я начал свой путь в тестировании программного обеспечения с изучения основ с помощью сертификации ISTQB Certified Tester Foundation Level (CTFL). Она дала мне базовое понимание жизненного цикла разработки (SDLC), методов проектирования тестов, жизненного цикла дефектов, типов тестов и пирамиды тестов.

Независимо от того, ручное это или автоматизированное тестирование – понимание SDLC, Agile-методологии, веб-технологий и контейнеризации (например Docker и Kubernetes) имеет решающее значение. Четкое документирование планов тестирования, тест-кейсов, этапов тестирования, результатов тестирования и дефектов обеспечивает согласованность и информированность всей команды на протяжении всего процесса разработки. Если ваша компания работает в облаке, полезно получить практический опыт работы с такими платформами, как AWS или Azure.

Когда я перешел к автоматизированному тестированию, я быстро осознал важность кодирования. Python – отличная вещь для старта, но многие компании по-прежнему опираются на Java, JavaScript и TypeScript для автоматизации. Какой бы язык вы ни выбрали, инструменты контроля версий, такие как GitLab или GitHub, необходимы.

Компании выбирают фреймворки для тестирования в зависимости от своих потребностей. При выборе тестовых фреймворков и инструментов команда тестировщиков должна оценивать такие факторы, как предпочтительный язык команды, набор навыков команды, простота внедрения и отладки, функции отчетности, возможность настройки для различных окружений, роли пользователей, совместимость с браузерами и устройствами, возможность интеграции в пайплайн CI/CD, параллельное выполнение тестов и объем работы по обслуживанию. В таблице ниже я привожу различия между тестовыми фреймворками.

При разработке кода разработчики пишут юнит-тесты для проверки логики кода. Они могут использовать такие инструменты, как JUnit и PyTest, чтобы имитировать вводы и проверять, что выводы ведут себя так, как ожидается. Эти тесты выполняются быстро, изолированно, имея минимальные зависимости от других модулей.

Но юнит-тесты – это задача разработчиков; тестировщики же сосредоточены на проверке сквозных процессов и функциональности интегрированных систем с помощью тестирования пользовательского интерфейса, API и сквозного тестирования

Для тестирования пользовательского интерфейса такие фреймворки, как Cypress, Selenium, Playwright, Cucumber (с Selenium) и Robot (с Selenium), предназначены для автоматизации взаимодействия с браузером. Для тестирования API подойдут Postman, Karate, Rest Assured, опять же Cucumber (с Rest Assured), TestNG (с Rest Assured или Karate). Тестировщики также проводят тесты производительности с помощью таких инструментов, как JMeter и Locust, для измерения времени отклика, частоты ошибок, задержек, пропускной способности, пропускной способности одновременных пользователей и поведения системы под нагрузкой. Эти тесты основаны на правильной работе внешних интерфейсов, внутренних сервисов и баз данных.

Типичный порядок выполнения тестов показан на диаграмме ниже. Сначала выполняются юнит-тесты, поскольку они быстрые и помогают выявить функциональные проблемы на ранней стадии. Затем следуют интеграционные и API-тесты, которые проверяют логику и взаимодействие с другими сервисами. Далее следуют тесты пользовательского интерфейса, которые проверяют поведение пользователей. Многие QA-команды также выделяют подмножество регрессионных тестов и выполняют их в качестве дымовых тестов, чтобы быстро убедиться в корректности основных функциональных возможностей. Наконец, проводятся тесты производительности, чтобы оценить, соответствует ли система требованиям к производительности и масштабируемости.

Хотя во многих организациях есть специальные выделенные команды, занимающиеся вопросами безопасности и тестирования на проникновение, все же полезно иметь базовое представление о распространенных уязвимостях – особенно о TOP 10 от OWASP. Такие инструменты, как Burp Suite, также можно использовать для проверки и анализа API в ходе исследовательского тестирования.

После того как тест-кейсы автоматизированы, следующим шагом будет их бесшовная интеграция в конвейер CI/CD. Такая интеграция позволяет ускорить цикл релизов и сократить время выхода на рынок, обеспечивая непрерывную, эффективную и согласованный с современными практиками DevOps контроль качества.

Плюсы роли Automation

Мы разрабатываем тест-кейсы на основе требований, пишем сценарии автоматизации для проверки того, что фичи реализованы так, как ожидалось, и помогаем обнаружить ошибки на ранних этапах разработки. Интегрируя регрессионные автотесты в конвейер CI/CD, мы обеспечиваем непрерывное тестирование и проверку каждого изменения кода, что позволяет оптимизировать процесс релиза.

Что мне особенно нравится в этой роли – ее динамичный характер. Постоянно появляются новые инструменты, фреймворки и методы тестирования, поэтому всегда есть чему учиться. Самое главное, я ценю коллаборативный аспект работы: сотрудничество с разработчиками, дизайнерами, владельцами продуктов и другими тестировщиками.

Появление искусственного интеллекта привело к изменениям в автоматизации тестирования. Генеративный ИИ может использоваться для генерации тест-кейсов и тестовых данных, повышения качества тестового кода, уточнения описаний багов, разработки предложений по более чистой реализации кода и рефакторингу, диагностике проблем, исследовании и внедрении новых технологий тестирования. Эти задачи проиллюстрированы в следующих примерах:

  1. Генерация тест-кейсов и тестовых данных

Промпт: создай положительные и отрицательные тестовые данные для поля ввода, принимающего буквенно-цифровые и специальные символы, включая тестовые данные для CSS и SQL-инъекций.

  1. Повышение качества тестового кода

GenAI помогает улучшить качество тестового кода несколькими способами: удалением дублирующейся тестовой логики, заменой жестко закодированных ожиданий на динамические, извлечением многократно используемых функций из повторяющегося кода, а также выявлением опечаток и нарушений стандартов кодирования, соблюдением правил стиля и поощрением лучших практик.

Промпт: улучши качество кода, приведенного ниже.

page.click("#login-button")
time.sleep(5)
page.fill("#username", "testuser")
time.sleep(5)
page.fill("#password", "password123")
time.sleep(5)
page.click("#submit")

Предложения GenAI по его улучшению:

def login(page, username, password):
    page.click("#login-button")
    page.wait_for_selector("#username")
    page.fill("#username", username)
    page.fill("#password", password)
    page.click("#submit")

login(page, "testuser", "password123")
  1. Уточнение описаний багов (баг-тикетов)

GenAI структурирует описания багов в четком, стандартизированном формате, облегчая разработчикам понимание и решение проблем. Это помогает сократить количество опечаток и двусмысленностей, которые приводят к недопониманию.

Промпт: Уточни описание бага

  1. Предложи более чистую реализацию

Например, может потребоваться перехватить API и сымитировать ответы, чтобы проверить, что пользовательский интерфейс отображает правильные сообщения.

Промпт: Как использовать Playwright для перехвата API и имитации ответов для тестирования UI в различных сценариях?

from playwright.sync_api import sync_playwright

def test_ui_with_mocked_api_response():
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=False)
        context = browser.new_context()
        page = context.new_page()

        # Intercept and mock the API
        def mock_user_api(route, request):
            route.fulfill(
                status=200,
                content_type="application/json",
                body='{"name": "John Doe", "role": "Admin"}'
            )

        # Register the mock before loading the page
        page.route("**/api/user", mock_user_api)

        # Navigate to your application
        page.goto("https://your-app.com")

        # Now you can assert that the UI shows "John Doe" or role
        assert page.locator("#username").inner_text() == "John Doe"

        browser.close()
  1. Устранение ошибок

GenAI может помочь в диагностике сбоев, проанализировав логи консоли и сообщения об ошибках, чтобы выявить возможные первопричины и предложить решения.

Промпт: устрани ошибку:

  1. Новые технологии тестирования

Например, Playwright MCP (Model Context Protocol) – это сервер, который позволяет большим языковым моделям (LLM) и ИИ-агентам автоматизировать взаимодействие с браузером через Playwright. Он интегрируется с Claude Desktop, Cursor IDE и VS Code (через GitHub Copilot), позволяя генерировать тестовые сценарии из промтов на обычном языке. Благодаря использованию таких функций, как режим скриншота, режим просмотра и изоляция контекста с учетом модели, Playwright MCP помогает снизить нестабильность тестирования и ускорить его выполнение.»

Medium

Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии