Selenium webdriver 黄瓜-测试原则与速度

Selenium webdriver 黄瓜-测试原则与速度,selenium-webdriver,automation,automated-tests,cucumber,Selenium Webdriver,Automation,Automated Tests,Cucumber,在阅读了许多文章之后,我认为所有Cucumber测试都应该是相互独立和自主的,所以这是我在自动化web应用程序测试时遵循的规则 假设我正在测试具有多个输入字段的网页 目前,对于CRUD操作,我有两种情况: Scenario: Check page display correct data Given: I populate DB with data When: I open the page Then: Page data should match with data from DB

在阅读了许多文章之后,我认为所有Cucumber测试都应该是相互独立和自主的,所以这是我在自动化web应用程序测试时遵循的规则

假设我正在测试具有多个输入字段的网页

目前,对于CRUD操作,我有两种情况:

Scenario: Check page display correct data
  Given: I populate DB with data
  When: I open the page
  Then: Page data should match with data from DB

Scenario: Update page data
  Given: I populate DB with data
  When: I open the page
  And: I update each field with some new data
  When: I press save button to save data
  Then: Page data should match with data from DB
因此,在本例中,我有两个场景检查数据是否正确显示,另一个场景更新数据并检查数据,但由于填充数据库的步骤需要很长时间(1-3秒),我在想,为什么不将这两种类型的场景合并为一种场景,大大缩短执行时间:

Scenario: Update page data
  Given: I populate DB with data
  When: I open the page
  Then: Page data should match with data from DB
  And: I update each field with some new data
  When: I press save button to save data
  Then: Page data should match with data from DB

如您所见,首先我填充数据库,然后检查它是否正确显示,接下来我修改它,然后再次检查,这样我在单个场景中检查了两个CRUD操作(读取和更新),但我相信这是违反原则的。

如果您的测试更关注集成和端到端行为,而不是单元/组件行为(可能就是这样),那么在一个场景中结合两个CRUD操作是完全正确的


当然,你应该总是考虑在一个场景中放太多,而不是把一个特征分割成很多场景。当然,在一个场景中断言不止一件事情的代价是,当一个场景失败时,它可能会迫使您进行更多的调试。因此,这不是原则问题,而是一个有意识的选择,您可能需要根据被测应用程序的速度和稳定性重新考虑。

如果您的测试更侧重于集成和端到端行为,而不是单元/组件行为,那么在一个场景中结合两个CRUD操作是非常好的(可能是这样)


当然,你应该总是考虑在一个场景中放置太多而不是将一个特征分割成很多场景。当然,在一个场景中声明一个以上的事物的权衡是,当场景失败时,它可能迫使你调试更多的内容。因此,它不是关于原则而是一个有意识的CUI。您可能需要根据测试应用程序的速度和稳定性进行重新考虑。

我可以分享一些想法

...
When: I ...
And: I ...
When: ...
...
可以成为

...
When: I ...
And: I ...
And: ...
Then: ...
如果你能把它抽象成一个函数就更好了。这样你就可以看到森林,而不会被长时间的端到端场景淹没

从最终用户的角度考虑BDD过程是很好的

Given: I populate DB with data
通常的用户很少发生这种情况,对吗?除非您介绍一些特定的管理/开发案例。如果您将其作为前提条件,请查看xUnit.DB验证是一个,只是不在框架的最顶层

大大缩短了执行时间


可以通过并行执行您的功能/场景来实现。而不是通过削减测试场景来实现。同样,权衡是有利于有意义的场景。

我可以分享一些想法

...
When: I ...
And: I ...
When: ...
...
可以成为

...
When: I ...
And: I ...
And: ...
Then: ...
如果你能把它抽象成一个函数就更好了。这样你就可以看到森林,而不会被长时间的端到端场景淹没

从最终用户的角度考虑BDD过程是很好的

Given: I populate DB with data
通常的用户很少发生这种情况,对吗?除非您介绍一些特定的管理/开发案例。如果您将其作为前提条件,请查看xUnit.DB验证是一个,只是不在框架的最顶层

大大缩短了执行时间


可以通过并行执行您的功能/方案来实现。而不是通过削减测试方案来实现。同样,折衷方案有利于有意义的方案。

感谢您的宝贵意见。非常乐意帮助谢谢您的宝贵意见。非常乐意帮助