QA Family by Alexey – Telegram
QA Family by Alexey
1.55K subscribers
99 photos
6 videos
219 links
Команда:
- Иванов Алексей 2ГИС @alexey_qa
- Иванова Ксения Wink

Этот канал из моего лично трансформируется в канал онлайн сообщества QA Family

👥 Делаем митап @moscowqa
🎙Подкаст family-qa.mave.digital
Download Telegram
Опубликовали мой доклад с осеннего гейзенбага
Я рассказывал про девтулзы и о том, как искать утечки памяти и проблемы с производительностью

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

И на осень в этом году (если все получится) поговорим про доступность и его тестирования, используя девтулзы

Оставлю тут промкод AlexeyIvanov дает скидку 25% на билеты «Для частных лиц»

https://www.youtube.com/watch?v=WroJikjigpg
Теги: #automation, #devtools, #performance, #rendering, #accessibility.
👎63👍16
На замену гермионе яндекс выпустил тестовый фреймворк Testplane
Основанный на wdio и mocha

🤔 Интересно там пофиксили баг со скриншотом айфрейма
Не знаю на сколько им пользуются, ссылку оставлю тут, вдруг кому интересно
https://github.com/gemini-testing/testplane
Теги: #testplane #wdio #mocha
Please open Telegram to view this post
VIEW IN TELEGRAM
👎60😁7👍4
Если у вас есть большой тест, и повторный запуск (retry) не имеет смысла, Сергей Гапанович предлагает отключать такие тесты для повторов. Используйте testInfo.retry, чтобы пропускать ненужные проверки:
test.describe("How testInfo works", async () => {  
test("check", async ({}, testInfo) => {
if (testInfo.retry) test.skip(true, "Повторы не поддерживаются");
expect(1).toBe(2);
});
});

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

Источник

Теги: #automation #cleanСode #playwright
👎49👍8
💻Как cделать тестирование кода более эффективным: принципы FIRST

В последнее время я все больше уделяю внимание юнит тестированию, что связано с моим наставничеством на Hexlet и выравнивание пирамиды на работе.

И немного решил освежить основы при написания юнит тестов:
1️⃣ Быстрота (Fast): Тесты должны выполняться очень быстро. Время выполнения, включая настройку, сам тест и завершение, должно составлять миллисекунды, так как в проекте может быть тысячи тестов.
2️⃣ Изоляция (Isolated/Independent): Каждый тест должен быть независим. Он должен следовать модели "подготовка, действие, проверка" (Arrange, Act, Assert) без зависимости от других тестов или внешнего окружения.
3️⃣Повторяемость (Repeatable): Тесты должны давать одинаковые результаты в любой среде и в любое время, независимо от внешних условий, таких как дата/время или случайные значения.
4️⃣ Самодостаточность (Self-Validating): Результаты теста должны быть ясны без внешних проверок — тест либо проходит, либо нет, без всякой необходимости в дополнительной интерпретации.
5️⃣Тщательность (Thorough/Timely): Тесты должны охватывать все возможные сценарии использования и граничные условия, не ограничиваясь простым стремлением к 100% покрытию кода. Важно тестировать различные объемы данных, безопасность, и корректную обработку исключений.

Теги: #unitTests #testing
Please open Telegram to view this post
VIEW IN TELEGRAM
👎54👍8
Давайте разберем конкретные примеры тестирования компонентов React для каждого из принципов FIRST ☝️

Источник: https://github.com/tekguard/Principles-of-Unit-Testing
Теги: #react #тестирование #FIRST
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👎59👍9
Рассказал о MemLab (спойлер: это инструмент для анализа и оптимизации потребления памяти вашими веб-приложениями) ➡️читать здесь.

Ранее уже писал о потреблении памяти веб-приложения:
🔵часть 1
🔵часть 2

👍 — если полезно, 👎 — ничего нового

Теги: #tools
Please open Telegram to view this post
VIEW IN TELEGRAM
👎64👍113
Так выглядит тест будущего, и это не bdd

