Oi equipe,
Estamos tentando implementar a automação da API usando QAF.
Alguém pode sugerir nas perguntas abaixo?
Atingido em -> new RestTestBase (). GetWebResource (getBundle (). GetString ("ws.endurl", url), "/application.json"). * * -> qual método GET usar?
Desde já, obrigado!!
Cumprimentos,
Prem
Se você está esperando qualquer POJO, pode fornecer essa classe ou uma String.class
ou uma resposta genérica ClientResponse.class
Você pode usar ws-support para as etapas prontas para uso.
Obrigado pela resposta!
Esperar que a parte do código abaixo seja útil.
O que é ----> recurso String
O que é ----> Mapa
private static void requestFor (recurso String, Map
Tentamos com a parte do código abaixo e estamos obtendo uma exceção conforme mostrado abaixo.
Script experimentado:
WebResource webResource = new RestTestBase().getWebResource(getBundle().getString("ws.endurl", url));
webResource.get(ClientResponse.class);
Erro:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: Falha na construção do caminho PKIX:
sun.security.provider.certpath.SunCertPathBuilderException: não foi possível encontrar o caminho de certificação válido para o destino solicitado
Olá @APrem
Parece que o cliente HTTP não está confiando no certificado.
Para isso - você deve estender o RestClientFactory com o trecho de código a partir daqui:
https://gist.github.com/outbounder/1069465
então sua classe estendida terá a aparência abaixo e você pode colocá-la dentro de qualquer um de seu pacote java:
`pacote
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;
import javax.net.ssl. *;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
public class ClientHelper extends 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());
}
} `
Depois de fazer isso, você deve registrar esta classe dentro das propriedades do aplicativo:
rest.client.impl=<Your Package Name>.ClientHelper
Oi Prem,
Espero que o comentário acima ajude você a resolver o seu problema.
Gostaria de solicitar que você mova a questão para o fórum de suporte da comunidade, como stackoverflow com tag QAF ou link em grupo . Quando você está perguntando no stackoverflow, adicione a tag qaf
para obter uma resposta rápida.
Obrigado,
Chirag
Obrigado pela resposta.
Adicionada a classe ClientHelper e agora podemos ver a resposta.
Mas a URL é fornecida dentro de .getWebResource (getBundle (). GetString ("ws.endurl", url)); é ter a chave da API. Portanto, o símbolo de ponto de interrogação "?" está lá no URL. Este pedaço de código está levando o "?" como "% 3F" e imprimindo a saída do console como abaixo.
Esperado: https://sample.url.com/xxxxxxxxxxxxx?apikey=l7xxfc8df89f313944a89e280481e09bb411
Real: https://sample.url.com/xxxxxxxxxxxxx%3Fapikey=l7xxfc8df89f313944a89e280481e09bb411
Por causa dessa conversão, obtemos erro na saída.
Saída do console:
1 * Solicitação de saída do cliente
1 >> GET https://sample.url.com/xxxxxxxxxxxxx%3Fapikey=l7xxfc8df89f313944a89e280481e09bb411
1 * Receber Início: 87
1 * Recebido: delta: 87 bytes: 87
Concluído1 * Concluído
1 * Resposta de entrada do cliente
1 << 401
1 << Servidor: Apache-Coyote / 1.1
1 << Comprimento do conteúdo: 87
1 << Data: Sex, 31 de março de 2017 14:39:19 GMT
1 << Tipo de conteúdo: texto / simples; conjunto de caracteres = UTF-8
1 <<
{
"erros": [
{
"message": "Apikey inválido",
"código": 4010
}
]
}
Eu passei na apikey com o objeto Header conforme abaixo e sou capaz de obter uma resposta.
Builder builder = webResource.getRequestBuilder ();
builder.header (apikey, apiValue);
builder.get (ClientResponse.class);
Obrigada!
Obrigado @cjayswal @thetechnocrat pelo apoio !!
Comentários muito úteis
Olá @APrem
Parece que o cliente HTTP não está confiando no certificado.
Para isso - você deve estender o RestClientFactory com o trecho de código a partir daqui:
https://gist.github.com/outbounder/1069465
então sua classe estendida terá a aparência abaixo e você pode colocá-la dentro de qualquer um de seu pacote java:;
`pacote
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;
import javax.net.ssl. *;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
public class ClientHelper extends RestClientFactory {
} `
Depois de fazer isso, você deve registrar esta classe dentro das propriedades do aplicativo:
rest.client.impl=<Your Package Name>.ClientHelper