Hola, equipo,
Estamos intentando implementar la automatización de API usando QAF.
¿Alguien puede sugerir sobre las siguientes consultas?
Vaya a -> new RestTestBase (). GetWebResource (getBundle (). GetString ("ws.endurl", url), "/application.json"). * * -> ¿Qué método GET usar?
¡¡Gracias por adelantado!!
Saludos,
Prem
Si está esperando algún POJO, puede proporcionar esa clase o una String.class
o una respuesta genérica ClientResponse.class
Puede utilizar ws-support para conocer los pasos listos para usar.
¡Gracias por la respuesta!
Espero que la parte del código a continuación sea útil.
¿Qué es ----> Recurso de cadena
¿Qué es ----> Mapa
solicitud de vacío estática privada para (recurso de cadena, mapa
Intentamos con la parte de código a continuación y obtenemos una excepción como se muestra a continuación.
Probado guión:
WebResource webResource = new RestTestBase().getWebResource(getBundle().getString("ws.endurl", url));
webResource.get(ClientResponse.class);
Error:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: Error en la construcción de la ruta PKIX:
sun.security.provider.certpath.SunCertPathBuilderException: no se puede encontrar una ruta de certificación válida para el objetivo solicitado
Hola @APrem
Parece que el cliente HTTP no confía en el certificado.
Para esto, debe extender RestClientFactory con el fragmento de código desde aquí:
https://gist.github.com/outbounder/1069465
por lo que su clase extendida se verá como se muestra a continuación y puede colocar esto dentro de cualquiera de sus paquetes java:
`paquete
import com.qmetry.qaf.automation.ws.rest.RestClientFactory;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
import com.sun.jersey.client.urlconnection.HTTPSProperties;
importar javax.net.ssl. *;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
ClientHelper de clase pública extiende 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());
}
} `
Una vez que hagas esto, debes registrar esta clase dentro de las propiedades de la aplicación:
rest.client.impl=<Your Package Name>.ClientHelper
Hola Prem,
Espero que el comentario anterior te ayude a resolver tu problema.
Me gustaría solicitarle que mueva la pregunta al foro de soporte de la comunidad como stackoverflow con etiqueta QAF o vinculado en grupo . Cuando pregunte en stackoverflow, agregue la etiqueta qaf
para obtener una respuesta rápida.
Gracias,
Chirag
Gracias por la respuesta.
Se agregó la clase ClientHelper y ahora pudimos ver la respuesta.
Pero la URL que se da dentro de .getWebResource (getBundle (). GetString ("ws.endurl", url)); está teniendo la clave api. Por lo tanto, el símbolo de signo de interrogación "?" está en la URL. Este fragmento de código está tomando el "?" como "% 3F" e imprimiendo la consola como se muestra a continuación.
Esperado: https://sample.url.com/xxxxxxxxxxxxx?apikey=l7xxfc8df89f313944a89e280481e09bb411
Actual: https://sample.url.com/xxxxxxxxxxxxx%3Fapikey=l7xxfc8df89f313944a89e280481e09bb411
Debido a esta conversión, obtenemos un error en la salida.
Salida de consola:
1 * solicitud de salida del cliente
1 >> OBTENGA https://sample.url.com/xxxxxxxxxxxxx%3Fapikey=l7xxfc8df89f313944a89e280481e09bb411
1 * Inicio de recepción: 87
1 * Recibido: delta: 87 bytes: 87
Terminado1 * Terminado
1 * respuesta del cliente entrante
1 << 401
1 << Servidor: Apache-Coyote / 1.1
1 << Contenido-Longitud: 87
1 << Fecha: vie, 31 de marzo de 2017 14:39:19 GMT
1 << Tipo de contenido: texto / sin formato; juego de caracteres = UTF-8
1 <<
{
"errores": [
{
"message": "Apikey no válido",
"código": 4010
}
]
}
Pasé el apikey con el objeto Header como se muestra a continuación y pude obtener una respuesta.
Constructor constructor = webResource.getRequestBuilder ();
constructor.header (apikey, apiValue);
builder.get (ClientResponse.class);
¡Gracias!
¡Gracias @cjayswal @thetechnocrat por el apoyo!
Comentario más útil
Hola @APrem
Parece que el cliente HTTP no confía en el certificado.
Para esto, debe extender RestClientFactory con el fragmento de código desde aquí:
https://gist.github.com/outbounder/1069465
por lo que su clase extendida se verá como se muestra a continuación y puede colocar esto dentro de cualquiera de sus paquetes java:;
`paquete
import com.qmetry.qaf.automation.ws.rest.RestClientFactory;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
import com.sun.jersey.client.urlconnection.HTTPSProperties;
importar javax.net.ssl. *;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
ClientHelper de clase pública extiende RestClientFactory {
} `
Una vez que hagas esto, debes registrar esta clase dentro de las propiedades de la aplicación:
rest.client.impl=<Your Package Name>.ClientHelper