3

所以在我的应用程序中,我有一个网格,其中包含注册到站点的所有用户的列表。现在我想使用 specflow 和 WatiN 对其进行测试。

我想出了以下场景:

Scenario: List of users
    Given I am logged in as "Admin" user
    And There exists following users
        | Username | First name | Last Name | Registration date |
        | alice    | Alice      | LAlice    | 2013-10-28        |
        | bob      | Bob        | LBob      | 2013-10-27        |
    When I go to all users page
    Then There should be following users in table
        | Username | First name | Last Name | Registration date |
        | alice    | Alice      | LAlice    | 2013-10-28        |
        | bob      | Bob        | LBob      | 2013-10-27        |

问题是该表跨步骤重复,我不确定这是否是正确的方法。有没有更好的方法来测试数据是否加载到网格中?

4

2 回答 2

4

您可以以不同的方式进行此测试,尽管虽然以下方法将从您的场景中删除重复数据,但它不一定更有效,因为测试将单独检查每个用户。

您可以做的是重新编写测试以利用 Specflow 的Scenario Outline功能。然后,如果您要重写您的场景如下,您只需定义一次用户数据:

Scenario Outline: List of users
 Given I am logged in as "Admin" user
 And There exists <Username> with <First name> <Last Name> and <Registration date>
 When I go to all users page
 Then There should be <Username> with <First name> <Last Name> and <Registration date>

   examples:
    | Username | First name | Last Name | Registration date |
    | alice    | Alice      | LAlice    | 2013-10-28        |
    | bob      | Bob        | LBob      | 2013-10-27        |
于 2013-10-29T23:36:11.873 回答
1

为了检查我是否正确理解了问题,您担心的是您在一个场景的 Given 和 Then 步骤中重复了表的定义(即,您没有运行 100 个都需要设置相同表的类似场景)。

看起来你所拥有的一切都很好。

考虑一下如果 UI 需要进行少量数据转换会发生什么。例如

Given I am logged in as "Admin" user
And There exists following users
    | Username | First name | Last Name | Registration date |
    | alice    | Alice      | Wonderland| 2013-10-28        |
    | bob      | Bobby      | Tables    | 2013-10-27        |
When I go to all users page
Then There should be following users in table
    | Username | Full Name        | Registration date |
    | alice    | Alice Wonderland | 2013-10-28        |
    | bob      | Bobby Tables     | 2013-10-27        |

这种情况很清楚,您无法在此处节省任何空间。

通过准确地重复表格,就像您所做的那样,您在测试/实时文档中清楚地表明您在页面上看到的内容应该与内存中的数据表示完全匹配。这值得在测试中表达出来。

可以节省一些空间的其他选项:

Given I am logged in as "Admin" user
And there exists the following users
    | Username | First name | Last Name | Registration date |
    | alice    | Alice      | LAlice    | 2013-10-28        |
    | bob      | Bob        | LBob      | 2013-10-27        |
When I go to all users page
Then I should be able to see all the users

这不是很清楚,需要设置 Then 步骤以与 Given 步骤共享数据,或者实际查询模拟数据上下文本身(一个非常糟糕的计划,因为测试可能由于错误的原因通过)。

如果您询问是否有任何行 C++ 的#define关键字来设置可重用的多行字符串 const - 据我所知,没有,如果有,出于上述清楚的原因,您不应该使用它。

总之 - 我喜欢你的测试方式。:)

----编辑----事后思考:

测试失败的原因只有一个。可以说,您的测试是在测试“表格数据完全正确”。

但有时你只是想测试一些更简单的东西。例如

Then user 'alice' should appear in the users table
于 2013-10-28T10:50:49.287 回答