Перейти к основному содержимому

Хуки жизненного цикла

Testplane предоставляет способ выполнять код как до и после каждого теста, так и единоразово до/после всего запуска. Вы можете использовать эти хуки для подготовки окружения, уменьшения дублирования в тестах и многого другого.

До/после каждого теста

Используйте плагин @testplane/global-hook для выполнения действий до/после каждого теста. Установите плагин:

npm install -D @testplane/global-hook

Добавьте плагин в секцию plugins конфигурации testplane и определите необходимые хуки.

В примере ниже мы восстанавливаем состояние браузера перед каждым тестом — это полезно, если ваше приложение требует аутентификации.

export default {
// ...
plugins: {
"@testplane/global-hook": {
beforeEach: async ({ browser }) => {
await browser.restoreState();
},
afterEach: async ({ browser }) => {
await browser.execute(() => {
try {
localStorage.clear();
} catch (e) {}
});
},
},
},
};

Примечание: инстанс браузера доступен в хуках как свойство browser объекта контекста.

Узнайте больше о командах saveState и restoreState в соответствующих статьях.

До/после всего запуска Testplane

Используйте хуки beforeAll и afterAll для выполнения действий до/после всего запуска Testplane. Вы можете определить эти хуки в конфигурации Testplane, как показано в примере ниже.

Частый случай использования — аутентификация и сохранение состояния аутентификации для использования в последующих тестах:

import fs from "fs";
import { launchBrowser } from "testplane/unstable";

const COOKIE_PATH = "./cookies.json";

export default {
browsers: {
"chrome-desktop": {
desiredCapabilities: { browserName: "chrome" },
},
},

beforeAll: async ({ config }) => {
const browser = await launchBrowser(config.browsers["chrome-desktop"]);
await browser.url("https://example.com/login");

await browser.setValue("#username", "user");
await browser.setValue("#password", "pass");
await browser.click("#submit");

const cookies = await browser.getCookies();
fs.writeFileSync(COOKIE_PATH, JSON.stringify(cookies));

await browser.deleteSession();
},

afterAll: async () => {
if (fs.existsSync(COOKIE_PATH)) {
fs.rmSync(COOKIE_PATH);
}
},
};

Примечание: в хуках beforeAll и afterAll нет готового экземпляра браузера, вы можете использовать Standalone API для запуска браузера и выполнения действий в нём.

Хук prepareBrowser

Хук prepareBrowser вызывается один раз на сессию браузера, после инициализации браузера, но до запуска любых тестов в нём.

Частый случай использования этого хука — добавление пользовательских команд для использования в тестах:

export default {
// ...
prepareBrowser: function (browser) {
browser.addCommand("waitForCustomCondition", async function (selector) {
await this.waitForExist(selector);
await this.waitForDisplayed(selector);
});

require("./commands/auth-helpers")(browser);
require("./commands/api-helpers")(browser);
},
};

Хук prepareEnvironment

Хук prepareEnvironment вызывается один раз на процесс: в главном процессе и в каждом воркере во время загрузки конфигурации. В этом хуке объект конфигурации доступен как this.

Этот хук полезен только для очень специфических случаев, если вы не уверены в том, что делаете — используйте варианты, описанные выше.

import { pick } from "lodash";

export default {
// ...
prepareEnvironment: function () {
this.sets = pick(this.sets, ["touch-phone"]);
},
};