【问题标题】:Testing: What to do With Setup Logic That Doesn't Apply to One Test?测试:如何处理不适用于一项测试的设置逻辑?
【发布时间】:2014-09-15 09:33:10
【问题描述】:

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

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

等等

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

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

但是我需要在套件中再添加一项测试:

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

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

在这一点上,我有几个不同的选择......我都不喜欢:

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

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

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

  • 从 setUp 中退出登录(但随后我在套件中的所有其他测试中都有登录行,这并没有真正为测试添加任何内容)

我的问题是:上述哪种方法是“最佳实践”(或者是否有我遗漏的第五个选项是真正的最佳实践)?

【问题讨论】:

  • 您应该使用具有无效凭据的其他登录名覆盖您的设置
  • 所以你会主张拥有另一个套件/课程?

标签: testing selenium


【解决方案1】:

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

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

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

【讨论】:

  • 我想我选择了不好的例子;我试图说明一个普遍的问题,但听起来你被我的具体案例所困扰。忘记登录测试。假设我有 5 个测试做与 foo 相关的事情,但其中一个需要以不同的用户身份登录。现在我是将最后一个测试放在不同的套件中,还是在我的 setUp 中使用(hacky)逻辑以仅针对该一个测试的不同用户身份登录,或者我是否将登录从 setUp 中取出,或者.. .?
  • 在这种情况下,登录可以在设置之外进行分组,因为即使您需要更多的用户登录来执行相同的一组测试,它也会更容易处理。选择不同的套房可能不是一个好主意。
猜你喜欢
  • 1970-01-01
  • 2022-09-28
  • 2011-10-07
  • 1970-01-01
  • 2013-01-29
  • 1970-01-01
  • 1970-01-01
  • 2018-06-09
  • 1970-01-01
相关资源
最近更新 更多