Bonjour l'équipe,
Nous essayons de mettre en œuvre l'automatisation de l'API à l'aide de QAF.
Quelqu'un peut-il s'il vous plaît suggérer sur les requêtes ci-dessous?
Frappé à --> nouveau RestTestBase().getWebResource(getBundle().getString("ws.endurl", url), "/application.json"). * * --> quelle méthode GET utiliser ?
Merci d'avance!!
Salutations,
Prem
Si vous attendez un POJO, vous pouvez fournir cette classe ou une réponse ClientResponse.class
String.class
ou générique ClientResponse.class
Vous pouvez utiliser ws-support pour les étapes prêtes à l'emploi.
Merci pour la réponse!
En espérant que la partie de code ci-dessous soit utile.
Qu'est-ce que ----> Ressource de chaîne
Quoi de ----> Carte
private static void requestFor (ressource de chaîne, carte
Nous avons essayé avec la partie de code ci-dessous et nous obtenons une exception comme ci-dessous.
Script essayé :
WebResource webResource = new RestTestBase().getWebResource(getBundle().getString("ws.endurl", url));
webResource.get(ClientResponse.class);
Erreur:
javax.net.ssl.SSLHandshakeException : sun.security.validator.ValidatorException : la création du chemin PKIX a échoué :
sun.security.provider.certpath.SunCertPathBuilderException : impossible de trouver un chemin de certification valide vers la cible demandée
Salut @APrem
Il semble que le client HTTP ne fasse pas confiance au certificat.
Pour cela, vous devez étendre la RestClientFactory avec l'extrait de code d'ici :
https://gist.github.com/outbounder/1069465
votre classe étendue ressemblera donc à ce qui suit et vous pouvez la placer dans n'importe quel package Java :
`paquet
importer com.qmetry.qaf.automation.ws.rest.RestClientFactory ;
importer com.sun.jersey.api.client.Client ;
importer com.sun.jersey.api.client.config.ClientConfig ;
importer com.sun.jersey.api.client.config.DefaultClientConfig ;
importer com.sun.jersey.client.urlconnection.HTTPSProperties ;
importer javax.net.ssl.*;
importer java.security.SecureRandom ;
importer java.security.cert.CertificateException ;
importer java.security.cert.X509Certificate ;
la classe publique ClientHelper étend 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());
}
}`
Une fois cela fait, vous devez enregistrer cette classe dans les propriétés de l'application :
rest.client.impl=<Your Package Name>.ClientHelper
Salut Prem,
J'espère que le commentaire ci-dessus vous aidera à résoudre votre problème.
Je voudrais vous demander de déplacer la question sur le forum de support de la communauté, comme stackoverflow avec balise QAF ou lié au groupe . Lorsque vous demandez sur stackoverflow, ajoutez la balise qaf
pour obtenir une réponse rapide.
Merci,
Chirag
Merci pour la réponse.
Ajout de la classe ClientHelper et maintenant nous pouvions voir la réponse.
Mais l'URL qui est jamais donnée dans .getWebResource(getBundle().getString("ws.endurl", url)); a la clé api. Par conséquent, le symbole du point d'interrogation "?" est là dans l'URL. Ce morceau de code prend le "?" comme "%3F" et l'impression de la console comme ci-dessous.
Attendu : https://sample.url.com/xxxxxxxxxxxxx?apikey=l7xxfc8df89f313944a89e280481e09bb411
Réel : https://sample.url.com/xxxxxxxxxxxxx%3Fapikey=l7xxfc8df89f313944a89e280481e09bb411
En raison de cette conversion, nous obtenons une erreur dans la sortie.
Sortie console :
1 * Demande client sortant
1 >> OBTENIR https://sample.url.com/xxxxxxxxxxxxx%3Fapikey=l7xxfc8df89f313944a89e280481e09bb411
1 * Début de la réception : 87
1 * Reçu : delta : 87 octets : 87
Terminé1 * Terminé
1 * Réponse entrante du client
1 << 401
1 << Serveur : Apache-Coyote/1.1
1 << Contenu-Longueur : 87
1 << Date : ven. 31 mars 2017 14:39:19 GMT
1 << Type de contenu : text/plain;charset=UTF-8
1 <<
{
"les erreurs": [
{
"message": "Apikey invalide",
"code": 4010
}
]
}
J'ai passé l'apikey avec l'objet Header comme ci-dessous et j'ai pu obtenir une réponse.
Générateur de générateur = webResource.getRequestBuilder();
builder.header(apikey, apiValue);
builder.get(ClientResponse.class);
Merci!
Merci @cjayswal @thetechnocrat pour le soutien !!
Commentaire le plus utile
Salut @APrem
Il semble que le client HTTP ne fasse pas confiance au certificat.
Pour cela, vous devez étendre la RestClientFactory avec l'extrait de code d'ici :
https://gist.github.com/outbounder/1069465
votre classe étendue ressemblera donc à ce qui suit et vous pouvez la placer dans n'importe quel package Java :;
`paquet
importer com.qmetry.qaf.automation.ws.rest.RestClientFactory ;
importer com.sun.jersey.api.client.Client ;
importer com.sun.jersey.api.client.config.ClientConfig ;
importer com.sun.jersey.api.client.config.DefaultClientConfig ;
importer com.sun.jersey.client.urlconnection.HTTPSProperties ;
importer javax.net.ssl.*;
importer java.security.SecureRandom ;
importer java.security.cert.CertificateException ;
importer java.security.cert.X509Certificate ;
la classe publique ClientHelper étend RestClientFactory {
}`
Une fois cela fait, vous devez enregistrer cette classe dans les propriétés de l'application :
rest.client.impl=<Your Package Name>.ClientHelper