Hallo Team,
Wir versuchen, die API-Automatisierung mit QAF zu implementieren.
Kann jemand bitte zu den folgenden Fragen Vorschläge machen?
Getroffen bei --> new RestTestBase().getWebResource(getBundle().getString("ws.endurl", url), "/application.json"). * * --> Welche GET-Methode soll verwendet werden?
Danke im Voraus!!
Grüße,
Prem
Wenn Sie ein POJO erwarten, können Sie diese Klasse oder eine String.class
oder generische Antwort ClientResponse.class
Sie können ws-support für gebrauchsfertige Schritte verwenden.
Danke für die Antwort!
Ich hoffe, dass der folgende Teil des Codes hilfreich ist.
Was ist ----> String-Ressource
Was ist ---->Karte
private statische void requestFor(String-Ressource, Map
Wir haben es mit dem folgenden Teil des Codes versucht und erhalten eine Ausnahme wie unten.
Skript ausprobiert:
WebResource webResource = new RestTestBase().getWebResource(getBundle().getString("ws.endurl", url));
webResource.get(ClientResponse.class);
Fehler:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX-Pfaderstellung fehlgeschlagen:
sun.security.provider.certpath.SunCertPathBuilderException: kein gültiger Zertifizierungspfad zum angeforderten Ziel gefunden
Hallo @APrem
Dies sieht so aus, als ob der HTTP-Client dem Zertifikat nicht vertraut.
Dazu müssen Sie die RestClientFactory mit dem Code-Snippet von hier erweitern:
https://gist.github.com/outbounder/1069465
Ihre erweiterte Klasse sieht also wie folgt aus und Sie können dies in jedes Ihrer Java-Pakete einfügen:
`Paket
import com.qmetry.qaf.automation.ws.rest.RestClientFactory;
com.sun.jersey.api.client.Client importieren;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
import com.sun.jersey.client.urlconnection.HTTPSProperties;
javax.net.ssl.* importieren;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
java.security.cert.X509Zertifikat importieren;
öffentliche Klasse ClientHelper erweitert 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());
}
}`
Sobald Sie dies tun, müssen Sie diese Klasse in den Anwendungseigenschaften registrieren:
rest.client.impl=<Your Package Name>.ClientHelper
Hallo Prem,
Ich hoffe, der obige Kommentar wird Ihnen helfen, Ihr Problem zu lösen.
Ich möchte Sie bitten, die Frage in ein Community-Support-Forum wie Stackoverflow mit QAF-Tag oder in Gruppe verlinkt zu verschieben . Wenn Sie nach Stackoverflow fragen, fügen Sie das Tag qaf
, um eine schnelle Antwort zu erhalten.
Vielen Dank,
Chirag
Danke für die Antwort.
ClientHelper-Klasse hinzugefügt und jetzt konnten wir die Antwort sehen.
Aber die URL, die immer in .getWebResource(getBundle().getString("ws.endurl", url)) angegeben ist; hat den API-Schlüssel. Daher ist das Fragezeichensymbol "?" steht in der URL. Dieses Stück Code nimmt das "?" als "%3F" und Drucken der Konsolenausgabe wie unten beschrieben.
Erwartet: https://sample.url.com/xxxxxxxxxxxxx?apikey=l7xxfc8df89f313944a89e280481e09bb411
Aktuell: https://sample.url.com/xxxxxxxxxxxxx%3Fapikey=l7xxfc8df89f313944a89e280481e09bb411
Aufgrund dieser Konvertierung erhalten wir einen Ausgabefehler.
Konsolenausgabe:
1 * ausgehende Client-Anfrage
1 >> GET https://sample.url.com/xxxxxxxxxxxxx%3Fapikey=l7xxfc8df89f313944a89e280481e09bb411
1 * Empfangsstart: 87
1 * Empfangen: Delta: 87 Byte: 87
Fertig1 * Fertig
1 * Eingehende Antwort des Kunden
1 << 401
1 << Server: Apache-Coyote/1.1
1 << Inhalt-Länge: 87
1 << Datum: Fr, 31 Mär 2017 14:39:19 GMT
1 << Inhaltstyp: text/plain;charset=UTF-8
1 <<
{
"Fehler": [
{
"message": "Ungültiger APIkey",
"code": 4010
}
]
}
Ich habe den apikey mit dem Header-Objekt wie unten beschrieben übergeben und kann eine Antwort erhalten.
Builder-Builder = webResource.getRequestBuilder();
builder.header(apikey, apiValue);
builder.get(ClientResponse.class);
Danke schön!
Danke @cjayswal @thetechnocrat für die Unterstützung !!
Hilfreichster Kommentar
Hallo @APrem
Dies sieht so aus, als ob der HTTP-Client dem Zertifikat nicht vertraut.
Dazu müssen Sie die RestClientFactory mit dem Code-Snippet von hier erweitern:
https://gist.github.com/outbounder/1069465
Ihre erweiterte Klasse sieht also wie folgt aus und Sie können dies in jedes Ihrer Java-Pakete einfügen:;
`Paket
import com.qmetry.qaf.automation.ws.rest.RestClientFactory;
com.sun.jersey.api.client.Client importieren;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
import com.sun.jersey.client.urlconnection.HTTPSProperties;
javax.net.ssl.* importieren;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
java.security.cert.X509Zertifikat importieren;
öffentliche Klasse ClientHelper erweitert RestClientFactory {
}`
Sobald Sie dies tun, müssen Sie diese Klasse in den Anwendungseigenschaften registrieren:
rest.client.impl=<Your Package Name>.ClientHelper