私はCitrusを使用して、URLエンコード後にservice1の入力パラメータがservice2 '入力に渡されるRESTfulサービスを自動化しています。URLEncode用のCitrusフレームワークを使用したJSON応答の解析
以下は、私が試した方法を説明するためのコードスニペットですが、designer.traceVariables()の上にURLEncodeを使用できないことがあります。
レスポンスパラメータをコンテキスト外に渡すことができないという制限があるため、私は以下のような同じGherkinメソッドで定義された複数のsend()、receive()呼び出しを呼び出す必要がありました。 designer.traceVariables()を使用して変数myVar(payLoadから抽出)を印刷できましたが、次のサービスコールに渡すためにさらなる使用のために&を処理できません。
@When("^I call CPAuth service for ChasePay$")
public void i_call_CPAuth_service_for_ChasePay() throws Throwable {
designer.send("CitrusContext")
.messageType(MessageType.JSON)
.header(X_JPMC_CSRF_TOKEN_HEADER, csrfToken)
.header(HTTP.CONTENT_TYPE, APPLICATION_JSON)
.header(COOKIE, ConnRoutePNames.DEFAULT_PROXY + "=" + proxy)
.header("citrus_endpoint_uri", authUrl +"/auth/fcc/login")
.message(new HttpMessage("<large_string=no_issues_here>").method(HttpMethod.POST));
designer.receive("CitrusContext").messageType(MessageType.JSON)
.validate("$.response", "secauth")
.validate("$.newstoken", false)
.validate("$.smtoken", "void")
.extractFromPayload("$.spid", "myVar");
String request = URLEncoder.encode("appStoreBundleId=com.testmerchant.sampleapp&version=APP%2BBUILD%2BVERSION&channelId=MPD&spid=**${myVar}**&type=json&chasePayMerchantId=1390xxx", CharEncoding.UTF_8);
System.out.println("request: "+request);
designer.send("CitrusContext")
.messageType(MessageType.JSON)
.header(X_JPMC_CSRF_TOKEN_HEADER, csrfToken)
.header(HTTP.CONTENT_TYPE, APPLICATION_JSON)
.header(COOKIE, ConnRoutePNames.DEFAULT_PROXY + "=" + proxy)
.header("citrus_endpoint_uri", hostUrl +"/pwc/provisioning/pos/otp/contact/v20160313/list.action")
.message(new HttpMessage(request).method(HttpMethod.POST));
結果:符号化前 :(これは符号化される文字列であるべきである)MSZp2V/czcKsxej + Q04Da/QeVlo = MCwCFAqrBN/6/J8WZENecE7JQlEODnecAhQCcnXGBjMoiQ7deunlyXKacFo/lQの== 符号化後:%の3次元%24 %7BmyVar%7D%26
ご協力いただきありがとうございます。