我的本意是第一个测试用例生成一个随机的项目id,后面的测试用例访问的url是全局环境变量保存的baseUrl和随机id拼接而成的,找了cypress的两种设计方法:
第一种:
- 创建 cypress.env.json 文件把baseUrl和项目id都放里面,项目id给一个默认值
- 第一个测试用例生成的项目id使用 Cypress.env(‘projectId’, 随机id) 替换掉cypress .env.json里里面的项目id
- 其他测试用例使用Cypress.env(‘projectId’) 的方法获取到项目id和baseUrl,利用 cy.visit(baseUrl+projectId) 访问的新项目的url
但是env有一个致命的限制,她对于环境变量的修改仅限于当前测试用例,也就是一个测试用例对它修改的值在别的用例中是访问不到的,所以这种方式不起作用
第二种:
- 第一个测试用例生成的随机id利用 cy.writeFile() 的方式写入到一个json文件中
cy.get('div#task')
.attribute('project-id')
.then((res) => {
// 存入json文件中
cy.writeFile(
'cypress/fixtures/test.json',
{ project_id: res },
{ flag: 'w+' }
);
});
baseUrl也写在了这个文件里面
- 其他的测试用例从这个接送文件中l利用 cy.fixture() 获取baseUrl和projectId。
cy.fixture('test').then((data) => {
project_id = data.project_id;
let baseUrl = data.baseUrl
});`
但是writeFile()方法中有很多flag,常用的就是W+全覆盖,a+追加,使用w+de话,baseUrl就被覆盖掉了,a+的话不会相互覆盖,但键值相同的键值对一直累加,json文件里面存在很多对象,这肯定是报错的
所以最后的解决办法就是两者的结合,将其余的固定环境变量写在cypress.env.json文件中,将随机生成的id单独放在一个json文件中,并且在writeFile方法中配置w+,使每次新生成的id覆盖掉旧的id 在获取baseUrl的时候利用Cypress.env(‘baseUrl’)的方式获取, 获取id的时候利用cy.fixture(’ 文件名’)的方式获取
|