Monkey testing — это техника тестирования, при которой автоматизированные или случайные действия имитируют поведение пользователя для выявления нестандартных и неожиданных ошибок в веб-приложении. В контексте Protractor и JavaScript это позволяет проверять устойчивость Angular-приложений к нестандартным вводам, быстрому взаимодействию и неожиданным сценариям использования.
1. Случайные действия: Monkey testing основан на генерации случайных последовательностей действий: кликов, вводов текста, прокрутки страниц и навигации. Основная цель — выявить ошибки, которые не очевидны при стандартных сценариях.
2. Автоматизация: В Protractor автоматизация
выполняется через написание скриптов, которые имитируют случайные
действия пользователя. Используются функции element,
by, browser.actions() и вспомогательные
генераторы случайных данных.
3. Цель тестирования:
Для реализации Monkey testing необходимо создавать генераторы случайных значений и действий.
Пример генерации случайного клика:
function getRandomElement(selector) {
return element.all(selector).then(elements => {
const index = Math.floor(Math.random() * elements.length);
return elements[index];
});
}
async function randomClick(selector) {
const elem = await getRandomElement(selector);
await elem.click();
}
Здесь getRandomElement выбирает случайный элемент из
множества, соответствующих селектору, а randomClick
выполняет по нему клик.
Пример случайного ввода текста:
function randomString(length) {
const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
let result = '';
for (let i = 0; i < length; i++) {
result += chars.charAt(Math.floor(Math.random() * chars.length));
}
return result;
}
async function randomInput(selector, length = 10) {
const input = element(by.css(selector));
await input.clear();
await input.sendKeys(randomString(length));
}
Такой подход позволяет тестировать формы на устойчивость к неожиданным и некорректным данным.
Angular-приложения используют асинхронные операции, поэтому важно корректно обрабатывать ожидания:
await browser.wait(ExpectedConditions.visibilityOf(element(by.css('.some-element'))), 5000);
При случайных действиях нужно учитывать, что элементы могут не успевать появляться, поэтому все операции следует оборачивать в ожидания.
Monkey testing легко интегрируется в существующие Protractor-тесты:
describe('Monkey Testing', () => {
it('выполняет случайные действия', async () => {
await browser.get('https://example.com');
for (let i = 0; i < 50; i++) {
const action = Math.random();
if (action < 0.5) {
await randomClick('button, a');
} else {
await randomInput('input[type="text"]');
}
}
});
});
Цикл позволяет многократно выполнять случайные действия, увеличивая вероятность выявления нестандартных ошибок.
Для эффективного анализа необходимо сохранять все действия и возникшие ошибки:
try {
await randomClick('button');
} catch (error) {
console.error('Ошибка при случайном клике:', error.message);
}
Логирование обеспечивает понимание того, какие действия вызвали сбой и на каком этапе.
Monkey testing в Protractor — мощный инструмент для выявления неожиданных ошибок и повышения устойчивости веб-приложений, особенно в динамичных Angular-проектах.