进行很长时间的Mocha测试是不好的做法?

时间:2017-07-27 07:25:43

标签: selenium testing mocha

进行单元测试时,每个案例都趋于简短且独占。但现在我正在用Selenium编写端到端测试,因此,我有很长的场景,其中包含几个密切相关的步骤,例如:

  1. 用户注册
  2. 用户登录
  3. 用户发表文章
  4. 用户编辑该文章
  5. 如果发现任何错误,我没想到其他测试会继续。所以,似乎我应该将所有上述内容放在一个it块中。但是当然这会让这个块很长,而且我必须设置一个很长的超时,期望很长的完成时间等。

    这是一种不好的做法吗?

1 个答案:

答案 0 :(得分:3)

我想知道这到底有多久了?对于具有适当等待配置的webdriver bot,理想情况下应该在10s以下,这是可以的。 我想提出一些建议。

隔离,可重复的测试
看来你已经在使用一种有趣的验收测试模式。 在他今年(2017年)工艺会议的演讲中,Dave Farley解释了编写可以重复无限次数的测试的想法,因为每次执行都是以新创建的用户的名义进行的。

这是解决" db恢复问题的有趣方法。问题,我看到许多项目在CI / CD工作流程中受到影响。它不需要恢复。它可以被重新命名为一个共同的状态,但是每个测试都会为所有必需的元素提供一个新的id。例如,测试的第一次运行用userid1234执行,下一次运行用userid1235。

因此,有人可能会说你的方法,包括在你的过程中注册,可以帮助你隔离你的执行。我假设需要权衡的是你需要找出你的基础数据(可能是初始数据库状态的一部分)以及添加的内容。

传统的思想流派将独立测试注册,登录和功能(好吧,天真地独立思考)。需要权衡的是,如果注册失败,则不会再进行任何测试。

链接到关于验收测试的讨论视频:

  

http://www.ustream.tv/recorded/102892932

网页对象

  

所以,似乎我应该将所有上述内容放在一个单独的块中。

虽然有些人已经认为它过时,但似乎页面对象模式会停留一段时间。你的'它'块不应该真的那么复杂。在你的测试中,你应该基本上找到正在发生的事情的纯英文描述。

    it('should deny access with wrong creds', function () {
    LoginPage.open();
    LoginPage.login('Luo', 'SuperSecretPwd'); // Use better forms of Auth
    LoginPage.submit();
    expect(LoginPage.flash.getText()).to.contain('Hi Luo!');
});

这个想法基本上是关于如何实现给定页面的任何技术细节(表格与CSS网格等)应该隐藏在这些对象中。 那么你的测试不容易出错,并且只有凡人才能理解。

有关页面对象模式的更多信息:

  

http://webdriver.io/guide/testrunner/pageobjects.html
  https://martinfowler.com/bliki/PageObject.html