test('Fill form', async ({ page }) => {
const aiArgs = { page, test };
await page.goto('/landings/open-account-and-invest/');
await ai(`Click the 'Открыть счет' button`, aiArgs);

await ai(`Wait until the form is fully loaded`, aiArgs);
await ai(`Fill the 'name' field with realistic data`, aiArgs);
await ai(`Fill the 'phone' field with the complete phone number '9195562010'`, aiArgs);
await ai(`Fill the 'email' field with realistic data`, aiArgs);
await ai(`Click the 'отправить' button`, aiArgs);

await ai(`Verify that a popup appears with the text 'Зарегистрироваться по номеру телефона'`, aiArgs);
});


ZeroStep — это инструмент, который улучшает тестирование с использованием Playwright, интегрируя искусственный интеллект, в частности, GPT-3.5 и GPT-4. Это позволяет сократить время на подготовку и исполнение тестов, а также уменьшить количество ошибок, связанных с изменениями в интерфейсе тестируемых приложений.

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

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

Хотя в настоящее время массовое использование таких инструментов, как ZeroStep, может быть ограничено из-за вопросов безопасности и недостаточного уровня доверия к автоматизации на основе ИИ, трудно предсказать, что будет через год. Технологии развиваются быстро, и возможности искусственного интеллекта в тестировании могут значительно расшириться, когда я начинал работать в далеком 2017 году я не мог представить о появлении ChatGPT, а сейчас это повседневный инструмент в работе.

Теги: #playwright #automation
👎61👍152
🤓 Всем привет!
Я решил более регулярно вести канал, и мне интересно, что вам интересно и в каком виде — поучаствуйте в опросе, а если что-то хочется добавить, напишите в комментариях👇
Please open Telegram to view this post
VIEW IN TELEGRAM
👎55🔥3
Как вам удобнее читать материал?
Anonymous Poll
71%
в сообщении
29%
карточками-картинками
👎52
Какой контент на моем канале для вас более полезный/интересный?
Anonymous Poll
77%
образовательный
71%
кейсы
27%
рассказы про конфы, доклады, митапы
👎62
🟢Что такое юнит тест? 🧩

🔎 Юнит тест — это тест, который проверяет правильность работы небольшого фрагмента кода (юнита).

🚩Особенности юнит тестов
1️⃣. Проверка небольших фрагментов кода.
2️⃣. Быстрая проверка.
3️⃣. Изоляция от остального кода.

🔍 Способы изоляции кода в юнит тестах
Тесты можно разделить на две школы по способу изоляции кода:
🔵Детройтская школа (классический подход)
🔵Лондонская школа

📘 Классический подход:
☑️Юнит тесты проверяют код с минимальной изоляцией.
☑️Интеграция с реальными зависимостями.

🎓 Лондонская школа:
☑️Сильная изоляция кода.
☑️Использование заглушек и моков для имитации зависимостей.


⚖️ Разница в подходах
🔵 Классический подход: Реальные зависимости, меньше моков.
🔵 Лондонская школа: Полная изоляция, много моков и заглушек.


💻 Примеры кода
Тестируемый код

// orderService.js
class OrderService {
constructor(paymentService) {
this.paymentService = paymentService;
}

placeOrder(order) {
if (this.paymentService.processPayment(order)) {
return 'Order placed';
} else {
return 'Payment failed';
}
}
}

// paymentService.js
class PaymentService {
processPayment(order) {
// Логика обработки платежа
return true; // Или false в случае ошибки
}
}


Классический подход 📘

test('placeOrder returns "Order placed" when payment is successful', () => {
const paymentService = new PaymentService();
const orderService = new OrderService(paymentService);
const order = { amount: 100 };

const result = orderService.placeOrder(order);

expect(result).toBe('Order placed');
});


Лондонская школа
🎓
test('placeOrder returns "Order placed" when payment is successful', () => {
const paymentService = { processPayment: jest.fn().mockReturnValue(true) };
const orderService = new OrderService(paymentService);
const order = { amount: 100 };

const result = orderService.placeOrder(order);

expect(result).toBe('Order placed');
expect(paymentService.processPayment).toHaveBeenCalledWith(order);
});


💡Вывод:
Выбор подхода зависит от конкретного проекта и предпочтений команды.

Теги: #unitTests #testing #cleanСode
Please open Telegram to view this post
VIEW IN TELEGRAM
👎63👍83
🤔А какой подход используете вы?
Anonymous Poll
74%
Классический подход 📘
31%
Лондонская школа 🎓
👎65