Using Allure
Autometa supports the Allure Reports Framework.
To enable reporting, add AllureSubscriber
to the subscriber
property in your
autometa.config.ts
or other file which calls defineConfig()
.
autometa.config.ts
import { defineConfig, AllureSubscriber } from "@autometa/cucumber-runner";
defineConfig({
// ....
subscribers: [AllureSubscriber]
// ...
});
One enabled, Allure will automatically generate suites, packages, tests, hooks and steps,
which will be generated to .allure-reports/
Defining Steps in tests
It's possible to define substeps within steps and hooks. To do so,
add AllureStepper
as a constructor argument on your App
class:
@Fixture
@Persistent
export class App {
constructor(readonly allure: AllureStepper) {}
}
From here it can be accessed from a step or hook defintion function.
Given("a user wishes to log in", ({ world, allure: { step } }: App) => {
// synchronous allure step
step("configure credentials", () => {
world.credentials = {
username: process.env.USERNAME,
password: process.env.PASSWORD
};
});
});
When(
"the user logs in with their credentials",
async ({ page, world, allure: { step } }: App) => {
// asynchronous allure step
await step("Enter username", () => page.enterUsername(world.username));
await step("Enter password", () => page.enterUsername(world.password));
await step("Click login", page.clickLogin);
}
);
info
An Allure step can be asynchronous or synchronous. If it is asynchronous or returns
a Promise
, then the Allure step itself must be await
'd.
Allure steps can also be used in some hooks.
import { dbSeeder, cleanup } from "../db";
Before("Setup Db", async ({ world, allure: { step } }: App) => {
await step(
"Add seed data to database",
async () => (world.seedData = await dbSeeder())
);
});
After("Teardown db", async ({ world, allure: { step } }: App) => {
await step("delete seeded data", () => cleanup(world.seedData));
});