Генерация тестовых данных — распространенная проблема в проектах разработки программного обеспечения. Тестовые данные нужны для разных целей:

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

Создание тестовых данных может быть достигнуто многими способами:

  • ручной ввод — у вас есть кто-то, кто будет создавать тестовые данные в вашей системе, щелкая мышью в приложении и создавая элементы вручную. Не идеально, но работает для меньшего объема данных.
  • ваша система имеет REST API для создания данных. Вы можете использовать такие инструменты, как postman, для вызова вашего REST API. НО: Иногда системы или определенные части не имеют API — также в 2018 году.
  • вы напрямую создаете данные в серверной базе данных. Иногда у вас нет доступа к базе данных, а также иногда не стоит создавать данные в сложной схеме базы данных, где вам нужно создавать данные в нескольких таблицах в правильном порядке…

Автоматизируйте с помощью браузера

Как насчет идеи позволить браузеру делать всю работу? Относительно новым проектом для управления экземпляром браузера хром/хром является Puppeteer.

Библиотека разработана разработчиками Google Chrome. Puppeteer состоит из javascript API, который можно использовать в проектах на основе узлов.



Здесь мы начнем разрабатывать небольшой пример, который создает тестовые данные в бэкэнде Jive. Jive — это социальная бизнес-платформа, которая предоставляет пользователям возможность создавать сообщения в блогах, документы и обсуждения.

Настройте генератор тестовых сценариев

Рекомендуется настраивать параметры в качестве входных данных, чтобы вы могли повторно использовать генератор тестовых данных в определенных средах с другими URL-адресами и параметрами входа.

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

JIVE_PLACEID=2000 node testdata.js

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

let host = process.env.JIVE_URL || 'http://localhost:8080/sbc';
let placeId = process.env.JIVE_PLACEID || '2004';
let number = process.env.JIVE_NUMBER || 300;
let user = process.env.JIVE_USER || 'admin';
let password = process.env.JIVE_PASSWORD || 'admin';

Следующим шагом в сценарии является получение доступа к API puppeteer с помощью require, который использует базовую систему модулей javascript.

Библиотека lorem-ipsum используется для генерации тестовых данных для описания и заголовков.

console.log("Start to create " + number + " sample documents in place " + placeId + " on jive system with url " + host+ " and user "+user);

const puppeteer = require('puppeteer');
var loremIpsum = require('lorem-ipsum');

console.log("Launch puppeteer");

Войти в Джайв

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

Итак, мы хотим запустить безголовый браузер Chrome, загрузить страницу входа и ввести необходимые данные (имя пользователя и пароль) в диалоговое окно входа.

Вводим пользователя и пароль в поле ввода диалога входа с помощью puppeteers api.

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

async () => {
    const browser = await puppeteer.launch({headless: true});
    console.log("Launched headless chrome");

    const page = await browser.newPage();
    await page.goto(host + '/login.jspa');

    await page.type('input[name=username]', user);
    await page.type('input[name=password]', password);
    await Promise.all([
        await page.click('input[type="submit"]'),
        page.waitForNavigation({waitUntil: 'networkidle0'})
    ]);

    console.log("Login to development system successfull");

Заполнение html-форм

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

  • перейти на определенную страницу с параметрами http
await page.goto(host + '/create-item!input.jspa?containerType=14&containerID=' + placeId);
  • сгенерируйте заголовок с помощью генератора loremIpsum и введите значение в поле заголовка html
let title = loremIpsum({units: 'words', 
count: Math.floor((Math.random() * 20) + 1)});
await page.type('#title', title);
  • Создайте случайную цену и введите ее в поле цены.
await page.type('#price', 
Math.floor((Math.random() * 100) + 1).toString()); 

Теперь форма заполнена правильно, и теперь мы хотим создать контент в Jive. Jive предоставляет кнопку с CSS-классом j-btn-callout для отправки HTTP POST на серверную часть.

await page.click('.j-btn-callout');
console.log("Created content " + i + "/" + contentNumber);

Скрипт запускается и создает количество элементов в приложении.

Резюме

Этот пост должен показать другую возможность генерации тестовых данных. Puppeteer предоставляет хороший и мощный API, который легко освоить. Это позволяет очень легко генерировать тестовые данные…