1

我用 WatiN 编写了一个测试,当用 F10 单步执行代码时,测试成功,但是当我从上下文菜单中执行“运行测试”命令时,测试失败。

这是我的测试:

[TestMethod]
[STAThread]
public void Should_show_captcha_after_three_invalid_login_attempts_with_invalid_username()
{
    // Given
    int numberOfLoginAttempts = 3;

    // When
    for (int loginAttempt = 1; loginAttempt <= numberOfLoginAttempts; loginAttempt++)
    {
        EnterUsername(LoginSettings.ValidUserName);
        EnterPassword(loginAttempt.ToString());

        ClickLoginButton();

        // Check we are still on the loginpage
        Assert.IsTrue(_browser.Title.Contains("Inloggen"));
    }

    bool isCaptchaVisible = _browser.Page<LoginPage>().Captcha.Exists;

    // Then
    Assert.IsTrue(isCaptchaVisible);

    // Make sure to clear the login attempts for next test cases
    RemoveLoginAttempts();
}

仅供参考:在数据库中,我们根据用户名跟踪 loginAttempts。当登录尝试次数 > 2 时,将显示验证码。我遇到的问题是DB中的计数器保持1。当我手动单步执行测试时,计数器增加了。

这怎么可能?

4

1 回答 1

2

嗯,你是对的,它必须是时间。然而问题的一部分是这不是单元测试,另一个是你假设在执行另一行测试代码之前已经完成了大量异步工作,这些测试代码是假设它编写的拥有。

例如,登录尝试循环中的计数绝对不是数据库中的计数。一切都是平等的,它应该匹配,但是..

所以对我来说,你应该测试一下登录功能。如果不成功,则登录数据库中的 colunt,如果成功则重置该计数。然后进行另一个测试,以查看当数据库中的登录尝试超过限制时,登录响应会检测到并显示正确的响应。

如果您想加入所有这些以进行端到端/白盒测试。然后应该使用一些描述的自动化测试。

我怀疑 Windows、浏览器、您的网络服务器甚至您的 dbms 都没有时间来完成第一次登录尝试的处理,在您排队另外两个,然后完成测试之前。而在调试模式下,在您逐步完成时,他们有足够的时间。

于 2012-10-03T11:20:37.700 回答