Qaf: Otomatisasi API menggunakan QAF

Dibuat pada 29 Mar 2017  ·  7Komentar  ·  Sumber: qmetry/qaf

Hai tim,

Kami mencoba menerapkan otomatisasi API menggunakan QAF.

Adakah yang bisa menyarankan pertanyaan di bawah ini?

  1. Sintaks atau metode untuk GET metode di QAF? Kami tidak yakin metode mana yang harus dipilih dari daftar opsi GET. Terlampir adalah tangkapan layar.

Dipukul di --> new RestTestBase().getWebResource(getBundle().getString("ws.endurl", url), "/application.json"). * * --> metode GET mana yang digunakan?

  1. Setelah kami menerima respons, bagaimana cara mengekstrak konten dari respons JSON dan memvalidasinya menggunakan QAF?

Terima kasih sebelumnya!!

Salam,
Prem
capture_webserviceget

help wanted webservice

Komentar yang paling membantu

Hai @APrem

Sepertinya Klien HTTP tidak mempercayai sertifikat.

Untuk ini - Anda harus memperluas RestClientFactory dengan cuplikan kode dari sini:
https://Gist.github.com/outbounder/1069465

jadi kelas Anda yang diperluas akan terlihat seperti di bawah ini dan Anda dapat menempatkan ini di dalam paket Java Anda:
`paket;

impor com.qmetry.qaf.automation.ws.rest.RestClientFactory;
impor com.sun.jersey.api.client.Client;
impor com.sun.jersey.api.client.config.ClientConfig;
impor com.sun.jersey.api.client.config.DefaultClientConfig;
impor com.sun.jersey.client.urlconnection.HTTPSProperties;

impor javax.net.ssl.*;
impor java.security.SecureRandom;
impor java.security.cert.CertificateException;
impor java.security.cert.X509Certificate;

kelas publik ClientHelper memperluas 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());
}

}`

Setelah Anda melakukan ini, Anda harus mendaftarkan kelas ini di dalam properti aplikasi:
rest.client.impl=<Your Package Name>.ClientHelper

Semua 7 komentar

Jika Anda mengharapkan POJO apa pun, Anda dapat memberikan kelas itu atau String.class atau respons umum ClientResponse.class

Anda dapat menggunakan ws-support untuk langkah-langkah siap pakai.

Terima kasih atas tanggapannya!

Berharap bagian kode di bawah ini akan membantu.
params

Apa itu ----> Sumber daya string
Apa itu ---->Petaparams

private static void requestFor(Sumber daya string, Petaparameter) {

  • WebResource webResource = baru RestTestBase().getWebResource(
  • getBundle().getString("ws.endurl", ApplicationProperties.SELENIUM_BASE_URL.getStringVal()), sumber daya);
  • if (null != params && !params.isEmpty()) {
  • Peta Bernilai Banyakmparams = new MultivaluedMapImpl();


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

  • mparams.add(kunci, params.get(kunci));
  • }
  • webResource = webResource.queryParams(mparams);
  • }
  • webResource.get(ClientResponse.class);
  • }

Kami mencoba dengan bagian kode di bawah ini dan kami mendapatkan pengecualian seperti di bawah ini.

Skrip yang dicoba:

    WebResource webResource = new RestTestBase().getWebResource(getBundle().getString("ws.endurl", url));
    webResource.get(ClientResponse.class);

Kesalahan:

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: pembuatan jalur PKIX gagal:
sun.security.provider.certpath.SunCertPathBuilderException: tidak dapat menemukan jalur sertifikasi yang valid ke target yang diminta

Hai @APrem

Sepertinya Klien HTTP tidak mempercayai sertifikat.

Untuk ini - Anda harus memperluas RestClientFactory dengan cuplikan kode dari sini:
https://Gist.github.com/outbounder/1069465

jadi kelas Anda yang diperluas akan terlihat seperti di bawah ini dan Anda dapat menempatkan ini di dalam paket Java Anda:
`paket;

impor com.qmetry.qaf.automation.ws.rest.RestClientFactory;
impor com.sun.jersey.api.client.Client;
impor com.sun.jersey.api.client.config.ClientConfig;
impor com.sun.jersey.api.client.config.DefaultClientConfig;
impor com.sun.jersey.client.urlconnection.HTTPSProperties;

impor javax.net.ssl.*;
impor java.security.SecureRandom;
impor java.security.cert.CertificateException;
impor java.security.cert.X509Certificate;

kelas publik ClientHelper memperluas 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());
}

}`

Setelah Anda melakukan ini, Anda harus mendaftarkan kelas ini di dalam properti aplikasi:
rest.client.impl=<Your Package Name>.ClientHelper

Hai Pram,
Semoga komentar di atas akan membantu Anda menyelesaikan masalah Anda.

Saya ingin meminta Anda memindahkan pertanyaan ke forum dukungan komunitas seperti stackoverflow dengan tag QAF atau ditautkan dalam grup . Saat Anda bertanya tentang stackoverflow, tambahkan tag qaf untuk mendapatkan respons cepat.

Terima kasih,
Chirag

Terima kasih atas tanggapannya.

Menambahkan kelas ClientHelper dan sekarang kami dapat melihat responsnya.
Tapi URL yang pernah diberikan di dalam .getWebResource(getBundle().getString("ws.endurl", url)); memiliki kunci api. Oleh karena itu, simbol tanda tanya "?" ada di URL. Potongan kode ini mengambil "?" sebagai "%3F" dan mencetak konsol seperti di bawah ini.

Diharapkan: https://sample.url.com/xxxxxxxxxxxxx?apikey=l7xxfc8df89f313944a89e280481e09bb411
Sebenarnya: https://sample.url.com/xxxxxxxxxxxxx%3Fapikey=l7xxfc8df89f313944a89e280481e09bb411

Karena konversi ini kami mendapatkan kesalahan dalam output.

Keluaran konsol:
1 * Permintaan keluar klien
1 >> DAPATKAN https://sample.url.com/xxxxxxxxxxxxx%3Fapikey=l7xxfc8df89f313944a89e280481e09bb411
1 * Terima Mulai: 87
1 * Diterima: delta: 87 byte: 87
Selesai1 * Selesai
1 * Respons masuk klien
1 << 401
1 << Server: Apache-Coyote/1.1
1 << Isi-Panjang: 87
1 << Tanggal: Jum, 31 Mar 2017 14:39:19 GMT
1 << Tipe-Konten: teks/polos;charset=UTF-8
1 <<
{
"kesalahan": [
{
"message": "apikey tidak valid",
"kode": 4010
}
]
}

Saya telah melewati apikey dengan objek Header seperti di bawah ini dan bisa mendapatkan respons.

Pembangun pembangun = webResource.getRequestBuilder();
builder.header(apikey, apiValue);
builder.get(ClientResponse.class);

Terima kasih!

Terima kasih @cjayswal @thetechnocrat atas dukungannya !!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

cjayswal picture cjayswal  ·  17Komentar

BChitrakannan picture BChitrakannan  ·  9Komentar

Nandesh7 picture Nandesh7  ·  8Komentar

Rupak-66 picture Rupak-66  ·  12Komentar

raviguptasmarsh picture raviguptasmarsh  ·  8Komentar