我一直致力于自动化项目,我必须为搜索过滤器编写黄瓜测试。搜索过滤器在嵌套参数的情况下动态工作 - 根据先前的参数填充下一个参数,例如在选择“订户”下拉列表中的下一个参数是“名称”,“城市”,“网络”。同样,在选择“服务台”时,后续下拉列表中的参数为“状态”,“票号”,“受让人”。我正在使用Scenario Outline
,如下所示:
Scenario Outline: As a user, I can search records
Given I am on search page
When I search on "<category>" and "<nestedfilter>"
Then I see records having "<category>" category
Examples:
|category |nestedfilter|
|Subscribers |Name |
|Subscribers |City |
|Subscribers |Network |
|Service Desk|Status |
|Service Desk|Ticket no. |
|Service Desk|Assignee |
过滤器可能更复杂,因为可能有更多基于先前嵌套过滤器的嵌套过滤器。
我需要知道是否有更有效的方法来处理这个问题?例如,将数据表传递给step_definition,我不太确定。
由于
答案 0 :(得分:1)
如果您确实需要保留项目的顺序,请使用数据表而不是场景大纲。
方案大纲是多种方案的简写表示法。不保证每个方案的执行。或者至少假设一个特定的执行顺序是错误的。如果使用List作为参数,则数据表中项目的顺序不会改变,因此在您的情况下更安全。
答案 1 :(得分:0)
Cucumber的一个常见错误是使用Scenario Outline和示例表来进行某种半详尽的测试。这往往会隐藏许多有关正在开发的功能的有趣内容。
我会开始为您正在使用的搜索编写单个功能,并探索这些搜索的内容以及它们的重要性。所以,如果我们从你的第一个开始,我们得到......
注意:以下所有内容均采用后台步骤Given I am searching
When I search on subscribers and name
Then I should see records for subscribers
和第二个
When I search on subscribers and city
Then I should see records for subscribers
现在很明显,这些场景存在严重缺陷,因为两种情况都在寻找相同的结果。
所以你实际测试的是那个
现在你可以重构并获得
When I do a subscriber search
Then I should see city, name, network filters
When I do a subscriber search
Then I should only see subscriber results
注意:由于您已将场景数量从3减少到2,并且必须将搜索次数从3减少到1,因此效率已经提高了。
现在我不知道这是否是您想要做的,但这就是您当前的情况。但是,因为您使用的是大纲和示例表,所以无法看到它。
答案 2 :(得分:0)
您有一个下拉列表和嵌套过滤器的事实是一个实现细节,它描述了用户如何尝试实现他们想要实现的目标。
如果你想到你正在尝试做什么作为系统行为的例子,而不是测试,它可能会更容易。你并不是在寻找详尽无遗的东西。您还希望您的场景具体,以便您使用实际数据和具体示例来说明它们。如果你通常会有一些典型的数据,那么使用Background进行设置是完美的。
例如,我可能会遇到以下情况:
Background:
Given I have subscribers
| Name | City | Network | Status | etc.
| Bob | Rome | ABC | Alive | ...
| Sam | Berlin | ABC | Dead | ...
| Sue | Berlin | DEF | Dead | ...
| Ann | Berlin | DEF | Alive | ...
| Jon | London | DEF | Dead | ...
Scenario: First level search
Given I'm on the search page
When I search for Subscribers who are in Rome
Then I should see Bob
But not Sue or Jon.
Scenario: Second level search
Given I'm on the search page
When I search for Subscribers in Berlin on the ABC network
Then I should see Sam
But not Sue or Ann
etc.
全系统方案应足以了解正在发生的事情。不要使用BDD进行回归。它可以帮助解决这个问题,但如果你试图覆盖每一个案例,情景会很快变得缓慢而且无法维持。在适当情况下委托进行集成和单元测试(参见&#34;测试金字塔&#34;)。