أهلا بالفريق،
نحن نحاول تنفيذ أتمتة API باستخدام QAF.
هل يمكن لأي شخص أن يقترح على الاستفسارات أدناه؟
Struck at -> RestTestBase (). getWebResource (getBundle (). getString ("ws.endurl" ، url) ، "/application.json"). * * -> ما هي طريقة GET لاستخدامها؟
شكرا لك مقدما!!
يعتبر،
بريم
إذا كنت تتوقع أي POJO ، فيمكنك تقديم تلك الفئة أو رد String.class
أو استجابة عامة ClientResponse.class
يمكنك استخدام دعم ws للخطوات الجاهزة للاستخدام.
شكرا للإستجابة!
نأمل أن يكون الجزء أدناه من الكود مفيدًا.
ما هو ----> مورد السلسلة
ما هو ----> الخريطة
طلب باطل ثابت خاص لـ (مصدر سلسلة ، خريطة
لقد حاولنا مع الجزء أدناه من الكود وحصلنا على استثناء على النحو التالي.
السيناريو الذي تمت تجربته:
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 للدعم !!
التعليق الأكثر فائدة
مرحبًا 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 {
} `
بمجرد القيام بذلك ، يجب عليك تسجيل هذه الفئة داخل خصائص التطبيق:
rest.client.impl=<Your Package Name>.ClientHelper