我正在出于登录目的手动设置身份验证Cookie,我希望在所有测试中共享身份验证令牌。第一次,我必须在测试中执行登录,然后必须将auth令牌保存在变量中,并在测试文件之间共享它。
这里是代码段,用以说明我想做什么以及如何做:
loginTest.js:
let authToken = null;
fixture`Login test`
.page(inputData.url)
.beforeEach(async (t) => {
const nextMonth = new Date();
nextMonth.setMonth(nextMonth.getMonth() + 1);
await t.navigateTo(inputData.url).then(await setCookie('AUTH_COOKIE_ID', authToken, nextMonth));
});
test
.before(async () => {
await loginPage.login(inputData.firstUserEmailId, inputData.firstUserPassword);
authToken = await getCookie('AUTH_COOKIE_ID');
})('Verify login test', async (t) => {
await loginPage.goToPeople(personName);
await t
.expect(loginPage.personName.exists)
.ok();
});
现在,测试后,我拥有实际的authToken
(不为null),如果我必须在所有文件的所有测试中共享authToken
变量,那该怎么办?通过这种编码设计,我可以在同一文件(测试套件)中共享authToken
。例如:
我有一个文件peopleTest.js:
fixture`People test`
.page(inputData.url)
.beforeEach(async (t) => {
const nextMonth = new Date();
nextMonth.setMonth(nextMonth.getMonth() + 1);
await t.navigateTo(inputData.url).then(await setCookie('AUTH_COOKIE_ID', loginTest.authToken, nextMonth));
});
test('Verify people test', async (t) => {
await loginPage.goToPeople(personName);
await t
.expect(loginPage.personName.exists)
.ok();
});
在上面的测试中,如果我可以做loginTest.authToken
那就太好了。
PS:以防万一,人们想知道为什么我要设置cookie而不使用useRole
。只是为了让您知道useRole
在我的设置中不起作用,因为该应用程序在本地环境中手动设置了cookie,因此我必须手动将cookie设置为登录解决方法。
请参考Extract Reusable Test Code收据以找到有关如何在测试用例之间共享测试代码的信息。
此外,如果仅在特定灯具的测试之间共享对象,则可以使用灯具上下文对象:Sharing Variables Between Fixture Hooks and Test Code。>
例如:
helper.js
var authToken = 111; function setToken(x) { authToken = x; } function getToken(x) { return authToken; } export { setToken, getToken };
test.js
import { getToken, setToken } from './helper.js' fixture("test1") .page("http://localhost"); test('test1', async t => { console.log('token: ' + getToken()); setToken(111); });
test1.js
import { getToken } from './helper.js' fixture("test2") .page("http://localhost"); test('test2', async t => { console.log('token2: ' + getToken()); });
另请参见: