Что это
Assert, или Assertion, это оператор, который оценивает условие и утверждает, что оно истинно. В автоматизации тестирования такие утверждения («ассерты») используются для проверки того, что тестируемое приложение ведет себя так, как ожидается.
Жесткие и мягкие
Существует два типа утверждений: «жесткие» и «мягкие» (hard- и soft-ассерты).
- Hard assertions немедленно завершают тест, если условие не выполнено. Это полезно для верификации критически важных условий.
- Soft assertions не приводят к немедленному завершению теста при невыполнении условия. Вместо этого они регистрируют ошибку и продолжают выполнение теста. Что удобно для проверки некритических условий.
С течением времени в тестовых фреймворках и библиотеках появилась функциональность soft assertion, что облегчило тестировщикам внедрение этого удобнейшего подхода в практику автоматизации. Такие фреймворки, как TestNG, JUnit и различные библиотеки тестирования на JavaScript, имеют встроенную поддержку soft assertion. Playwright также предоставляет такую возможность.
Польза soft assertion в том, что они позволяют проверять несколько условий в одном тесте, не беспокоясь о его преждевременном завершении — что позволяет обнаружить трудно выявляемые ошибки, которые могут быть не обнаружены «жесткими ассертами».
Быстрый пример
Например, тестируется форма логина. Можно использовать hard assertion для проверки того, что и имя пользователя, и пароль заполнены. А можно использовать soft assertion для проверки того, что текст в поле username является реальным именем пользователя. Если поле имени пользователя пустое, hard assertion сработает и завершит выполнение, а soft assertion зарегистрирует баг и выполнение продолжится.
Итак, hard assertion немедленно вызывает исключение, останавливая выполнение теста. Следовательно, в тест-репорте будет зафиксировано только первое сообщение о сбое и больше ничего. Soft assertions не вызовет исключение сразу, а выполнит все шаги до того, как тест упадет. Поэтому в репорт будут включены все сообщения об ошибках.
Пример Soft Assertion в Playwright
В Playwright есть встроенные функции soft assertions, которые помечают тест как упавший, но не прерывают его выполнение. Комбинирование обоих видов assertions обеспечивает нужную гибкость, все результаты будут зафиксированы, и выполнение теста прекратится, когда будет нужно нам.
test('test', async ({ page }) => { await page.goto('<https://owasp.org/membership/>'); const emailAddress = page.locator('[aria-label="Email Address"]') expect.soft(await emailAddress.getAttribute('placeholder')).toBe('Member Address'); //Error: expect(received).toBe(expected) // Object.is equality await emailAddress.fill('email.testing@gmail.com'); const confirmEmailAddress = page.getByPlaceholder('Confirm Member Email Address') expect.soft(await confirmEmailAddress.getAttribute('placeholder')).toBe('Confirm Member Address'); //Error: expect(received).toBe(expected) // Object.is equality await confirmEmailAddress.fill('email.testing@gmail.com'); const companyName = page.getByPlaceholder('Company Name') expect.soft(await companyName.getAttribute('placeholder')).toBe('Company Name'); await companyName.fill('Testing Company'); const memberName = page.locator('[aria-label="Name"]') expect.soft(await memberName.getAttribute('placeholder')).toBe('Member Name'); await memberName.fill('New Member'); expect(test.info().errors).toHaveLength(0); //Error: expect(received).toHaveLength(expected) });