Qaf: أتمتة API باستخدام QAF

تم إنشاؤها على ٢٩ مارس ٢٠١٧  ·  7تعليقات  ·  مصدر: qmetry/qaf

أهلا بالفريق،

نحن نحاول تنفيذ أتمتة API باستخدام QAF.

هل يمكن لأي شخص أن يقترح على الاستفسارات أدناه؟

  1. النحو أو طريقة الحصول على طريقة في QAF؟ لسنا متأكدين من الطريقة التي يجب تحديدها من قائمة خيارات GET. مرفق لقطة الشاشة.

Struck at -> 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

لذلك سيبدو الفصل الموسع كما هو موضح أدناه ويمكنك وضعه داخل أي من حزمة جافا الخاصة بك:
`الحزمة؛

استيراد 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 ؛

استيراد javax.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 للخطوات الجاهزة للاستخدام.

شكرا للإستجابة!

نأمل أن يكون الجزء أدناه من الكود مفيدًا.
بارامز

ما هو ----> مورد السلسلة
ما هو ----> الخريطةبارامز

طلب باطل ثابت خاص لـ (مصدر سلسلة ، خريطةالمعلمات) {

  • WebResource webResource = جديد RestTestBase (). getWebResource (
  • getBundle (). getString ("ws.endurl" ، ApplicationProperties.SELENIUM_BASE_URL.getStringVal ()) ، مورد) ؛
  • إذا (null! = params &&! params.isEmpty ()) {
  • متعدد القيم خريطةmparams = new MultivaluedMapImpl () ؛


    • لـ (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

لذلك سيبدو الفصل الموسع كما هو موضح أدناه ويمكنك وضعه داخل أي من حزمة جافا الخاصة بك:
`الحزمة؛

استيراد 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 ؛

استيراد javax.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

مرحبا بريم ،
نأمل أن يساعدك التعليق أعلاه في حل مشكلتك.

أود أن أطلب منك نقل السؤال إلى منتدى دعم المجتمع مثل stackoverflow بعلامة QAF أو مرتبط في مجموعة . عندما تسأل على stackoverflow أضف علامة qaf للحصول على استجابة سريعة.

شكرا،
جيراق

شكرا للإستجابة.

تمت إضافة فئة ClientHelper والآن يمكننا رؤية الرد.
لكن عنوان URL الذي يتم توفيره داخل .getWebResource (getBundle (). getString ("ws.endurl" ، url)) ؛ هو وجود مفتاح API. ومن ثم ، رمز علامة الاستفهام "؟" هل يوجد في URL. هذا الجزء من التعليمات البرمجية يأخذ "؟" كـ "٪ 3F" وطباعة وحدة التحكم على النحو التالي.

متوقع: https://sample.url.com/xxxxxxxxxxxxx؟apikey=l7xxfc8df89f313944a89e280481e09bb411
الفعلي: https://sample.url.com/xxxxxxxxxxxxx٪3Fapikey=l7xxfc8df89f313944a89e280481e09bb411

بسبب هذا التحويل حصلنا على خطأ في الإخراج.

إخراج وحدة التحكم:
1 * طلب العميل من الخارج
1 >> احصل على https://sample.url.com/xxxxxxxxxxxxx٪3Fapikey=l7xxfc8df89f313944a89e280481e09bb411
1 * استلام بداية: 87
1 * تم الاستلام: دلتا: 87 بايت: 87
تم الانتهاء 1 *
1 * استجابة ملزمة من العميل
1 << 401
1 << الخادم: Apache-Coyote / 1.1
1 << طول المحتوى: 87
1 << التاريخ: الجمعة ، 31 آذار (مارس) 2017 14:39:19 بتوقيت غرينتش
1 << نوع المحتوى: نص / عادي ؛ مجموعة أحرف = UTF-8
1 <<
{
"أخطاء": [
{
"message": "واجهة برمجة غير صالحة" ،
"الكود": 4010
}
]
}

لقد اجتزت apikey مع كائن Header على النحو التالي وتمكنت من الحصول على استجابة.

منشئ البناء = webResource.getRequestBuilder () ،
builder.header (apikey ، apiValue) ؛
builder.get (ClientResponse.class) ،

اشكرك!

شكرا لكcjayswalthetechnocrat للدعم !!

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

Rupak-66 picture Rupak-66  ·  12تعليقات

BChitrakannan picture BChitrakannan  ·  9تعليقات

cjayswal picture cjayswal  ·  17تعليقات

raviguptasmarsh picture raviguptasmarsh  ·  8تعليقات

Nandesh7 picture Nandesh7  ·  8تعليقات