こんにちはチーム、
QAFを使用してAPI自動化を実装しようとしています。
誰かが以下の質問について提案できますか?
-> new RestTestBase()。getWebResource(getBundle()。getString( "ws.endurl"、url)、 "/application.json")で攻撃されました。 * * ->どのGETメソッドを使用しますか?
前もって感謝します!!
よろしく、
プレム
POJOを期待している場合は、そのクラスまたはString.class
または一般的な応答ClientResponse.class
を提供できます。
すぐに使用できる手順については、 ws-supportを使用できます。
返信ありがとうございます!
コードの以下の部分が役立つことを願っています。
内容---->文字列リソース
何ですか---->地図
private static void requestFor(String resource、Map
以下のコード部分で試してみましたが、以下のような例外が発生しています。
スクリプトを試しました:
WebResource webResource = new RestTestBase().getWebResource(getBundle().getString("ws.endurl", url));
webResource.get(ClientResponse.class);
エラー:
javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIXパスの構築に失敗しました:
sun.security.provider.certpath.SunCertPathBuilderException:要求されたターゲットへの有効な認証パスが見つかりません
こんにちは@APrem
これは、HTTPクライアントが証明書を信頼していないようです。
このために-ここからのコードスニペットでRestClientFactoryを拡張する必要があります:
https://gist.github.com/outbounder/1069465
したがって、拡張クラスは次のようになり、これを任意のJavaパッケージ内に配置できます。
`パッケージ
インポートcom.qmetry.qaf.automation.ws.rest.RestClientFactory;
インポートcom.sun.jersey.api.client.Client;
インポートcom.sun.jersey.api.client.config.ClientConfig;
インポートcom.sun.jersey.api.client.config.DefaultClientConfig;
インポートcom.sun.jersey.client.urlconnection.HTTPSProperties;
importjavax.net.ssl。*;
インポートjava.security.SecureRandom;
インポートjava.security.cert.CertificateException;
java.security.cert.X509Certificateをインポートします。
パブリッククラスClientHelperはRestClientFactoryを拡張します{
public static ClientConfig configureClient() {
TrustManager[ ] certs = new TrustManager[ ] {
new X509TrustManager() {
<strong i="24">@Override</strong>
public X509Certificate[] getAcceptedIssuers() {
return null;
}
<strong i="25">@Override</strong>
public void checkServerTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
}
<strong i="26">@Override</strong>
public void checkClientTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
}
}
};
SSLContext ctx = null;
try {
ctx = SSLContext.getInstance("TLS");
ctx.init(null, certs, new SecureRandom());
} catch (java.security.GeneralSecurityException ex) {
}
HttpsURLConnection.setDefaultSSLSocketFactory(ctx.getSocketFactory());
ClientConfig config = new DefaultClientConfig();
try {
config.getProperties().put(HTTPSProperties.PROPERTY_HTTPS_PROPERTIES, new HTTPSProperties(
new HostnameVerifier() {
<strong i="27">@Override</strong>
public boolean verify(String hostname, SSLSession session) {
return true;
}
},
ctx
));
} catch(Exception e) {
}
return config;
}
<strong i="28">@Override</strong>
protected Client createClient() {
return Client.create(ClientHelper.configureClient());
}
} `
これを行ったら、このクラスをアプリケーションプロパティ内に登録する必要があります。
rest.client.impl=<Your Package Name>.ClientHelper
こんにちはプレム、
上記のコメントが問題の解決に役立つことを願っています。
質問をQAFタグ付きのstackoverflowやグループでリンクされているコミュニティサポートフォーラムに移動してください。 あなたがstackoverflowで尋ねているとき、迅速な応答を得るためにタグqaf
を追加してください。
ありがとう、
Chirag
返信ありがとうございます。
ClientHelperクラスが追加され、応答を確認できるようになりました。
ただし、.getWebResource(getBundle()。getString( "ws.endurl"、url));内で指定されたURL。 APIキーを持っています。 したがって、疑問符記号「?」 URLにあります。 このコードは「?」を取っています。 「%3F」として、コンソールを以下のように出力します。
予想: https : //sample.url.com/xxxxxxxxxxxxx?apikey = l7xxfc8df89f313944a89e280481e09bb411
実際: https : //sample.url.com/xxxxxxxxxxxxx%3Fapikey=l7xxfc8df89f313944a89e280481e09bb411
この変換のため、出力でエラーが発生します。
コンソール出力:
1 *クライアントのアウトバウンドリクエスト
1 >> GET https://sample.url.com/xxxxxxxxxxxxx%3Fapikey=l7xxfc8df89f313944a89e280481e09bb411
1 *受信開始:87
1 *受信:デルタ:87バイト:87
終了1 *終了
1 *クライアントのインバウンド応答
1 << 401
1 <<サーバー:Apache-Coyote / 1.1
1 <<コンテンツの長さ:87
1 <<日付:2017年3月31日金曜日14:39:19 GMT
1 <<コンテンツタイプ:text / plain; charset = UTF-8
1 <<
{{
「エラー」:[
{{
"メッセージ": "無効なapikey"、
「コード」:4010
}
]
}
以下のようにHeaderオブジェクトを使用してapikeyを渡し、応答を取得できます。
ビルダービルダー= webResource.getRequestBuilder();
builder.header(apikey、apiValue);
builder.get(ClientResponse.class);
ありがとう!
@ cjayswal @ thetechnocratのサポートに感謝します!!
最も参考になるコメント
こんにちは@APrem
これは、HTTPクライアントが証明書を信頼していないようです。
このために-ここからのコードスニペットでRestClientFactoryを拡張する必要があります:
https://gist.github.com/outbounder/1069465
したがって、拡張クラスは次のようになり、これを任意のJavaパッケージ内に配置できます。;
`パッケージ
インポートcom.qmetry.qaf.automation.ws.rest.RestClientFactory;
インポートcom.sun.jersey.api.client.Client;
インポートcom.sun.jersey.api.client.config.ClientConfig;
インポートcom.sun.jersey.api.client.config.DefaultClientConfig;
インポートcom.sun.jersey.client.urlconnection.HTTPSProperties;
importjavax.net.ssl。*;
インポートjava.security.SecureRandom;
インポートjava.security.cert.CertificateException;
java.security.cert.X509Certificateをインポートします。
パブリッククラスClientHelperはRestClientFactoryを拡張します{
} `
これを行ったら、このクラスをアプリケーションプロパティ内に登録する必要があります。
rest.client.impl=<Your Package Name>.ClientHelper