Ruby 在一个场景中,我如何告诉我的测试从一组指定的可能步骤中随机选择一个步骤?

Ruby 在一个场景中,我如何告诉我的测试从一组指定的可能步骤中随机选择一个步骤?,ruby,selenium-webdriver,cucumber,capybara,Ruby,Selenium Webdriver,Cucumber,Capybara,我有很多步骤,每个步骤都会单击一个按钮,对应于许多可能的行为之一。我正在寻找一种方法,告诉我的场景从一组步骤中随机选择一个步骤。以下是步骤的内容: I click on 'Taking photos' on <device> I click on 'Listening to music' on <device> I click on 'Being productive' on <device> I click on 'Social media' on <

我有很多步骤,每个步骤都会单击一个按钮,对应于许多可能的行为之一。我正在寻找一种方法,告诉我的场景从一组步骤中随机选择一个步骤。以下是步骤的内容:

I click on 'Taking photos' on <device>
I click on 'Listening to music' on <device>
I click on 'Being productive' on <device>
I click on 'Social media' on <device>
I click on 'Gaming' on <device>
I click on 'Watching videos' on <device>
因此,当我运行我的场景时,我想让它阅读如下内容:

Given   I set the viewport to <device>
When    I go to the homepage on <device>
And     I click on Get started on <device>
And     <random step from the above set of steps>

理想情况下,有一种方法可以防止它重复使用本次会话中已经使用过的步骤。我不知道如何着手实施这样的东西。任何帮助都将不胜感激!谢谢大家!

我认为你是在向后看,而不是把你的目标步骤看作6个不同的步骤,它实际上是一个步骤。尽管如此,无论如何,这个解决方案应该是一样的

I click on '<button/tab/whatevs>' on <device>
现在有另一个场景处理随机调用

And I randomly click on 3 to 5 of the following items on <device>:
 | item                 |
 | 'Taking photos'      |
 | 'Listening to music' |
 | 'Watching videos'    |
 | 'Being productive'   |
 | 'Checking email'     |

The step def for these would look something like:

When /I randomly click on 3 to 5 of the following behaviors on <device>:/ do |min, max, device, items|
  num_clicks = rand(min..max) # get your random number of clicks in the range
  random_behaviors = items.sample(num_clicks) # use sample to pull your random amount (maybe need to massage items as it will be a cucumber table and I don't know if it answers to sample)
  random_behaviors.each do |behavior|
    step %{
      I click on '#{behavior}' on #{device}
    }
  end
end
额外好处:查看关于在场景之间共享数据表的问题。我想这会让你把你的12项配置藏在某个地方。

Cucumber并不是进行详尽测试的正确工具,因此如果您考虑对所有可能的操作组合进行测试,您应该考虑用编程语言编写一个较低级别的测试

如果您按预期使用Cucumber,则可以驱动此应用程序的开发。您可能可以使用非常简单的场景来达到您希望进行更详尽测试的目的。也许像

Given I am on my ipad
When I make some choices
Then I should see a recommendation
如果您解释了用户做出这些选择的“原因”,这将得到改进,也许可以通过命名选择集,例如

When I make some lifestyle choices
When I choose things I like to do
并对建议做同样的事情

您可以通过在步骤定义或步骤定义调用的helper方法中执行较低级别的编程来实现类似的步骤。在这里,因为您使用的是编程语言,所以您可以轻松地执行诸如随机化之类的操作


当你有了某种能抓住你想要做什么的商业想法的东西时,你就可以使用TDD和单元测试来驱动一些事情,比如确保做出“正确”的建议。

这个场景的目标是什么?不太清楚。是否要以随机顺序执行同一场景中的所有步骤。或者在一系列场景中执行一个步骤?我不想在同一个场景中执行所有步骤。我希望它足够灵活,可以在一个场景中运行3个步骤,然后在另一个结构相同的场景中运行4个步骤。我只是不知道如何开始实现逻辑,让它从一个可能的步骤池中随机选择。我以前没有想过这样做。这是有希望的,但这仍然需要我口述到底要点击哪些按钮以及按什么顺序。我想随机选择这些按钮的原因是,在选择3个或更多这些行为按钮后,您可以进入结果页面,该页面根据输入的内容显示推荐项目的列表。总共有12个行为,并且至少需要选择3个才能进入结果。因此,用户可以选择3到12个行为之间的任意位置,这将影响结果列表。甚至选择行为的顺序也会影响结果。为了广泛测试结果的准确性,我想找到一种方法来随机选择测试过程中选择的行为和数量。更新答案以更好地反映您的情况。还共享了一个链接,该链接显示了跨场景共享数据表的方法。