2017-02-23 7 views
2

私は、開発組織内での機能/統合テストにキュウバーを使用するようパイロットしており、CitrusにAPIテスト用の標準接着剤を使用しています。私が遭遇したハードルは、シナリオの変数を指定してREST URLを動的に変更する方法です。この機能はJava DSLに存在するようですが、キュウリのステップでは公開されていません。 Citrus-http:clientにシステムプロパティのプレースホルダを設定することはできますが、アプリケーションコンテキストがSpringによってロードされたときにこれらを解決する必要があることは明らかです。REST API Citrus/Cucumberでテストする

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

サービスのホスト名とポートがまだで設定することができます。シナリオで

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}" 

、その後:私は私のバックグラウンドメッセージ定義に行うことができるようにしたいことは何かに似ていますアプリケーションコンテキスト、およびその値に追加された構築されたURIを使用してメソッドのターゲットを作成します(この場合GET、私は指定しませんでしたが、追加する必要がある別のものかもしれません)。それは合理的なようですか?明らかに、私はこのために自分自身の糊を書くことができましたが、そのルートに行く前にかなり明白なRESTシナリオのように見えているもののために、すぐに使える機能があるかどうかを見たいと思っていました。私はキュウリの統合がかなり最近(2.6から)であることを理解していますので、まだ成熟しているかもしれません。これは、私は歓迎されている場合は助けに興味がある分野である...

おかげ

+0

あなたは右シトラスのHTTPのデフォルトのグルーコードはここに改善されるべきです。実際、これはあなたが言ったように、まだ成熟しています。これまでは、メッセージにCitrusの内部ヘッダー(citrus_http_methodとcitrus_http_request_uri)を設定する必要がありました。使いやすさを向上させるためにここで手伝っていただきたい場合は、大歓迎です! –

答えて

-3

あなたはツールを評価しているので、あなたはKarateを見てとることができ、そしてそれは実際にもキュウリに基づいています。 (免責事項:私は開発者です)。

空手は設定変数を注入する非常に柔軟な方法を持っており、式を使って任意のHTTPアスペクト(パス、URL、パラメータなど)を設定することができ、探しているものを正確に解決できると思います。

+2

私は空手、ピーターを見ました。それはいくつかの素晴らしい機能を提供するように見えます。私にとっての欠点は、それがHTTP固有であることです。私たちは、他のメッセージトランスポート(MQ for one)を含むレガシー環境を持っています。シトラスはより包括的なものです。ポインタありがとう! –

+0

@JimCakalic - 本当にありがとうございます。他の人の利益のために、KarateはカスタムJavaコードをシームレスに呼び出すことができるので、あなたの統合の大部分がHTTPなら、それはまだまだ良いものです。 –

+1

シトラスはHttpテストを書くために鮮やかなキュウリBDD DSLを提供しています。詳細はhttp://www.citrusframework.org/reference/html/index.html#http-stepsを参照してください。シトラスは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以降、Http経由でメッセージを送受信するためのすばらしいアクセスを提供するデフォルトのREST CucumberステップAPIがあります。だから、

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

これを行うために見つけた別の方法は、インスタンス化されたDynamicEndpointUriResolverを参照するエンドポイントリゾルバを使ってcitrus-context.xmlにhttpエンドポイントを定義することでしたベースパスのdefaultEndpointUriプロパティ値を使用し、フィーチャファイル内のメッセージ定義でcitrus_request_pathヘッダを使用して、残りのリソースパスとパスパラメータを追加します。 –

関連する問題