赛普拉斯测试—如何保存Cookie并保持登录会话有效

698 阅读3分钟

赛普拉斯测试:保存Cookie和保持登录会话的有效性

本文逐步解释了如何以一种简单的方式在测试之间保存和共享cookie/会话

默认情况下,Cypress在每次测试前都会重置会话。如果你在第一个测试场景中登录(ex: it() block) ,然后在第二个测试(second it block) ,而你正在执行一些其他任务,你会被自动带回到登录页面。发生这种情况是因为Cypress不保留会话;它创建一个新的会话。在端到端测试中,大多数情况下,用户将首先被登录,然后所有的工作流程都将被检查。这篇文章解释了克服这一问题的最简单方法,只需使用几行代码。

让我解释一下这个场景。

测试案例1:你已经登录到了应用程序。

测试案例2:你将点击菜单来验证一些功能。

如果你使用的是Selenium,上述选项看起来非常简单。 然而,在Cypress中,在执行第一个测试用例(测试用例1)之后,它将重置会话,就像重新启动浏览器一样。 因此,当你到达测试案例2时,你将再次被要求登录并执行测试案例1的所有操作。如果你想在Cypress中解决这个问题,让我们在一个例子中讨论一下后续的步骤。

如果你对特定的cookie不感兴趣,你想要的只是在整个测试中保留活跃的登录会话,你可以遵循下面的步骤。另外,请注意,在下面的步骤中,一旦你登录,共享代码会保留赛普拉斯测试中的所有cookies,并在每个测试中共享cookies,因此你不需要重复登录。

互联网上有许多问题,例如:

  • 如何在测试之间不冲刷cookie
  • 如何使用Cypress来保存cookie
  • 如何在Cypress.io中保留会话
  • 如何在Cypress中恢复cookie
  • 如何在Cypress.io中停止每次测试后的重新登录
  • 如何在下一次测试开始时保留并不清除cookie
  • 如何用Cypress.io创建和保存Cookies
  • 如何在Cypress的测试之间保存cookie
  • 如何在多个测试中保留cookie

以下是最简单、最容易、最通用的方法,考虑到那些刚刚开始使用Cypress的人。 我希望这对某人有帮助。

第1步:导航到位于Cypress/Support文件夹中的index.js

第2步:复制并粘贴以下代码

JavaScript

afterEach(() => {
			//Code to Handle the Sesssions in cypress.
			//Keep the Session alive when you jump to another test
			let str = [];
			cy.getCookies().then((cook) => {
				cy.log(cook);
				for (let l = 0; l < cook.length; l++) {
					if (cook.length > 0 && l == 0) {
						str[l] = cook[l].name;
						Cypress.Cookies.preserveOnce(str[l]);
					} else if (cook.length > 1 && l > 1) {
						str[l] = cook[l].name;
						Cypress.Cookies.preserveOnce(str[l]);
					}
				}
			})

注意。 如果你在使用上述代码后看到一个超时 错误,请按照以下步骤操作:

  • 导航到位于 文件夹中的cypress.json文件。
  • 添加一行: "defaultCommandTimeout":30000

请参考这里的示例项目

这就是全部!测试愉快!!!