如何将夹具中的不同 JSON 对象映射到 cypress 中的特定规范测试文件
How to map different JSON objects from the fixture into specific spec test file in the cypress
我有以下 Input.json 作为夹具,它包含两个不同的测试用例。
Input.json(夹具文件夹)
[
{
"searchKeyword":"cypress"
},
{
"username":"QATesting",
"password":"testprofile"
}
]
以上数据将验证 Google 的两个不同功能。一个将验证搜索引擎,另一个将验证用户登录 activity(这只是示例用例,可能会模仿我的实际需求)。
我刚刚创建了 cypress 运行ner,我只想 运行 使用下面的 runner.js 文件
规范文件
const cypress = require('cypress')
const fixtures = require('./cypress/fixtures/Test.json')
const promises = fixtures.map(fixture => {
return cypress.run({
env: {
fixture
},
spec: './cypress/integration/test.spec.js',
});
});
我刚刚在下面的“test.spec.js”文件中分别添加了两个不同的It(测试用例)。一项测试将执行搜索功能,另一项将检查现有用户登录 activity:
describe("How to map two different data set with respective test function",() =>{
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);
cy.xpath("//input[@value='Google Search']").click();
cy.get("//ul/li[2]").should("be.visible");
});
it("Test Case2: login to the gmail account", function(){
cy.xpath("//a[contains(text(),'Sign in')]").click();
cy.xpath("//div[contains(text(),'Use another account')]").click();
cy.xpath("#identifierId").type(testData.username);
cy.xpath("//*[contains(text(),'Next')]").click();
cy.xpath("#password").type(testData.password);
cy.xpath("#submitbtn").click();
})
});
但是第二个测试失败了,testData.username return 未定义。
有没有在test.spec.js文件中映射具有特定功能的特定JSON数组对象?
不确定如何将第一个数据集索引与第一个 It(测试用例 1)和第二个数据集索引分别映射到第二个测试用例。
由于您的灯具数据在一个数组中并且用户名和密码字段位于索引 1 处,因此为了访问这些您必须使用:
testData[1].username
testData[1].password
如果您不想使用索引值,请将夹具结构更改为:
{
"searchKeyword": "cypress",
"username": "QATesting",
"password": "testprofile"
}
并在您的测试中直接使用:
testData.username
testData.password
如果 testData 没有所需的属性,一种快速的方法是跳过,
describe("How to map two different data set with respective test function",() =>{
const baseUrl = "https://www.google.com/";
const testData = Cypress.env('fixture')
beforeEach("",()=>{
cy.visit(baseUrl);
});
it("Test Case1: Search the keyword", function () {
if (!testData.searchKeyword) this.skip
cy.xpath("//input[@name='q']").type(testData.searchKeyword);
cy.xpath("//input[@value='Google Search']").click();
cy.get("//ul/li[2]").should("be.visible");
});
it("Test Case2: login to the gmail account", function() {
if (!testData.username) this.skip
cy.xpath("//a[contains(text(),'Sign in')]").click();
cy.xpath("//div[contains(text(),'Use another account')]").click();
cy.xpath("#identifierId").type(testData.username);
cy.xpath("//*[contains(text(),'Next')]").click();
cy.xpath("#password").type(testData.password);
cy.xpath("#submitbtn").click();
})
});
标记
也可以进入标签,给testData
添加一个标签属性
[
{
"tag": "search",
"searchKeyword":"cypress"
},
{
"tag": "user",
"username":"QATesting",
"password":"testprofile"
}
]
也许使用像cypress-tags这样的库,然后在运行器脚本中
const cypress = require('cypress')
const fixtures = require('./cypress/fixtures/Test.json')
const promises = fixtures.map(fixture => {
if (fixture.tag) {
process.env.CYPRESS_INCLUDE_TAGS = fixture.tag
}
return cypress.run({
env: {
fixture
},
spec: './cypress/integration/test.spec.js',
});
});
我有以下 Input.json 作为夹具,它包含两个不同的测试用例。
Input.json(夹具文件夹)
[
{
"searchKeyword":"cypress"
},
{
"username":"QATesting",
"password":"testprofile"
}
]
以上数据将验证 Google 的两个不同功能。一个将验证搜索引擎,另一个将验证用户登录 activity(这只是示例用例,可能会模仿我的实际需求)。
我刚刚创建了 cypress 运行ner,我只想 运行 使用下面的 runner.js 文件
规范文件const cypress = require('cypress')
const fixtures = require('./cypress/fixtures/Test.json')
const promises = fixtures.map(fixture => {
return cypress.run({
env: {
fixture
},
spec: './cypress/integration/test.spec.js',
});
});
我刚刚在下面的“test.spec.js”文件中分别添加了两个不同的It(测试用例)。一项测试将执行搜索功能,另一项将检查现有用户登录 activity:
describe("How to map two different data set with respective test function",() =>{
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);
cy.xpath("//input[@value='Google Search']").click();
cy.get("//ul/li[2]").should("be.visible");
});
it("Test Case2: login to the gmail account", function(){
cy.xpath("//a[contains(text(),'Sign in')]").click();
cy.xpath("//div[contains(text(),'Use another account')]").click();
cy.xpath("#identifierId").type(testData.username);
cy.xpath("//*[contains(text(),'Next')]").click();
cy.xpath("#password").type(testData.password);
cy.xpath("#submitbtn").click();
})
});
但是第二个测试失败了,testData.username return 未定义。
有没有在test.spec.js文件中映射具有特定功能的特定JSON数组对象?
不确定如何将第一个数据集索引与第一个 It(测试用例 1)和第二个数据集索引分别映射到第二个测试用例。
由于您的灯具数据在一个数组中并且用户名和密码字段位于索引 1 处,因此为了访问这些您必须使用:
testData[1].username
testData[1].password
如果您不想使用索引值,请将夹具结构更改为:
{
"searchKeyword": "cypress",
"username": "QATesting",
"password": "testprofile"
}
并在您的测试中直接使用:
testData.username
testData.password
如果 testData 没有所需的属性,一种快速的方法是跳过,
describe("How to map two different data set with respective test function",() =>{
const baseUrl = "https://www.google.com/";
const testData = Cypress.env('fixture')
beforeEach("",()=>{
cy.visit(baseUrl);
});
it("Test Case1: Search the keyword", function () {
if (!testData.searchKeyword) this.skip
cy.xpath("//input[@name='q']").type(testData.searchKeyword);
cy.xpath("//input[@value='Google Search']").click();
cy.get("//ul/li[2]").should("be.visible");
});
it("Test Case2: login to the gmail account", function() {
if (!testData.username) this.skip
cy.xpath("//a[contains(text(),'Sign in')]").click();
cy.xpath("//div[contains(text(),'Use another account')]").click();
cy.xpath("#identifierId").type(testData.username);
cy.xpath("//*[contains(text(),'Next')]").click();
cy.xpath("#password").type(testData.password);
cy.xpath("#submitbtn").click();
})
});
标记
也可以进入标签,给testData
添加一个标签属性[
{
"tag": "search",
"searchKeyword":"cypress"
},
{
"tag": "user",
"username":"QATesting",
"password":"testprofile"
}
]
也许使用像cypress-tags这样的库,然后在运行器脚本中
const cypress = require('cypress')
const fixtures = require('./cypress/fixtures/Test.json')
const promises = fixtures.map(fixture => {
if (fixture.tag) {
process.env.CYPRESS_INCLUDE_TAGS = fixture.tag
}
return cypress.run({
env: {
fixture
},
spec: './cypress/integration/test.spec.js',
});
});