【问题标题】:Is it a bad practice to have very long Mocha test?进行很长的摩卡测试是一种不好的做法吗?
【发布时间】:2017-07-27 07:25:43
【问题描述】:

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

  1. 用户注册
  2. 用户登录
  3. 用户发表文章
  4. 用户编辑该文章

如果发现任何错误,我没想到会继续进行其他测试。所以,似乎我应该将以上所有内容放在一个 it 块中。但是当然这会使块很长,我必须设置一个很大的超时,期待很长的完成时间等等。

这是一种不好的做法吗?

【问题讨论】:

    标签: selenium testing mocha.js


    【解决方案1】:

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

    独立的、可重复的测试
    看来您已经在使用一种有趣的验收测试模式。 在今年(2017 年)Craft Conference 的演讲中,Dave Farley 解释了编写可以无限次重复的测试的想法,因为每次执行都是以新创建的用户的名义进行的。

    这是解决“数据库恢复”问题的一种有趣方法,我看到许多项目在 CI / CD 工作流程中都遇到了这种问题。它不必恢复。它可能会重新设置为一个通用状态,但每个测试都会为所有必需的元素提供一个新的 id。例如,第一次运行测试使用 userid1234 执行,下一次将使用 userid1235。

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

    传统的思想流派是独立进行注册、登录和功能测试(好吧,天真地独立思考)。代价是,如果注册失败,将无法进行更多测试。

    上述关于验收测试的视频链接:

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

    页面对象

    所以,看来我应该将以上所有内容放在一个单独的 it 块中。

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

        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

    【讨论】:

    • 感谢您的详细回答!是的,我已经采用了这两种模式——为每个测试和页面对象新创建的用户。说到总执行时间,如果它在我的本地主机上,大约需要 18 秒。但是,如果我在测试服务器上对其进行测试,则需要更长的时间,因为它需要下载所有资源。
    猜你喜欢
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    • 2011-10-23
    • 2018-10-03
    相关资源
    最近更新 更多