使用Citrus / Cucumber进行REST API测试

时间:2017-02-23 14:07:26

标签: citrus-framework

我正在试用我的开发组织中使用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开始?)所以它可能还在成熟。如果这是值得欢迎的话,这是我有兴趣帮助的领域......

由于

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:-2)

由于您正在评估工具,您是否可以查看enter image description here,它实际上也基于Cucumber。 (免责声明:我是开发者)。

Karate有一种非常灵活的方式来注入配置变量,你可以使用表达式设置任何HTTP方面(路径,网址,参数等),我认为它将解决你正在寻找的内容。