我们正在应用BDD并使用SpecFlow和Selenium。验收标准在Gherkin中规定。
我对Given条款有疑问。
一个例子可能是......
因此,对于'鉴于我在订单详情页面',我们必须登录并准备好提交订单。但是我们如何达到这一点呢?
如果我们已经有相关的现有SpecFlow步骤,我们可以使用这些(通过Selenium)到达正确的位置 - 就像这样......
我们甚至可以将步骤代码中的所有步骤放在“鉴于我在订单详情页面上”
下但是我们是否有权使用Selenium来实现Given?或者我们应该找到一些方法来设置会话/数据库中的所有相关状态/数据而不通过UI?
我怀疑这里没有对错。我不得不说它对我们来说非常好,但我们一直在寻求改进我们的方法。因此,非常有兴趣听取任何有实际经验的人的意见。
我希望Stack Overflow是正确的论坛(不禁认为不是 - 如果是这样,请不要让我失望!)...
答案 0 :(得分:5)
您可以从步骤定义中调用其他步骤
[Given(@"I am on the order details page ")]
public void GivenIAmOnTheOrderDetailsPage()
{
Given("I am a registered user");
And("I am on the login page");
// so on
}
答案 1 :(得分:4)
我假设您正在执行集成测试,因此访问数据库是有意义的。
Selenium自动化ui测试 - 我不会用它来设置你的数据,因为那时对ui的更改会破坏真正应该依赖于初始有效订单状态的测试。
执行代码可能需要执行某些步骤 - 例如登录...但它们实际上并不是您在此测试中测试的内容。您是否考虑过使用Background标签进行设置?
Feature: Order Details Page
As a customer ...
I want to ...
So that ...
Background:
#set up user authentication status
Given I am logged in
#set up order status to be consistent with this page
And I have an order ready for submission
Scenario: I can submit my order
...etc...
Scenario: I can cancel my order
...etc...
使用这种模式复杂"我在订单页面"分为多个设置有效状态的后台步骤,现在功能文件可以引用该页面上的多个操作而不会重复。
我认为您为集成测试设置数据的方式取决于您。但我觉得在正确的状态下构建记录更清晰。
避免I log in using my registered username and password
,而只是直接使用I am logged in
设置身份验证状态。同样设置订单 - 不要依赖您未经过测试的生产代码,否则您的测试将在错误的情况下失败。
您可以重复使用给定的步骤 - 但它们不应该依赖于生产代码。