在Cypress中,要在所有测试运行之前执行一些公共代码,我们通常使用before
或beforeEach
钩子。before
钩子在测试文件中的所有测试运行之前执行一次,而beforeEach
钩子则在每个测试用例运行之前都会执行。
这里有个示例:
如果您想在所有测试前只执行一次某些代码,您可以在测试文件的顶层使用before
钩子:
javascript// 在所有测试前只执行一次 before(() => { // 这里可以放置你的公共代码,比如: // 登录操作 cy.login('username', 'password'); // 假设你有一个封装好的登录命令 // 设置测试数据或者环境 cy.setupTestData(); });
如果需要在每个测试用例之前执行代码,可以使用beforeEach
钩子:
javascript// 在每个测试用例之前都执行 beforeEach(() => { // 这里可以放置你的公共代码,比如: // 每次都要确保从登陆页面开始 cy.visit('/login'); // 访问登录页面 // 你可能需要清除浏览器的localStorage或cookies cy.clearLocalStorage(); cy.clearCookies(); // 每个测试用例都需要的初始化操作 cy.initializeTestContext(); });
这些钩子应该放在你的测试文件顶部,通常在描述测试套件的describe
块外面或里面。将它们放在describe
块外面意味着它们会在该文件中定义的所有describe
块之前运行。放在describe
块内部,则只会影响该describe
块中的测试用例。
另外,如果你有多个测试文件,并且希望有一些代码在这些测试文件中的每个文件执行前都运行一次,你可以使用Cypress的support
文件夹中的index.js
文件。在那里放置的代码会在每个测试文件执行前运行。
例如,在cypress/support/index.js
文件中:
javascript// 这将在每个测试文件之前执行一次 before(() => { // 公共初始化代码,比如设置API服务器的状态 cy.initializeApiServer(); }); // 这将在每个测试文件的每个测试用例之前执行 beforeEach(() => { // 通用的每个测试用例前的逻辑,比如登录 cy.loginToApplication(); });
记得在使用这些钩子时要注意它们的作用域和执行顺序,以确保测试环境的正确设置。