我正在使用 Cypress 和 JavaScript 进行自动化测试。
我必须管理一个用于添加、搜索和编辑用户的测试用例。我为每个创建了不同的测试用例。添加用户后,我通过搜索验证了最近创建的用户。我之前也搜索过相同的用户来编辑它。
在 Cypress 中,测试用例按顺序运行。我的第一个案例是“添加用户”,第二个案例是“搜索用户”,最后一个案例是“编辑用户”。添加后自动执行搜索操作。但在编辑之前,我必须调用“搜索”测试用例中使用的所有函数。我使用的是POM框架。
这是我写的代码:
describe('User management', function(){
it('Add user', function(){
obj.clickOnAddUserButton()
obj.fillDetails()
obj.clickOnSaveButton()
})
it('Search user', function(){
obj.searchName()
obj.searchRole()
obj.verifyName()
obj.verifyRole()
})
it('Edit user', function(){
obj.searchName()
obj.searchRole()
obj.verifyName()
obj.verifyRole()
obj.editUser()
})
})
是否可以从另一个
it()
调用it()
,就像我们调用的函数一样?
我尝试了以下解决方案来理解,但失败了:Cypress - 让 1 个测试调用另一个测试并运行它
我还浏览了以下链接,但这对我没有帮助: 如何在Protractor中调用其他测试用例中的公共测试用例
让我举个例子,我到底想要什么。
describe('User management', function(){
it('Add user', function(){
obj.clickOnAddUserButton()
obj.fillDetails()
obj.clickOnSaveButton()
})
it('Search user', function(){
obj.searchName()
obj.searchRole()
obj.verifyName()
obj.verifyRole()
})
it('Edit user', function(){
//Here I want to call it() instead of calling same functions here
//i.e. it('Search user')
obj.editUser()
})
})
您可以重新排列已有的代码。
一般的测试模式是
it('test-name', callbackFunction)
。
你不能嵌套
it()
,因为 Cypress 运行程序需要管理这些功能,例如重试和报告结果。
但是您可以移动
callbackFunction
以使其可重复使用。
describe('User management', function(){
it('Add user', function(){
obj.clickOnAddUserButton()
obj.fillDetails()
obj.clickOnSaveButton()
})
function searchUser() {
obj.searchName()
obj.searchRole()
obj.verifyName()
obj.verifyRole()
}
it('Search user', searchUser())
it('Edit user', function(){
searchUser()
obj.editUser()
})
})
在页面对象本身内部编写
searchUser()
函数会更整洁
class User {
searchName() {...}
searchRole() {...}
verifyName() {...}
verifyRole() {...}
searchUser() {
this.searchName()
this.searchRole()
this.verifyName()
this.verifyRole()
}
}
describe('User management', function(){
it('Add user', function(){
obj.clickOnAddUserButton()
obj.fillDetails()
obj.clickOnSaveButton()
})
it('Search user', () => {
obj.searchUser()
})
it('Edit user', function(){
obj.searchUser()
obj.editUser()
})
})
或者再一个抽象,组成一个
UserWorkflow
页面对象
class User {
searchName() {...}
searchRole() {...}
verifyName() {...}
verifyRole() {...}
}
class UserWorkflow {
// Various User workflows to use in tests
constructor() {
this.user = new User()
}
searchUser() {
this.user.searchName()
this.user.searchRole()
this.user.verifyName()
this.user.verifyRole()
}
}