Testing 测试:如何处理没有';不适用于一个测试?

Testing 测试:如何处理没有';不适用于一个测试?,testing,selenium,Testing,Selenium,我注意到我的几个组织得很干净的Selenium测试类出现了一个问题(尽管这个问题同样适用于单元测试或其他特性/验收测试)。我将有一系列测试,这些测试都在逻辑上分组在一起: 使用有效密码登录 使用有效密码登录并转到页面Foo 使用有效密码登录并进入页面栏 使用有效密码登录,然后注销 等等 所有这些测试都有“登录”作为其一部分,因此我将其添加到安装方法中: self.login("fake@example.com", "testuser", "testpassword") 但我需要在套件中再添加一

我注意到我的几个组织得很干净的Selenium测试类出现了一个问题(尽管这个问题同样适用于单元测试或其他特性/验收测试)。我将有一系列测试,这些测试都在逻辑上分组在一起:

  • 使用有效密码登录
  • 使用有效密码登录并转到页面Foo
  • 使用有效密码登录并进入页面栏
  • 使用有效密码登录,然后注销
  • 等等

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

    self.login("fake@example.com", "testuser", "testpassword")
    
    但我需要在套件中再添加一个测试:

  • 无法使用无效密码登录
  • 然后我不确定该做什么,因为该测试与其他测试的登录操作不同

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

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

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

    • 保留设置逻辑,但在设置中添加一行,以便在我们进行最后一次测试时跳过登录(即,如果self.
      。\u testMethodName==“last test”…
      ,但这让人感觉不舒服)

    • 将登录从设置中删除(但是,我在套件中的每个其他测试中都有登录行,这实际上不会向测试添加任何内容)


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

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

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


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

    您应该使用具有无效凭证的不同登录来覆盖您的设置。您还可能会争辩是否需要另一个套件/类?我想我选择了不好的示例;我试图说明一个普遍的问题,但听起来你好像被我的具体案例困住了。忘记登录测试。假设我有5个测试可以做与foo相关的事情,但是其中一个需要以不同的用户身份登录。现在,我是将最后一个测试放在不同的套件中,还是在我的设置中使用(hacky)逻辑仅作为该测试的不同用户登录,还是将登录从设置中删除,或者…?在这种情况下,登录可以从设置中分组,因为即使您需要多几个用户登录才能执行同一组测试,这将更容易处理。选择不同的套房可能不是个好主意。