我正在研究RSpec烟雾测试。我需要测试的项目进行异步调用,因此我需要在指定的时间后执行一些测试用例。
示例:
describe "Whatever Test Automation" do
context "When logged in .." do
it "does specific things" do
bla bla ..
end
it "does specific things 2" do
bla bla ..
end
end
end
如何在指定的时间后运行第二次测试,比方说20分钟?如果在代码中无法做到这一点,Jenkins中是否有任何配置?
答案 0 :(得分:2)
首先,您必须确保测试订单始终完全相同。 https://www.relishapp.com/rspec/rspec-core/v/3-0/docs/command-line/order
您可以在区块https://www.relishapp.com/rspec/rspec-core/v/3-4/docs/hooks/around-hooks
周围设置睡眠超过20分钟的规格运行是难闻的气味。我会检查在测试期间模拟长过程的选项。另一个好的方向可能是rspec-wait
gem,只要你需要等待断言。
P.S。在Jenkins中,您可以使用rspec /spec/controllers/groups_controller_spec.rb:42
之类的命令每次调用一次测试,每次运行组合一次测试,您可以在运行之间构建任何奇怪的睡眠组合。
答案 1 :(得分:2)
两点:这实际上是一个测试,你需要找到一种方法来减少运行所需的时间。
关于测试结构,您的第二次测试不是真正的独立测试。这取决于第一次试运行。这两个应该写成一个单独的测试。在RSpec中,冒烟测试最好写成feature specs(不是因为Capybara集成,而是因为feature
和scenario
语法在概念上适用于验收测试。在一个场景中拥有多组预期是合适的。所以,作为第一关,我写这个:
feature "Smoke tests" do
context "Logged in" do
scenario "User starts a long-running process" do
# Do whatever starts the process
# Expect the initial (immediate) results of the process
sleep 20 * 60
# Expect the asynchronous results of the process
end
end
end
关于测试运行时,每次对软件版本进行抽烟测试时,必须运行20分钟的单次测试是非常糟糕的。 你可以采取的任何措施来减少20分钟对贵公司来说是一个巨大的好处。我不知道为什么测试你正在测试的过程需要20分钟,但这里有三个注意事项:
如果实际上有20分钟的工作(计算),则不要进行烟雾测试。例如,如果完成流程的时间取决于输入数据的大小,请为其提供最少的数据集。
如果20分钟的一部分只是一个任意延迟,请为特权用户提供一种控制延迟的方法,并在烟雾测试中使用该机制将延迟设置为尽可能小的值,同时仍然作为烟雾测试有效。将该机制添加到生产代码中(而不是像存根那样执行特定于测试的操作),以便冒烟测试仍在测试生产代码。
如果20分钟的一部分只是等待足够长的时间以确保该过程已完成,请通过轮询将其最小化。 uzzer建议的rspec-wait gem就是这种策略的一个很好的例子。如果rspec-wait的等待算法(它只检查每个wait_delay
直到它到达wait_timeout
)你可以编写自己的轮询,这对你来说效果不好。