Automated tests 黄瓜复杂场景的优化

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

我一直在从事一个自动化项目,我必须为搜索过滤器编写cucumber测试。搜索过滤器在参数嵌套的地方动态工作-下一个参数基于上一个参数填充,例如,在选择“订阅者”时,下拉列表中的下一个参数是“名称”、“城市”、“网络”。同样,在选择“服务台”时,后续下拉列表中的参数为“状态”、“票号”、“受让人”。我正在使用
场景大纲
,如下所示:

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是证明过滤器中每个单独参数的需要,并探索为什么需要这些过滤器,这最好在单独的场景中完成。要彻底测试搜索过滤器组合,您应该编写一个单元测试,或者不必麻烦,因为您可能会重复搜索工具已经有过的测试。