Краткое пошаговое руководство по использованию данных из электронных таблиц Excel или файлов CSV для динамического создания нескольких тестов Cypress.
В нашем примере мы собираемся использовать таблицу с двумя столбцами без имени пользователя и пароля, но на самом деле это могут быть любые данные. У нас есть следующая таблица в формате csv
& xlsx
.
имя пользователя | пароль
User1 | Password1
User2 | Password2
User3 | Password3
User4 | Password4
User5 | Password5
User6 | Password6
User7 | Password7
User8 | Password8
User9 | Password9
User10 | Password10
И мы можем авторизоваться на следующей странице
Сначала нам нужно преобразовать наш файл XLSX в JSON с помощью https://github.com/SheetJS/js-xlsx.
import { writeFileSync } from "fs"; import * as XLSX from "xlsx";
try { const workBook = XLSX.readFile("./testData/testData.xlsx"); const jsonData = XLSX.utils.sheet_to_json(workBook.Sheets.testData); writeFileSync( "./cypress/fixtures/testData.json", JSON.stringify(jsonData, null, 4), "utf-8" ); } catch (e) { throw Error(e); }
или файл CSV в JSON с https://www.papaparse.com/
import { readFileSync, writeFileSync } from "fs";
import { parse } from "papaparse";
try {
const csvFile = readFileSync("./testData/testData.csv", "utf8");
const csvResults = parse(csvFile, {
header: true,
complete: csvData => csvData.data
}).data;
writeFileSync(
"./cypress/fixtures/testDataFromCSV.json",
JSON.stringify(csvResults, null, 4),
"utf-8"
);
} catch (e) {
throw Error(e);
}
В нашем тестовом файле кипариса мы собираемся
- Импортируйте наш сгенерированный файл JSON в
testData
- Переберите каждый
testDataRow
внутри блокаdescribe
и установите объектdata
с нашим именем пользователя и паролем. - Настройте мокко
context
с динамически генерируемым заголовком, уникальным для каждой строки данных - Один тест написан внутри блока
it
с использованием наших атрибутовdata
, он будет выполнен как 10 отдельных тестов.
import { login } from "../support/pageObjects/login.page";
const testData = require("../fixtures/testData.json");
describe("Dynamically Generated Tests", () => { testData.forEach((testDataRow: any) => { const data = { username: testDataRow.username, password: testDataRow.password };
context(`Generating a test for ${data.username}`, () => { it("should fail to login for the specified details", () => { login.visit(); login.username.type(data.username); login.password.type(`${data.password}{enter}`); login.errorMsg.contains("Your username is invalid!"); login.logOutButton.should("not.exist"); }); }); }); });
Полный рабочий пример можно скачать здесь: - https://github.com/YOU54F/cypress-dynamic-data
git clone [email protected]:YOU54F/cypress-docker-typescript.git
yarn install
Чтобы преобразовать файлы Excel в JSON
make convertXLStoJSON
or npm run convertXLStoJSON
- Файл: -
testData/convertXLStoJSON.ts
- Ввод: -
testData/testData.xlsx
- Выход: -
cypress/fixtures/testData.json
Чтобы преобразовать CSV в JSON
make convertCSVtoJSON
or yarn run convertCSVtoJSON
- Файл: -
testData/convertCSVtoJSON.ts
- Ввод: -
testData/testData.csv
- Выход: -
cypress/fixtures/testDataFromCSV.json
Чтобы увидеть тест в действии
export CYPRESS_SUT_URL=https://the-internet.herokuapp.com
npx cypress open --env configFile=development
ormake test-local-gui
Откройте сценарий login.spec.ts
, который будет генерировать тест для каждой записи в файле CSV или XLS (по умолчанию).
Если вы хотите читать из CSV, в файле cypress/integration/login.spec.ts
Измените const testData = require("../fixtures/testData.json");
на
const testData = require("../fixtures/testDataFromCSV.json");