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

Java Cumber,在所有场景中重复登录步骤,java,c#,selenium,cucumber,gherkin,Java,C#,Selenium,Cucumber,Gherkin,我正在将selenium与cucumber一起使用(使用JAVA,但不太相关) 假设我有以下场景: 特征:示例特征 场景:在给定的网站上执行操作,该网站已打开且 用户输入正确的登录名并传入字段,然后用户按login 然后做一个动作 场景:在给定的网站上执行操作,该网站已打开且 用户输入正确的登录名并传入字段,然后用户按login 然后做动作B 现在,将有数百个场景,网站总是需要登录到网站,所以我假设对于每个测试场景,我必须重复登录步骤(例如,通过后台或在场景挂钩之前) 我一直在读这类测试应该是自

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

假设我有以下场景:

特征:示例特征

场景:在给定的网站上执行操作,该网站已打开且 用户输入正确的登录名并传入字段,然后用户按login
然后做一个动作

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

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

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

说:

特色:一些特色

场景:先登录网站 步骤

场景:执行操作A(当我们已经登录时 步骤

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


但我发现有人说这不是正确的方法,但每次我想执行一些测试场景时,重复登录过程会花费很多时间,在运行许多场景时,每个场景都需要先登录。我在考虑允许不登录就可以访问网站进行测试,有没有推荐的方法?谢谢

我对黄瓜中的硒一无所知(但我喜欢黄瓜:-)

我来自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)
从selenium导入webdriver
profile=webdriver.FirefoxProfile(您的\u路径\u到\u本地\u firefox\u配置文件)
#比如C:/Users//AppData/Roaming/Mozilla/Firefox/Profiles/
browser=webdriver.Firefox(配置文件)
那么,现在使用“[WIN]+[R]”->运行->firefox.exe-p”我可以为Selenium创建一个额外的配置文件,以便在上面的代码中使用它,因此我可以使用Firefox,也可以试用该配置文件。此外,如果您希望自动登录的网站、Cookie&cache等支持,则可能是您不必每次都通过Firefox配置文件登录,而是Firefox每次都会启动我自动登录,因为他存储了登录数据


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

每个需要用户登录的场景都需要用户登录。这是在集成级别运行的成本的一部分。但是,登录不应该是一个昂贵的耗时操作,您只需填写两个字段并提交它们。这应该需要<100ms以处理登录

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

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

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


场景:重新订购收藏夹
因为我有最喜欢的订单
当我查看我的订单时
我重新点了我最喜欢的菜
那么我应该被带到收银台
我最喜欢的东西应该在篮子里

现在很明显,在我重新订购之前,需要做很多事情

  • 我需要注册
  • 我需要至少提前一次订购
  • 我需要选择一个最喜欢的订单
当然还有很多其他的事情,比如

  • 需要订购一些产品

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

感谢您的回复,它实际上为我指明了类似的解决方案,运行一次登录过程,保存cookie,然后在其他场景下加载/使用这些cookie(这样您就可以打开已登录的会话)谢谢