测试:如何处理不适用于一次测试的设置逻辑?

标签 testing selenium

我注意到一个问题似乎突然出现在我的几个以其他方式组织得井井有条的 Selenium 测试类中(尽管该问题同样适用于单元或其他功能/验收测试)。我会有一堆逻辑上组合在一起的测试:

  1. 使用有效密码登录
  2. 使用有效密码登录并转到页面 Foo
  3. 使用有效密码登录并转到页面栏
  4. 使用有效密码登录,然后退出

等等

所有这些测试都将“登录”作为其中的一部分,因此我将其添加到 setUp 方法中:

self.login("fake@example.com", "testuser", "testpassword")

但随后我需要向套件中再添加一项测试:

  1. 使用无效密码登录失败

然后我不确定该怎么做,因为该测试不会执行与其他测试相同的登录操作。

在这一点上,我有几个不同的选择......没有一个是我真正喜欢的:

  • 为最后一个测试启动一个完整的其他套件(即使它在逻辑上属于其他套件)

  • 保留设置逻辑,但将我最后一次测试注销作为其第一个操作(这导致测试甚至在开始之前进行毫无意义的登录/注销)

  • 保留设置逻辑,但在设置中添加一行以在我们进行最后一次测试时跳过登录(即 if self._testMethodName == "last test"...,但这感觉很糟糕)

  • 从 setUp 中删除登录(但我在套件中的每个其他测试中都有登录行,这并没有真正向测试添加任何内容)

我的问题是:以上哪种方法是“最佳实践”(或者我是否缺少第五个选项,这是真正的最佳实践)?

最佳答案

如果您要测试应用程序的登录页面,那么为什么要将测试放在 setup() 方法中。

我相信 setup 方法用于为您的测试设置环境。例如。打开浏览器,加载网站/应用程序等,

您可以使用不同的测试方法来测试登录页面,您可以传递各种输入来测试它。

关于测试:如何处理不适用于一次测试的设置逻辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24923369/

相关文章:

node.js - 拦截IBM的Watson Botkit中间件进行测试

unit-testing - 测试 FabricClient 对象

java - 只有在我的@Test 通过时才运行@AfterMethod,如果@Test 失败则不运行

java - driver.get 无法在 Selenium Webdriver、Java 中工作

python - python 中的 Selenium 和多处理

Selenium WebDriver 出现错误 :java.net.SocketException:连接重置

php - Codeigniter:如何测试在构造函数中采用 Controller 实例的库?

selenium - Codeception 验收测试在浏览器启动之前运行

ios - 无法在 iOS SDK 上创建 Facebook 测试用户帐户

java - 以自定义方式使用 Allure "Issue"注释(Selenium)