我正在使用 codeceptjs 库来开发和运行自动化测试。目前我正在使用 NodeJS 工作人员并行运行这些测试。CodeceptJS 提出了这个机会并在其文档中提到它 - https://codecept.io/parallel/#parallel-execution-by-workers。
此外,我正在使用 Mochawesome、mocha-junit-reporter 和 codeceptjs-cli-reporter 等报告器,我可以在 Mocha-multi 包的帮助下使用多合一。
我用来运行测试的命令是
codeceptjs run-workers --suites 4 --reporter mocha-multi
我的 codecept.conf.js 文件如下所示:
// Инициализация расширения dotenv, чтобы переменные из файла .env были доступны в тестах через объект process.env
require('dotenv').config();
const { setHeadlessWhen } = require('@codeceptjs/configure');
const { devices } = require('playwright');
const { BASE_URL, API_URL } = require('./utils/endpoints');
// Для запуска тестов в headless-режиме (как в bamboo) выполняется команда
// yarn e2e:ci
// Для запуска тестов в окне браузера выполняется команда
// yarn e2e
setHeadlessWhen(process.env.HEADLESS === 'true');
exports.config = {
tests: './e2e/*/*.test.js',
output: './output',
helpers: {
Playwright: {
url: `https://${BASE_URL}`,
show: true,
browser: 'chromium',
waitForNavigation: 'domcontentloaded',
waitForTimeout: 3000,
getPageTimeout: 10000,
emulate: devices['iPhone 6'],
},
REST: {
endpoint: `https://${API_URL}`,
},
Auth: {
require: './helpers/auth.js',
},
DataGenerator: {
require: './helpers/data-generator.js',
},
Cabinet: {
require: './helpers/cabinet.js',
},
Moderation: {
require: './helpers/moderation.js',
},
Advert: {
require: './helpers/advert.js',
},
User: {
require: './helpers/user.js',
},
Faker: {
require: './helpers/faker.js',
},
ChaiWrapper: {
require: 'codeceptjs-chai',
},
Mochawesome: {
uniqueScreenshotNames: true,
},
},
include: {
I: './steps_file.js',
// pages
SubmitPage: './pages/kaspi/Submit.js',
IndexPage: './pages/kaspi/Index.js',
AdvertPage: './pages/kaspi/AdvertPage.js',
EditAdvertPage: './pages/kaspi/EditAdvert.js',
CabinetActive: './pages/kaspi/CabinetActive.js',
// steps
EditAdvertStep: './steps/kaspi/EditAdvert.js',
AdvertPageStep: './steps/kaspi/AdvertPage.js',
CabinetStep: './steps/kaspi/Cabinet.js',
},
bootstrap: null,
mocha: {
reporterOptions: {
'codeceptjs-cli-reporter': {
stdout: '-',
options: {
verbose: true,
steps: true,
},
},
mochawesome: {
stdout: '-',
options: {
reportDir: './output',
reportFilename: 'report',
},
},
'mocha-junit-reporter': {
stdout: '-',
options: {
mochaFile: './output/report.[hash].xml',
attachments: true,
},
},
},
},
name: 'market-spa',
plugins: {
pauseOnFail: {},
retryFailedStep: {
enabled: true,
},
tryTo: {
enabled: true,
},
screenshotOnFail: {
enabled: true,
},
},
};
问题是当我得到一个由 Mochawesome 创建的 HTML 报告时,它只包含最后一个 NodeJS 工作人员的结果。换句话说,我希望我的 HTML 报告将包含我所有 20 个自动化测试的结果,但它只包含 5 个测试的结果(这 15 个测试也在运行,但没有留下任何结果)。
顺便说一句,mocha-junit-reporter 生成的 xml 结果运行良好 - 它生成 4 个不同的文件,其中包含每个测试套件的结果。