在BDD / gherkin中,如何在可重复使用的后续步骤中使用结果的一部分

时间:2019-12-03 11:17:42

标签: gherkin

我遇到以下重复出现的问题,遵循以下模式:

Feature: api-controller

Scenario: Adding
    Given a live daemon
    When we send a POST request to /api/endpoint/ with data:
      """
      {
         "name": "foo",
      }
      """
    Then the response code should be 200
    And the response should give us a reference UUID as `uuid`
    When we send a GET request to /api/endpoint/`uuid`
    Then the response code should be 200
    ...

问题是,如何将我从第一次调用中获得的uuid传达到后续步骤,并保持可重复使用的步骤,例如通用的When we send a GET request to [parameter1]

我现在通过使用反引号定义变量来在小黄瓜内部实现一种迷你语言,随后的步骤应该可以访问。但是,这感觉就像是有人已经用另一种方式解决了问题,或者被认为是不好的做法,因为我找不到其他这样做的例子。

1 个答案:

答案 0 :(得分:0)

您可以查看qaf webservice support。它提供了request call repository概念,您可以在请求调用中包含参数。

inbuilt steps

say {var-name} is value at jsonpath {jsonpath}
say {var-name} is value at xpath {xpath}
Feature: api-controller

Scenario: Adding
    Given a live daemon
    When user request "request.call1" with {"name": "foo"}
    Then response should have status code 200
    And say "UUID" is value at jsonpath "uuid"
    When user request "request.call2"
    Then response should have status code 200
    ...

此处的所有步骤均可用于qaf webservice support。在上面的示例中,它使用需要在属性文件或xml文件中定义的请求调用request.call1request.call2。以下是xml文件中的示例。

<requests>
  <request>
    <call1>
       <endPoint>/api/endpoint/</endPoint>
       <headers>{'Content-Type': 'application/json'}</headers>
       <method>POST</method>
       <body>{'name': '${name}'}<body>
       <parameters>
       <!--default values of parameters if not provide-->
       {
              'name':'${rnd:aaa}'
       }
       </parameters>
    </call1>
    <call2>
       <endPoint>/api/endpoint/${uuid}</endPoint>
       <headers>{'Content-Type': 'application/json'}</headers>
       <method>GET</method>
    </call2>
  </request>
</requests>

如果要使用黄瓜,可以将其与QAF-cucumber

一起使用