Automated tests 黄瓜复杂场景的优化
我一直在从事一个自动化项目,我必须为搜索过滤器编写cucumber测试。搜索过滤器在参数嵌套的地方动态工作-下一个参数基于上一个参数填充,例如,在选择“订阅者”时,下拉列表中的下一个参数是“名称”、“城市”、“网络”。同样,在选择“服务台”时,后续下拉列表中的参数为“状态”、“票号”、“受让人”。我正在使用Automated tests 黄瓜复杂场景的优化,automated-tests,cucumber,bdd,Automated Tests,Cucumber,Bdd,我一直在从事一个自动化项目,我必须为搜索过滤器编写cucumber测试。搜索过滤器在参数嵌套的地方动态工作-下一个参数基于上一个参数填充,例如,在选择“订阅者”时,下拉列表中的下一个参数是“名称”、“城市”、“网络”。同样,在选择“服务台”时,后续下拉列表中的参数为“状态”、“票号”、“受让人”。我正在使用场景大纲,如下所示: Scenario Outline: As a user, I can search records Given I am on search page Whe
场景大纲
,如下所示:
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_定义
谢谢如果您确实需要保留项目的顺序,请使用数据表而不是场景大纲
场景大纲是多个场景的简写符号。不能保证每个场景的执行。或者至少假设一个特定的执行命令是错误的。如果使用列表作为参数,则数据表中项目的顺序不会改变,因此在您的情况下更安全。Cucumber的一个常见错误是使用场景大纲和示例表进行某种半穷举测试。这往往隐藏了许多关于正在开发的功能的有趣的东西 我将开始为您正在使用的搜索编写单一功能,并探索这些搜索是什么以及它们为什么重要。因此,如果我们从你的第一个开始,我们得到 注意:鉴于我正在搜索,以下所有内容均假定为后台步骤
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
现在我不知道这是否是你想要做的,但这是你当前的场景正在做的。但是,由于您使用的是大纲和示例表,因此无法看到这一点。您有一个下拉列表和嵌套过滤器,这是一个实现细节,它描述了用户如何尝试实现他们想要实现的目标 如果您将尝试执行的操作看作是系统行为的示例,而不是测试,那么可能会更容易。你不是在寻找详尽无遗的东西。你还希望你的场景是具体的,这样你就可以用真实的数据和具体的例子来说明它们。如果您通常有一些典型的可用数据,那么使用后台设置是一件完美的事情 例如,我可能会有这样的场景:
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进行回归。这可能会有所帮助,但如果你试图涵盖每一个案例,场景将很快变得缓慢且无法维护。在适当的情况下委托他人进行集成和单元测试(请参阅“测试金字塔”)。感谢Thomas的反馈。执行顺序并不重要,但是的,我肯定不能在行的完整性上妥协。我将尝试使用datatable,因为我以前从未使用过它。似乎您没有理解我试图解决的问题。我有一个复杂的过滤器,它使用不同搜索参数的组合,这些参数根据以前的值填充在过滤器下拉列表中,例如,选择订户在随后的搜索过滤器下拉列表中显示姓名、城市和网络。通过选择此组合,我可以在需要验证的搜索记录类别中执行搜索。我更同意托马斯使用数据表的解决方案。谢谢你的输入,我大致了解你想做什么。似乎您正试图使用Cucumber对您的过滤器组合进行详尽的测试,这不是Cucumber的良好用途。更好地使用Cucumber是证明过滤器中每个单独参数的需要,并探索为什么需要这些过滤器,这最好在单独的场景中完成。要彻底测试搜索过滤器组合,您应该编写一个单元测试,或者不必麻烦,因为您可能会重复搜索工具已经有过的测试。