当前位置: 首页 > 知识库问答 >
问题:

Cucumber,在所有场景中重复登录步骤

孟乐逸
2023-03-14

我将硒与cucumber一起使用(使用JAVA,但不太相关)

假设我有以下场景:

功能:示例功能

场景:在网站上执行操作A给定网站已打开,用户输入正确的登录名并传入字段,用户按“登录”,然后执行操作A

场景:在网站上执行操作A给定网站已打开,用户输入正确的登录名并传入字段,然后用户按“登录”,然后执行操作B

现在,将有数百个场景,网站总是需要登录到网站,所以我假设对于每个测试场景,我必须重复登录步骤(例如,通过后台或在场景挂钩之前)

我一直在读这类测试应该是自主的,所以场景之间不应该共享webdriver实例

说:

特点:一些特点

场景:登录网站的第一步。。。

场景:执行动作A(当我们已经记录步骤...

场景执行操作B(始终在登录步骤和操作A步骤中使用的同一浏览器实例中。。。

但我发现有人说这不是正确的方式,但每次我想执行某个测试场景时,重复登录过程会花费很多时间运行许多场景,每个场景都需要先登录。我在考虑是否可以在不登录的情况下访问网站进行测试,是否有任何推荐的方法?非常感谢。

共有2个答案

钮实
2023-03-14

我对硒和cucumber一无所知(但我喜欢cucumber:-)

我来自Selenium for Python。在那里我可以做以下事情:

from selenium import webdriver

profile = webdriver.FirefoxProfile(your_path_to_local_firefox_profile)
# like C:/Users/<USERNAME>/AppData/Roaming/Mozilla/Firefox/Profiles/<PROFILE_FOLDER>
browser = webdriver.Firefox(profile)

那么,现在用“[赢][R]”-

我不知道这是否有用,但我想告诉你。

慕宪
2023-03-14

每个需要用户登录的场景都需要用户登录。这是在集成级别运行的部分成本。然而,登录不应该是一项耗费大量时间的操作,您只需填写两个字段并提交即可。应该需要

现在对于单元测试来说,这一次是巨大的,但是对于联调,它本质上涉及更大的堆栈,并且通常是模拟的人工交互(否则为什么需要用户登录),这一次是整体场景运行时间中相对较小的组成部分。

因为Cucumber是在集成级别工作的,所以最好不要将其用作测试工具,而应该将其用作驱动开发的工具。与编写数千个小断言(就像单元测试时一样)不同,您需要编写更少的大型场景,即每个场景需要做更多的工作。随着每个场景做得更多,每个场景完全独立于任何其他场景的需求也会增加(你做得越多,你就越有可能成为所做其他事情的副作用)。共享会话并试图避免在每个场景之间重置db和会话,结果证明这是一种错误的优化,造成的问题比解决的问题多。

对于一个场景来说,在到达它的时间之前做很多事情是非常好的。例如,设想以下电子商务场景。

场景:重新订购最喜欢的给定我有一个最喜欢的订单当我查看我的订单时,我重新订购了我最喜欢的订单,然后我应该被带到收银台,我最喜欢的物品应该在篮子里

现在很明显,在我重新订购之前,有很多事情需要发生。

  • 我需要注册

当然还有很多其他的事情

  • 需要有产品订购

所有这些都意味着这个场景需要时间来运行,但这没关系,因为您从中获得了很多功能。(很久以前我写过类似的东西时,这个场景运行了1-2秒)。与执行其余设置所需的时间相比,此类场景的登录时间微不足道。

 类似资料:
  • 目前,我创建了一个如下所示的特性文件(在这个示例中,我已经用...删除了数据):

  • 我想自动重试失败的测试,以提高测试的可靠性,类似于 Junit 中的 TestRule,我希望能够灵活地在测试周围插入逻辑,以便实现重试循环: > 我正在使用Cucumber-JVM,需要一个涉及Java或Gradle的解决方案 我通过Gradle javaexec尝试了以下cucumber选项: //--format pretty--format rerun--out tmp/rerun.txt

  • 我尝试在cucumber中执行特性后执行一个脚本来清理数据库。我使用前后挂钩的方式如下: 对于before,我可以避免使用静态变量在每个场景之前调用脚本。但不知道如何为后钩子做: 有没有办法捕获最后一个方案是否已经执行,并且仅在满足该条件时才触发 clearData()?有没有更优雅的方法?

  • 我必须使用Gatling/Scala编写一些测试。在我的具体情况下,我必须使用用户名和密码登录网站(此外还有密钥斗篷安全性)。有一个带有很多用户/密码行的CSV文件,我的目标是使用此CSV文件中的每个用户/密码登录。 问题是我不知道怎么做。我可以用用户名/密码和密钥斗篷的安全令牌登录,只需一个用户。到目前为止还可以,但还不够。以下是我到目前为止所做的。 第一类: 馈线类: 登录名: 如您所见,我在

  • 我正在尝试为meteor应用程序(cucumber testing)的用户登录编写一个功能文件。用户必须填写两个表单(主表单和pin表单)才能成功登录。 我的问题是定义场景,因为有两个表单具有用户的有效/无效输入选项。 我从这个开始,感觉很糟糕。那不是干的尝试。。。 功能:允许用户以应用程序用户的身份登录和注销我想登录和注销,以便证明我的身份并查看数据

  • 在我的功能文件中输入每个场景的实际场景之前,我正在寻找一种方法来获取每个步骤中传递的所有参数。 示例功能文件: 我想得到的参数: 到目前为止我所做的尝试: 我已经尝试使用一个公共挂钩,它将自动用于我的所有场景: 更新1:我想这样做的原因是我想操纵字符串(如果可能的话)。e、 g.“{}”中包含的所有数据将在进入实际场景之前转换为其他数据。