在Cypress中跨多个测试使用cy.session



在最新版本的Cypress Cookie保存是不赞成的,所以我希望我们cy.session。然而,我不能让这在多个测试中工作,因为cy.session需要在测试'it'中,例如我的测试目前是如何设置的。

beforeEach(() => {
Cypress.Cookies.defaults({
preserve: /somecookie|someOtherCookie|AnotherCookie/
})
it('Navigate to URL', () => {
performance.NavigateToUrl(URL);
});
it('Login - Username/Pass', () => {
performance.LoginUserPass();
});        
it('Navigate Order Page', () => {
performance.Orderpage();
});
//And so on............

欢迎任何帮助和建议,因为我不想重写测试结构,因为我创建了一个关于它当前输出/设计的报告。

用于在所有测试中保留会话

随着最近的变化,柏树正试图"执行";如果测试隔离更多,那么您就违背了他们的最佳实践,因为在不同的it()块之间存在依赖关系。

更好的方法是根据上下文构建

context('before logging in', () => {
it('Can navigate to home page', () => {
...
})
it('Can log in', () => {
...
})  
})
context('after logging in', () => {
beforeEach(() => {
cy.session('login', () => {
// do login via cy.request()
// preserve all browser login data such as cookies, localstorage
})
})
it('Can use order page', () => {
...
})
})

测试隔离标志

cy.session()页面上有一个注释,表明您可以关闭测试隔离,但段落有点模糊IMO

启用testsolation时在安装前清除页面,禁用testsolation时不清除页面。

无论testsolation配置如何,在安装运行之前,所有域中的cookie、本地存储和会话存储总是被清除。

所以,设置testIsolation: false是值得尝试的,但根本不要调用cy.session()

我认为您可以在before钩子中使用访问和登录方法的回调函数cy.session:

const sessionId = 'Login with valid credentials'
before(() => {
cy.session(sessionId, () => {
performance.NavigateToUrl(URL)
performance.LoginUserPass()
})
})

然后恢复会话并在beforeEach钩子中再次访问该页。

beforeEach(() => {
cy.session(sessionId)
performance.NavigateToUrl(URL)
})
it('Navigate Order Page', () => {
performance.Orderpage();
})
//And so on............

最新更新