2

我正在我的开发组织中试用 Cucumber 进行功能/集成测试,并且一直在使用 Citrus 和它为 API 测试提供的标准胶水。我遇到的障碍是如何动态更改场景中给定变量的 REST URL。该功能似乎存在于 Java DSL 中,但未在 Cucumber 步骤中公开。我可以为 citrus-http:client 配置系统属性的占位符,但显然需要在 Spring 加载应用程序上下文时解决这些问题。我希望在我的后台消息定义中能够做的是:

Given message todoListRequest
    And <todoListRequest> header Content-Type is "application/json"
    And <todoListRequest> header Accept is "application/json"
    And <todoListRequest> uri is "/todo/${item-number}"

然后在一个场景中:

Scenario: Gets expected item for specified item number
    Given variables 
        | item-number | 3 |
  When <todoListClient> sends message <todoListRequest>
  Then <todoListClient> should receive message <todoListResponse>

服务主机名和端口仍然可以在应用程序上下文中配置,并将构造的 URI 附加到该值以创建方法的目标(在这种情况下为 GET,尽管我没有指定,也许这是需要的其他内容添加?)。这看起来合理吗?显然,我可以为此编写自己的胶水,但我想看看是否有一个开箱即用的功能,用于在走这条路之前似乎非常明显的 REST 场景。我知道 Cucumber 集成是相当新的(从 2.6 开始?)所以它可能仍在成熟。如果欢迎,我会在这个领域提供帮助......

谢谢

4

1 回答 1

3

您可以在此处使用 Citrus 内部消息标头:

And <todoListRequest> header citrus_http_method is "POST"
And <todoListRequest> header citrus_http_request_uri is "/todo/${item-number}"

Citrus http 客户端将读取这些特殊标头并在发送消息之前自动删除这些标头。

编辑:由于 Citrus 2.7.1 有一个默认的 REST Cucumber 步骤 API,它提供了通过 Http 发送和接收消息的出色访问。所以你可以写

Given Content-Type: application/json
And Accept: application/json
When send POST /todo/${item-number}
Then receive status 200 OK

在此处阅读有关此内容的更多信息:http ://www.citrusframework.org/reference/html/cucumber.html#http-steps

于 2017-02-27T06:57:38.993 回答