Qaf: QAFを使用したAPI自動化

作成日 2017年03月29日  ·  7コメント  ·  ソース: qmetry/qaf

こんにちはチーム、

QAFを使用してAPI自動化を実装しようとしています。

誰かが以下の質問について提案できますか?

  1. QAFでメソッドをGETするための構文またはメソッド? GETオプションのリストからどの方法を選択するかはわかりません。 添付されているのはスクリーンショットです。

-> new RestTestBase()。getWebResource(getBundle()。getString( "ws.endurl"、url)、 "/application.json")で攻撃されました。 * * ->どのGETメソッドを使用しますか?

  1. 応答を受け取ったら、JSON応答からコンテンツを抽出し、QAFを使用して同じものを検証するにはどうすればよいですか?

前もって感謝します!!

よろしく、
プレム
capture_webserviceget

help wanted webservice

最も参考になるコメント

こんにちは@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

全てのコメント7件

POJOを期待している場合は、そのクラスまたはString.classまたは一般的な応答ClientResponse.classを提供できます。

すぐに使用できる手順については、 ws-supportを使用できます。

返信ありがとうございます!

コードの以下の部分が役立つことを願っています。
パラメータ

内容---->文字列リソース
何ですか---->地図パラメータ

private static void requestFor(String resource、Mapparams){

  • WebResource webResource = new RestTestBase()。getWebResource(
  • getBundle()。getString( "ws.endurl"、ApplicationProperties.SELENIUM_BASE_URL.getStringVal())、resource);
  • if(null!= params &&!params.isEmpty()){
  • MultivaluedMapmparams = new MultivaluedMapImpl();


    • for(String key:params.keySet()){

  • mparams.add(key、params.get(key));
  • }
  • webResource = webResource.queryParams(mparams);
  • }
  • webResource.get(ClientResponse.class);
  • }

以下のコード部分で試してみましたが、以下のような例外が発生しています。

スクリプトを試しました:

    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のサポートに感謝します!!

このページは役に立ちましたか?
0 / 5 - 0 評価