Testing 黄瓜场景-正确的场景

Testing 黄瓜场景-正确的场景,testing,cucumber,bdd,Testing,Cucumber,Bdd,我正在努力改进我的黄瓜场景(BDD) 假设我们有一个网站,可以有3种状态,基于这种状态,它在页面中有不同的web元素 您将如何编写cucumber场景,使其尽可能接近BDD方法,尽可能简单易懂 目前我有: Scenario Outline: View page in <PAGE STATE> state Given I opened page in <PAGE STATE> state Then I should see "<AVAILABLE

我正在努力改进我的黄瓜场景(BDD)

假设我们有一个网站,可以有3种状态,基于这种状态,它在页面中有不同的web元素

您将如何编写cucumber场景,使其尽可能接近BDD方法,尽可能简单易懂

目前我有:

  Scenario Outline: View page in <PAGE STATE> state
    Given I opened page in <PAGE STATE> state
    Then I should see "<AVAILABLE ELEMENTS>
    Examples:
      | PAGE STATE | AVAILABLE ELEMENTS                                         |
      | State1     | Value input, Default slider, Active slider,                |
      | State2     | Value input, Default slider, Active slider, Type dropdown  |
      | State3     | Value input, Default slider, Active slider, Image uploader |
场景大纲:查看处于状态的页面
假设我在状态中打开了页面
那我该看看了”
示例:
|页面状态|可用元素|
|状态1 |值输入,默认滑块,活动滑块|
|State2 |值输入,默认滑块,活动滑块,类型下拉列表|
|State3 |值输入、默认滑块、活动滑块、图像上传器|

我不建议为所有页面状态提供场景大纲。您希望每个场景都紧紧关注您正在声明的内容。例如,图像上载程序应该是自己的场景:

Scenario: Users can upload an image when things are foobarred
    # One or more `Given` steps to put the system into the correct state
    Given a foo exists
    And bar has happened
    And a baz has been foobarred
    When I am viewing the page
    Then I should be able to upload an image
以及做出断言的示例步骤:

[然后(@“我(应该)不能)上传图像”)]
public void ThenIShouldBeAbleToUploadAnImage(字符串断言)
{
bool isFound=false;
尝试
{
var元素=driver.FindElement(By.Css(“input[type='file']”);
isFound=true;
}
捕获(无接触元素异常)
{
//无所事事
}
捕获(WebDriverTimeoutException)
{
//无所事事
}
如果(断言==“应该”)
{
//断言isFound为true
}
其他的
{
//断言isFound为false
}
}
场景名称清楚地说明了一个狭窄的测试用例。页面的每个状态都在该场景的
给定步骤中明确定义。它也只有一个断言,因此该场景失败的原因只有一个(图像上载字段不存在)

您希望您的场景集中在单个行为上。您的步骤不应该描述页面或屏幕的技术细节,而应该描述用户正在做什么。您不应该断言上载字段是可见的。您应该断言您能够上载图像,并让步骤定义负责查找i法师上传字段


有关如何编写描述行为的好步骤,而不是一步一步完成任务的过程的更多建议,请参阅。

我不建议为所有页面状态提供场景大纲。您希望每个场景都紧紧关注您正在声明的内容。例如,图像上载器应该是自己的场景:

Scenario: Users can upload an image when things are foobarred
    # One or more `Given` steps to put the system into the correct state
    Given a foo exists
    And bar has happened
    And a baz has been foobarred
    When I am viewing the page
    Then I should be able to upload an image
以及做出断言的示例步骤:

[然后(@“我(应该)不能)上传图像”)]
public void ThenIShouldBeAbleToUploadAnImage(字符串断言)
{
bool isFound=false;
尝试
{
var元素=driver.FindElement(By.Css(“input[type='file']”);
isFound=true;
}
捕获(无接触元素异常)
{
//无所事事
}
捕获(WebDriverTimeoutException)
{
//无所事事
}
如果(断言==“应该”)
{
//断言isFound为true
}
其他的
{
//断言isFound为false
}
}
场景名称清楚地说明了一个狭窄的测试用例。页面的每个状态都在该场景的
给定步骤中明确定义。它也只有一个断言,因此该场景失败的原因只有一个(图像上载字段不存在)

您希望您的场景集中在单个行为上。您的步骤不应该描述页面或屏幕的技术细节,而应该描述用户正在做什么。您不应该断言上载字段是可见的。您应该断言您能够上载图像,并让步骤定义负责查找i法师上传字段


有关如何编写描述行为的好步骤,而不是一步一步完成任务的过程的更多建议,请参阅。

将列名更改为
字段
,您的步骤应该是
,然后我应该看到““字段
。相应地更新步骤定义。将列名更改为
字段
,步骤应为
,然后我将看到“”字段
。相应地更新步骤定义。感谢您的宝贵意见,这非常有帮助。在这次谈话之外,我们的结论是Cumber不适合这种测试,我们需要检查页面是否包含所有web元素,而Cumber的重点是现在已经清楚的行为。您建议如何处理这两种类型的测试?Regards@Matthewek:您仍然可以用cucumber编写这些类型的测试,但是我会避开像
这样的步骤我不应该看到“X”字段
——这些步骤的术语更侧重于技术或基于用户界面。尝试描述捕获业务用例或业务流程的步骤。即便如此,还是要用实用主义来缓和这种情绪。有时候你只需要知道屏幕上有愚蠢的元素。谢谢你的宝贵意见,这很有帮助。在这次谈话之外,我们的结论是Cumber不适合这种测试,我们需要检查页面是否包含所有web元素,而Cumber的重点是现在已经清楚的行为。您建议如何处理这两种类型的测试?Regards@Matthewek:您仍然可以用cucumber编写这些类型的测试,但是我会避开像
这样的步骤我不应该看到“X”字段
——这些步骤的术语更侧重于技术或基于用户界面。尝试描述捕获业务用例或业务流程的步骤。即便如此,还是要用实用主义来缓和这种情绪。有时候你只需要知道屏幕上有愚蠢的元素。