赛普拉斯:我想通过登录一次在 100 个规范文件中运行测试,并为每个文件持久登录.可能吗?



我有近 100 个规范文件,包括多个测试。我想通过登录一次运行所有这些规范文件。 我不希望我的柏树每次都应该在每个规范文件上登录过程 可以对所有规范文件保持单次登录

看看我们的"登录"食谱 https://github.com/cypress-io/cypress-example-recipes#logging-in-recipes - 他们中的大多数使用before钩子登录一次,然后将cookie/令牌保存在局部变量中,并在beforeEach钩子中一次又一次地设置它

这是Cypress.io 建议您使用的推荐方法,因为这是相当反模式的方法。

赛普拉斯文档

反模式:共享页面对象,使用UI登录,不走捷径。

最佳做法:隔离测试规范,以编程方式登录到应用程序,并控制应用程序的状态。

您应该有一个规范文件/一些实际测试您的登录屏幕/功能的测试,以确认确实有效。

但是,在其他任何时候,您都应该通过API以编程方式登录您的帐户,并将凭据存储在cookie或令牌中。

这样,您应该能够绕过登录屏幕。

一旦 API 正常工作,您就可以将其添加到适当位置的before钩子中。

如果您在所有测试之前使用登录名,这很容易实现,之后,您必须默认设置cookie。我在cypress/support/index.ts里面做了这个,因为它首先加载。

before(() => {
cy.yourLoginHook()
})

Cypress.Cookies.defaults({
preserve: 'yourCookie',
})

如果其他人会遇到类似的问题或 Kashif 仍然感兴趣,我想我有解决方案。

您可以将规范文件中的每个测试(整个文件也应该可以工作(包装到"导出函数"中,并在将使用 cypress IDE 处理的其他规范文件中使用它们。

utils.spec.ts:

export function loginTestName(){
describe('Test Preparation', () => {
it('Application login', () => {
...
})
})
}

test.spec.ts

loginTestName()
otherFunction()
describe('Other functions', () => {
it('Add user', () => {
...
})
})

请注意,当您将 wartest 转换为导出功能时,它不会被 Cypress 检测为测试,因此您需要将它们从"集成测试本地化"中删除,并在移动后在另一个文件中重用它们。

最新更新