我在哪里可以定义在柏树的所有测试用例中使用的公共变量?



我有一个表格,我正在填写和每一个测试用例需要不同的值的名字,姓氏和电子邮件。所以我在每个测试用例中创建env变量值,因为值每次都在变化,而不仅仅是cypress.json中的一个值是否有一种方法,我可以移动我下面声明的常量变量到柏树的一个部分,我可以把它移动到钩子部分?

//Second Test Case with Broker Company
it('demotestnifty1', {
env: {
firstname: 'Lambda',
lastname: 'Jonas',
email: 'ljrfnew@gemini.com',
}
}, function () {
const firstname = Cypress.env('firstname')
const email = Cypress.env('email')
const lastname = Cypress.env('lastname')

如果这些块中的所有测试的数据相同,则可以在describe()context()级别定义它们。这与您在it()块中所做的类似。

describe('some test', { env: { foo: 'bar' } }, () => {
it('logs foos value', () => {
cy.log(Cypress.env('foo'); // logs 'bar'.
});
});

您也可以将它们存储在cypress.jsoncypress.env.json文件中。

// cypress.json
{
...
'env': {
'foo': 'bar'
}
...
}
// cypress.env.json
{
'foo': 'bar'
}

Cypress将自动拾取cypress.jsoncypress.env.json中包含的变量,因此不需要额外的设置。注意:存储在cypress.env.json中的环境变量将覆盖cypress.json中的任何设置。

无论哪种方式,在it()块的更高作用域定义变量后,您可以在块的before()beforeEach()中设置它们。

// assumes value is set in cypress.json
describe('some tests', () => {
let foo: string;

before(() => {
foo = Cypress.env('foo');
});
it('logs foo value', () => {
cy.log(foo); // logs 'bar'
}); 
});

编辑:经过讨论,看起来实际的问题是如何设置和使用数据。我认为最简单的方法就是在beforeEach()中设置数据。

describe('some test', () => {
let foo: string;
beforeEach(() => {
foo = Cypress.env('foo');
})
it('logs bar', { env: { foo: 'bar' } }, () => {
cy.log(foo); // logs 'bar'
});
it('logs baz', { env: { foo: 'baz' } }, () => {
cy.log(foo); // logs 'baz'
});
});

设置一个默认值也可能是有价值的,如果你有一个用例,你使用>50%的时间

...
let foo: string;
beforeEach(() => {
foo = Cypress.env('foo') ?? 'defaultValue'
});
...

创建一个用户数组并对其进行索引

// cypress.json
{
"env": {
"users": [
{firstname: 'Lambda', lastname: 'Jonas', email: 'ljrfnew@gemini.com'},
...
]
}
}
// test
it('tests with first user', () => {
const firstname = Cypress.env('users')[0].firstname
const lastname =  Cypress.env('users')[0].lastname
...
})

最新更新