2017-02-23 64 views
2

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

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场景。我了解黄瓜整合相当新近(截至2.6?),因此它可能还在成熟。这是一个领域,我会乐于帮助,如果这是值得欢迎...

感谢

+0

你是对的柑橘中的HTTP默认胶水代码应该在这里得到改善。事实上,如你所说,这仍然是一个成熟的领域。到目前为止,您需要在消息中设置Citrus内部头文件(citrus_http_method和citrus_http_request_uri)。如果你想在这里帮助提高可用性,非常欢迎! –

回答

-3

既然你正在评估的工具,你可以看看Karate,它实际上是基于黄瓜以及。 (免责声明:我是开发者)。

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

+2

我看过空手道,彼得。它看起来像提供了一些很棒的功能。我的缺点是它是HTTP特有的。我们有一个传统的环境,其中包括其他消息传输(MQ为一),看起来像柑橘是一个更全面的适合。感谢指针! –

+0

@JimCakalic - 非常感谢您花时间回复。为了其他人的利益,Karate可以无缝地调用自定义Java代码,因此如果大部分集成是HTTP,它仍然是一个很好的选择。 –

+1

柑橘提供用于编写​​Http测试的出色的Cucumber BDD DSL。详情请参阅http://www.citrusframework.org/reference/html/index.html#http-steps。由于Citrus不仅为Http提供相同的功能,而且为所有其他消息传输提供相同的功能,因此无需切换到Karate。 –

2

你可以在这里使用柑橘内部邮件标题:

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

柑桔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

+0

另一种方法是通过在citrus-context.xml中定义http端点,并使用引用实例化的DynamicEndpointUriResolver的端点解析器使用基本路径的defaultEndpointUri属性值,然后在特征文件的消息定义中使用citrus_request_path头添加剩余资源路径和路径参数。感谢Christoph! –