Генерация тестовых данных — распространенная проблема в проектах разработки программного обеспечения. Тестовые данные нужны для разных целей:
- вы хотите предоставить тестовую систему для пользователей, которые должны работать с системой, и всегда полезно иметь данные уже в системе
- вы хотите провести тесты вашей системы в реальных условиях с большим количеством наборов данных, чтобы проверить производительность и поведение системы
Создание тестовых данных может быть достигнуто многими способами:
- ручной ввод — у вас есть кто-то, кто будет создавать тестовые данные в вашей системе, щелкая мышью в приложении и создавая элементы вручную. Не идеально, но работает для меньшего объема данных.
- ваша система имеет 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, который легко освоить. Это позволяет очень легко генерировать тестовые данные…