0

Citrus Frameworkで IT テストを作成しています。サーバーへの呼び出しが 2 つあります。1 つはユーザーを作成するため、もう 1 つはそのユーザーで何らかの操作を実行するためです。

問題: 2 番目の呼び出しの要求に入れるために、文字列ではないユーザー作成要求からの値が必要です。値の抽出:

new SoapActionBuilder()
         .client(webServiceClient)
         .receive()
         .namespace("ns", MY_NAMESPACE)
         .extractFromPayload("//ns:someId", "someId")

そして、このsomeIdを使用して次のリクエストを作成する必要があります。文字列の場合は次のようになります。

request.setSomeId("${someId}");

しかし、これは Long であるため、キャストを実行しても機能しません (Citrus は後でその値を解決し、その瞬間に Long#valueOf が実行されます)。

request.setSomeId(Long.valueOf("${someId}"));

その変数を簡単にキャストする方法はありますか (おそらく抽出時)?

私は JavaAction でそれを行うことができましたが、定期的に使用するには非常に奇妙です (3 行と新しいメソッドが必要です)。それは次のようなものです:

public void test() {
    ...
    action(new JavaActionBuilder(new JavaAction().setInstance(this))
            .method("setSomeId")
            .methodArgs(request, "${someId}"));

    ...
}
public void setSomeId(Request request, String someId) {
    request.setSomeId(Long.valueOf(someId));
}
4

1 に答える 1

0

TestDesigner でテスト変数オブジェクトにアクセスする最善の方法は、テスト アクションで行うことです。Citrus テスト デザイナーには、完全なテスト ケースを構築する設計時間があります。後で実行時にテストが実行され、XPath 式がテスト変数に評価されます。したがって、次のような新しいテスト アクションを追加できます。

action(new AbstractTestAction() {
    @Override
    public void doExecute(TestContext context) {
        Long someId = Long.valueOf(context.getVariable("someId"));
        // do something with someId
    }
}

それとは対照的に、個別の設計時間を持たない Citrus TestRunner を使用できます。ただし、変数を long 値として読み取るには、Citrus TestContext にアクセスする必要があります。

于 2016-10-20T06:54:33.190 に答える