如何将地图对象设置为赛普拉斯结果 json 文件
Posted
技术标签:
【中文标题】如何将地图对象设置为赛普拉斯结果 json 文件【英文标题】:How to set the map object into Cypress result json file 【发布时间】:2021-12-10 16:39:45 【问题描述】:我正在使用 cypress runner 来执行 spec 文件并返回如下结果。
Runner.js:
const cypress = require('cypress');
const param = require("./cypress/support/Param");
async function testRunner(fixture)
return cypress.run(
config:
,
env:
testcaseID: `$fixture`,
,
spec: './cypress/integration/' + `$param.getSpec()` + ".spec.js",
);
规格文件:
let map = new Map();
describe("How to add map values in the cypress result.json",() =>
const baseUrl = "https://www.google.com/";
const testData = Cypress.env('fixture')
beforeEach("",()=>
cy.visit(baseUrl);
);
it("Test Case1: Search the keyword", function ()
cy.xpath("//input[@name='q']").type(testData.searchKeyword);
map.set("UserInput",testData.searchKeyword); //It's just sample
cy.xpath("//input[@value='Google Search']").click();
map.set("customMessage","test"); //It's just sample but actual usecase is different
cy.get("//ul/li[2]").should("be.visible");
);
);
使用以下行在主运行器中获取结果:
result = await testRunner(dataSet[i]);
if (result.runs[0].stats.failures === 1)
console.log(result);
上面的代码工作正常,我可以得到包含测试用例是否通过/失败的 result.json。但除此之外,我只想添加更多存储在 Map 中的运行时值,并希望将它们添加到 Cypress.run 返回结果中。
有人可以建议我处理此问题的优化方法吗?如何获取地图中可用的一些运行时值,这些值将与 cypress 运行结果一起返回。
提前致谢。
更新:
我刚刚创建了一个 Map() 变量并使用 getter 和 setter 调用该变量,但仍然没有运气。
var EnumPojo =
LISTENER: new Map(),
get listener()
return this.LISTENER;
,
set listener(value)
return this.listener =value;
;
将上面的地图调用到脚本中:
const runtimeValues = require("../../EnumPojo.js");
describe("How to add map values in the cypress result.json",() =>
const baseUrl = "https://www.google.com/";
const testData = Cypress.env('fixture')
beforeEach("",()=>
cy.visit(baseUrl);
);
it("Test Case1: Search the keyword", function ()
cy.xpath("//input[@name='q']").type(testData.searchKeyword);
runtimeValues.LISTENER.set("UserInput",testData.searchKeyword); //It's just sample
cy.xpath("//input[@value='Google Search']").click();
runtimeValues.LISTENER.set("customMessage","test"); //It's just sample but actual usecase is different
cy.get("//ul/li[2]").should("be.visible");
);
);
跑步者:
const runtimeValues = require("../../EnumPojo.js");
result = await testRunner(dataSet[i]);
if (result.runs[0].stats.failures === 1)
console.log(result);
console.log(runtimeValues.LISTENER);
输出: 地图0
【问题讨论】:
【参考方案1】:在测试中,将地图保存在fixtures下
it('my-test', function ()
...
cy.fixture('map.json').then(mapData =>
mapData['my-test'] = JSON.stringify(map) // use unique key for this test
cy.writeFile('./fixtures/map.json', JSON.stringify(mapData))
)
)
在跑步者中,
const fs = require('fs')
cypress.run(...)
.then(result =>
const mapData = fs.readFileSync('./cypress/fixtures/map.json') // adjust path to where script is
/*
mapData is
'my-test': ...data here ,
'other-test': ...data here ,
*/
)
但是 javascript Map
可能无法正确序列化,最好在保存前转换为对象。
【讨论】:
感谢分享代码。我有很多与套件相关的测试,还有其他方法可以在 cypress runner 的结果中附加一些自定义变量作为键值对吗? 您的运行器代码看起来像是一次执行一个规范,但如果您希望每次测试都有额外的数据,我会给出修正。以上是关于如何将地图对象设置为赛普拉斯结果 json 文件的主要内容,如果未能解决你的问题,请参考以下文章