Одной из важных задач в автоматизированном тестировании веб-приложений является проверка функционала, связанного с отправкой и обработкой SMS-сообщений, а также верификацией через SMS коды. В большинстве современных приложений используется двухфакторная аутентификация (2FA), при которой пользователи получают одноразовый код в SMS для подтверждения своей личности. Важно, чтобы этот процесс корректно работал на всех этапах тестирования. WebdriverIO предоставляет удобные возможности для взаимодействия с таким функционалом.
Тестирование SMS-услуг в реальных условиях может быть сложной задачей. Для этого обычно требуется интеграция с внешними сервисами отправки SMS или виртуальными номерами. Однако стандартные инструменты, такие как WebdriverIO, не включают в себя прямую работу с SMS-сообщениями, поэтому необходимо использовать сторонние решения для симуляции или интеграции с такими сервисами.
Использование сторонних API для получения SMS Для автоматизации процесса получения SMS кодов часто применяются внешние API, которые предоставляют виртуальные номера телефонов. Такие сервисы, как Twilio, Nexmo, и другие, предлагают удобные интерфейсы для получения сообщений. В тестах можно подключить эти сервисы для автоматического извлечения кодов.
Интеграция с почтовыми сервисами В некоторых случаях сервисы могут отправлять SMS-коды на адрес электронной почты. В таких случаях можно интегрировать тесты с почтовыми API для извлечения кода из сообщения. Это упрощает процесс, поскольку не требуется взаимодействие с мобильными операторами.
Использование моков и симуляций Для некоторых приложений может быть достаточно симулировать процесс получения SMS-сообщений с помощью мок-сервисов. Это подход, при котором отправка SMS и получение кода эмулируются внутри теста, что позволяет избежать внешних зависимостей и ускоряет процесс тестирования.
WebdriverIO позволяет интегрировать тесты с любыми внешними сервисами через создание пользовательских команд и использование API. Рассмотрим, как можно реализовать получение SMS кода при помощи интеграции с сервисом Twilio.
Установка Twilio SDK
Первым шагом необходимо установить Twilio SDK для взаимодействия с API. Для этого выполняем команду:
npm install twilioСоздание API клиента
Далее создаём клиент для работы с Twilio в тестах:
const twilio = require('twilio');
const client = twilio('accountSid', 'authToken');
Важно заменить accountSid и authToken на
реальные значения, полученные при регистрации в Twilio.
Получение SMS сообщения
Теперь можно написать функцию для получения последнего SMS-кода:
async function getSmsCodeFromTwilio(phoneNumber) {
const messages = await client.messages.list({to: phoneNumber, limit: 1});
if (messages.length > 0) {
return messages[0].body.match(/\d{6}/)[0]; // Извлекаем 6-значный код
}
return null;
}Использование в тестах WebdriverIO
Теперь можно интегрировать это в тест с WebdriverIO. Предположим, что при регистрации или входе в приложение на определённый номер телефона отправляется SMS с кодом. После того как страница ввела номер телефона, нужно получить код и ввести его в поле:
describe('Регистрация через SMS', () => {
it('должен ввести код из SMS', async () => {
await browser.url('https://example.com/register');
// Вводим номер телефона
const phoneNumber = '+1234567890';
await $('#phoneNumberInput').setValue(phoneNumber);
await $('#submitButton').click();
// Получаем SMS код
const code = await getSmsCodeFromTwilio(phoneNumber);
assert(code, 'Не удалось получить код');
// Вводим код в поле
await $('#smsCodeInput').setValue(code);
await $('#verifyButton').click();
// Проверяем, что регистрация прошла успешно
await expect($('#successMessage')).toBeDisplayed();
});
});В данном примере WebdriverIO взаимодействует с внешним сервисом для получения кода и выполняет действия на веб-странице, обеспечивая автоматизацию тестирования двухфакторной аутентификации.
Для ускорения тестирования можно использовать моки. Это позволяет эмулировать получение SMS без реальной отправки сообщений. Один из популярных инструментов для мокинга – это nock. С его помощью можно замокировать HTTP-запросы, имитируя ответы API.
Установка nock
Для начала устанавливаем библиотеку:
npm install nockМокирование API вызова
В тестах можно замокировать API, которое бы возвращало код, как если бы это был реальный запрос к сервису получения SMS:
const nock = require('nock');
nock('https://api.twilio.com')
.get('/2010-04-01/Accounts/accountSid/Messages.json')
.query({to: '+1234567890'})
.reply(200, {
messages: [
{body: 'Your verification code is 123456'}
]
});
После этого можно продолжать тестирование, уверенные, что получим нужный код.
Применение в тесте WebdriverIO
Моки также интегрируются с тестами WebdriverIO точно так же, как и реальный вызов API:
describe('Регистрация через SMS с мокированием', () => {
it('должен ввести код из мокированного SMS', async () => {
await browser.url('https://example.com/register');
// Вводим номер телефона
const phoneNumber = '+1234567890';
await $('#phoneNumberInput').setValue(phoneNumber);
await $('#submitButton').click();
// Мокируем получение кода
const code = '123456';
// Вводим код в поле
await $('#smsCodeInput').setValue(code);
await $('#verifyButton').click();
// Проверяем, что регистрация прошла успешно
await expect($('#successMessage')).toBeDisplayed();
});
});Мокирование позволяет тестировать логику ввода кодов без необходимости настраивать реальную интеграцию с внешними сервисами, что ускоряет процесс разработки и тестирования.
Интеграция с SMS-сервисами и работа с кодами, отправляемыми через SMS, является важной частью функционального тестирования веб-приложений. Используя WebdriverIO, можно эффективно автоматизировать этот процесс, интегрируя внешние сервисы или применяя мокирование. Важно помнить, что для эффективного тестирования такого функционала необходимо тщательно выбирать подходящие инструменты и подходы для обеспечения надежности и воспроизводимости тестов.