赛普拉斯 - 从一个测试中设置全局变量以用于其他测试
Cypress - Setting global variable from one test to use in other tests
我正在尝试设置一个变量,该变量将包含 URL(一个 UUID)的一部分,然后我想在单独的测试套件中使用它。 URL 的这个片段每次都会不同,所以我无法在“env”选项中的 cypress.json 中设置它。代码如下-
cy.location().then(fullUrl => {
let pathName = fullUrl.pathname
let arr = pathName.split('/');
const teamsTeamID = arr[4]
cy.log(teamsTeamID)
})
然后我想在单独的拆解测试中使用 teamsTeamID 在每次测试结束时删除团队 运行 但每次 运行 测试时团队 ID 都会不同 -有办法吗?
您可以使用 fixtures and then use readFile and writeFile 来实现。
首先在 fixtures 文件夹中创建一个 json urldata.json
{
"uuid": "17289-YEHBE-893"
}
然后在你的测试中你可以这样写:
var teamsTeamID;
cy.location().then(fullUrl => {
let pathName = fullUrl.pathname
let arr = pathName.split('/');
teamsTeamID = arr[4]
cy.log(teamsTeamID)
})
cy.readFile("cypress/fixtures/urldata.json", (err, data) => {
if (err) {
return console.error(err);
};
}).then((data) => {
data.uuid = teamsTeamID
cy.writeFile("cypress/fixtures/urldata.json", JSON.stringify(data))
})
所以现在每次 运行 测试时,您的 json 文件中都会有不同的 UUID 值。接下来,您可以将来自 fixtures 的值直接用于其他测试:
describe('Some page', () => {
beforeEach(function () {
// "this" points at the test context object
cy.fixture('urldata.json').then((urldata) => {
// "this" is still the test context object
this.urldata = urldata
})
})
// the test callback is in "function () { ... }" form
it('check uuid', function () {
// this.urldata exists
expect(this.urldata.uuid).to.equal('some uuid')
})
})
注意事项:
If you store and access the fixture data using this test context
object, make sure to use function () { ... } callbacks. Otherwise the
test engine will NOT have this pointing at the test context.
我正在尝试设置一个变量,该变量将包含 URL(一个 UUID)的一部分,然后我想在单独的测试套件中使用它。 URL 的这个片段每次都会不同,所以我无法在“env”选项中的 cypress.json 中设置它。代码如下-
cy.location().then(fullUrl => {
let pathName = fullUrl.pathname
let arr = pathName.split('/');
const teamsTeamID = arr[4]
cy.log(teamsTeamID)
})
然后我想在单独的拆解测试中使用 teamsTeamID 在每次测试结束时删除团队 运行 但每次 运行 测试时团队 ID 都会不同 -有办法吗?
您可以使用 fixtures and then use readFile and writeFile 来实现。
首先在 fixtures 文件夹中创建一个 json urldata.json
{
"uuid": "17289-YEHBE-893"
}
然后在你的测试中你可以这样写:
var teamsTeamID;
cy.location().then(fullUrl => {
let pathName = fullUrl.pathname
let arr = pathName.split('/');
teamsTeamID = arr[4]
cy.log(teamsTeamID)
})
cy.readFile("cypress/fixtures/urldata.json", (err, data) => {
if (err) {
return console.error(err);
};
}).then((data) => {
data.uuid = teamsTeamID
cy.writeFile("cypress/fixtures/urldata.json", JSON.stringify(data))
})
所以现在每次 运行 测试时,您的 json 文件中都会有不同的 UUID 值。接下来,您可以将来自 fixtures 的值直接用于其他测试:
describe('Some page', () => {
beforeEach(function () {
// "this" points at the test context object
cy.fixture('urldata.json').then((urldata) => {
// "this" is still the test context object
this.urldata = urldata
})
})
// the test callback is in "function () { ... }" form
it('check uuid', function () {
// this.urldata exists
expect(this.urldata.uuid).to.equal('some uuid')
})
})
注意事项:
If you store and access the fixture data using this test context object, make sure to use function () { ... } callbacks. Otherwise the test engine will NOT have this pointing at the test context.