ΠΡΠΈΠ²Π΅Ρ, ΠΊΠΎΠΌΠ°Π½Π΄Π°,
ΠΡ ΠΏΡΡΠ°Π΅ΠΌΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ API Ρ ΠΏΠΎΠΌΠΎΡΡΡ QAF.
ΠΠΎΠΆΠ΅Ρ Π»ΠΈ ΠΊΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΡΡ ΠΏΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΌ Π½ΠΈΠΆΠ΅ Π·Π°ΠΏΡΠΎΡΠ°ΠΌ?
Π£Π΄Π°ΡΠΈΠ» -> Π½ΠΎΠ²ΡΠΉ RestTestBase (). GetWebResource (getBundle (). GetString ("ws.endurl", url), "/application.json"). * * -> ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ GET ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ?
ΠΠ°ΡΠ°Π½Π΅Π΅ ΡΠΏΠ°ΡΠΈΠ±ΠΎ!!
Π‘ ΡΠ²Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ,
ΠΡΠ΅ΠΌ
ΠΡΠ»ΠΈ Π²Ρ ΠΎΠΆΠΈΠ΄Π°Π΅ΡΠ΅ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ POJO, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΡΡΠΎΡ ΠΊΠ»Π°ΡΡ ΠΈΠ»ΠΈ String.class
ΠΈΠ»ΠΈ ΠΎΠ±ΡΠΈΠΉ ΠΎΡΠ²Π΅Ρ ClientResponse.class
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ws-support Π΄Π»Ρ Π³ΠΎΡΠΎΠ²ΡΡ ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ°Π³ΠΎΠ².
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΠΎΡΠ²Π΅Ρ!
ΠΠ°Π΄Π΅ΡΡΡ, ΡΡΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½Π°Ρ Π½ΠΈΠΆΠ΅ ΡΠ°ΡΡΡ ΠΊΠΎΠ΄Π° Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ.
Π§ΡΠΎ ----> Π‘ΡΡΠΎΠΊΠΎΠ²ΡΠΉ ΡΠ΅ΡΡΡΡ
Π§ΡΠΎ ----> ΠΠ°ΡΡΠ°
private static void requestFor (Π‘ΡΡΠΎΠΊΠΎΠ²ΡΠΉ ΡΠ΅ΡΡΡΡ, ΠΠ°ΡΡΠ°
ΠΡ ΠΏΡΠΎΠ±ΠΎΠ²Π°Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΡ Π½ΠΈΠΆΠ΅ ΡΠ°ΡΡΡ ΠΊΠΎΠ΄Π° ΠΈ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅.
ΠΡΠΎΠ±ΠΎΠ²Π°Π» ΡΠΊΡΠΈΠΏΡ:
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
ΠΏΠΎΡΡΠΎΠΌΡ Π²Π°Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΡΠΉ ΠΊΠ»Π°ΡΡ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅, ΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π΅Π³ΠΎ Π² Π»ΡΠ±ΠΎΠΉ ΠΈΠ· ΡΠ²ΠΎΠΈΡ
ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² java:
ΠΏΠ°ΠΊΠ΅Ρ
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. *;
ΠΈΠΌΠΏΠΎΡΡ java.security.SecureRandom;
import java.security.cert.CertificateException;
import 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 << Content-Length: 87
1 << ΠΠ°ΡΠ°: ΠΏΡ, 31 ΠΌΠ°ΡΡΠ° 2017 Π³. 14:39:19 GMT
1 << Content-Type: text / plain; charset = UTF-8
1 <<
{
"ΠΎΡΠΈΠ±ΠΊΠΈ": [
{
"message": "ΠΠ΅Π²Π΅ΡΠ½ΡΠΉ Π°ΠΏΠΈΠΊΠ΅ΠΉ",
Β«ΠΊΠΎΠ΄Β»: 4010
}
]
}
Π― ΠΏΡΠΎΡΠ΅Π» apikey Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ Header, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅, ΠΈ ΡΠΌΠΎΠ³ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΡΠ²Π΅Ρ.
Π‘ΡΡΠΎΠΈΡΠ΅Π»Ρ builder = webResource.getRequestBuilder ();
builder.header (apikey, apiValue);
builder.get (ClientResponse.class);
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ Π²Π°Ρ!
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ @cjayswal @thetechnocrat Π·Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ !!
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΡΠΈΠ²Π΅Ρ @APrem
ΠΠΎΡ ΠΎΠΆΠ΅, ΡΡΠΎ HTTP-ΠΊΠ»ΠΈΠ΅Π½Ρ Π½Π΅ Π΄ΠΎΠ²Π΅ΡΡΠ΅Ρ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡ.
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ°ΡΡΠΈΡΠΈΡΡ RestClientFactory ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΎΠΌ ΠΊΠΎΠ΄Π° ΠΎΡΡΡΠ΄Π°:
https://gist.github.com/outbounder/1069465
ΠΏΠΎΡΡΠΎΠΌΡ Π²Π°Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΡΠΉ ΠΊΠ»Π°ΡΡ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅, ΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π΅Π³ΠΎ Π² Π»ΡΠ±ΠΎΠΉ ΠΈΠ· ΡΠ²ΠΎΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² java:;
ΠΏΠ°ΠΊΠ΅Ρ
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. *;
ΠΈΠΌΠΏΠΎΡΡ java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
ΠΎΡΠΊΡΡΡΡΠΉ ΠΊΠ»Π°ΡΡ ClientHelper ΡΠ°ΡΡΠΈΡΡΠ΅Ρ RestClientFactory {
} `
ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π²Ρ ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π΅ΡΠ΅, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΎΡ ΠΊΠ»Π°ΡΡ Π² ΡΠ²ΠΎΠΉΡΡΠ²Π°Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ:
rest.client.impl=<Your Package Name>.ClientHelper