Краткое пошаговое руководство по использованию данных из электронных таблиц 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);
}

В нашем тестовом файле кипариса мы собираемся

  1. Импортируйте наш сгенерированный файл JSON в testData
  2. Переберите каждый testDataRow внутри блока describe и установите объект data с нашим именем пользователя и паролем.
  3. Настройте мокко context с динамически генерируемым заголовком, уникальным для каждой строки данных
  4. Один тест написан внутри блока 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 or make 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");