Automated tests 在测试用例末尾添加注销命令的效果如何?

Automated tests 在测试用例末尾添加注销命令的效果如何?,automated-tests,cypress,Automated Tests,Cypress,我正在Cypress中运行一个测试套件(test1、test2、test3)。我注意到当我第一次运行这个套件时,它们都通过了。在下一次测试运行中,它们失败了。它似乎失败了,因为当test1开始运行时,test3中的数据还没有从cypress浏览器中删除。这可能是一个负载问题,还是在每个测试用例的末尾添加一个注销命令就是解决方案?不确定解决方案是什么。在您的support/index.js或support/index.ts文件中,您可以在(()=>{}之前调用将浏览器加载一次,然后在一个浏览器会话

我正在Cypress中运行一个测试套件(test1、test2、test3)。我注意到当我第一次运行这个套件时,它们都通过了。在下一次测试运行中,它们失败了。它似乎失败了,因为当test1开始运行时,test3中的数据还没有从cypress浏览器中删除。这可能是一个负载问题,还是在每个测试用例的末尾添加一个注销命令就是解决方案?不确定解决方案是什么。

在您的
support/index.js
support/index.ts
文件中,您可以在(()=>{}之前调用
将浏览器加载一次,然后在一个浏览器会话中运行所有测试。再次运行测试时,它将做的第一件事是在浏览器中重新加载页面,以便有一个干净的会话开始。

是否尝试添加一个步骤来清除cookie

Cypress.Commands.add('logout', () => {
    cy.clearCookies().then(() => {
        cy.getCookies().should('be.empty').visit('/')
    })
});

它似乎失败了,因为test3中的数据尚未从cypress浏览器中删除
。第一步是找出数据存储的位置,例如cookie、会话存储或本地存储?找到后,您可以选择适当的方法删除数据。如果您有兴趣清除所有数据,您可以做些什么如下

beforeEach(() => {
 cy.window().then(win => win.sessionStorage.clear());
 cy.clearCookies();
 cy.clearLocalStorage();
 });
确保上述语法在cypress.io中正确无误。

我看到了两种解决方案:

I.为注销命令添加断言-通常添加断言可以解决此问题

Cypress.Commands.add("shopFE_logout", (domain) => {
    cy.log('shopFE_logout - start')
    
    cy.get('[data-qa="logoutButton"]')
        .click({ force: true })
        .should('not.exist')
    cy.log('shopFE_logout - end')
})

二、 更安全但不流行的方法是将每个文件中的测试用例分离为1个,并将它们组织到文件夹中

我在cypress文档中发现了这一点请记住,Cypress已在每次测试之前自动清除本地存储、Cookie、会话等。请确保您没有试图清除Cypress已自动清除的状态 . 我认为在每次测试之前添加注销不是一个好主意。 在我的测试中,我在每次测试之前都会登录,但我还没有注销,仍然可以正常工作

 describe('This is my test suite', () => {
            let credential = "";
            beforeEach(function () {
                cy.visit(Cypress.env('devUrl'));
                cy.fixture('data/common/loginData.json').then(loginData => {
                credential = loginData;
            });
         })
        
            it('This is my first testcase', () => {
                cy.myLoginCommand(credential.valid.username, credential.valid.password)
                objLocation.navToLocationPage()
                objLocation.verifySuccessMsg('Successfully Saved')
            })
        
            it('This is my second testcase', () => {
                cy.myLoginCommand(credential.valid.username, credential.valid.password)
                objLocation.navToLocationPage()
                objLocation.verifySuccessMsg('Successfully Updated')
            })
    })

Cypress会在测试之间自动删除本地存储、Cookie、会话。再次这样做似乎没有必要。@pavelsaman last I Check仍处于打开状态!然后他们的文档不同步,因为他们明确提到Cypress会在每次测试之前清除“本地存储、Cookie、会话等”: