JUnit — протестируйте HTTPClient с помощью Maven Project
HTTP-клиент может предоставлять синхронные и асинхронные механизмы запросов через следующие три основных класса:
- HttpRequest: запрос, который необходимо отправить через HttpClient.
- HttpClient: это контейнер для нескольких запросов.
- HttpResponse: все запросы должны завершить цикл и предоставить результат в виде HttpResponse. Каждый ответ идентифицируется кодами состояния, такими как
200 -> Response obtained and it is OK means everything is correct 404 -> Requested page or element not available in the mentioned URL 401 -> Unauthorized
В этом руководстве мы рассмотрим некоторые способы тестирования httpClient, содержащего заголовки и SSL.
Пример проекта
Структура проекта:
Поскольку это проект maven, зависимости добавляются в pom.xml.
XML
<? xml version = "1.0" encoding = "UTF-8" ?> xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 < modelVersion >4.0.0</ modelVersion > < artifactId >httpclient-sampletesting</ artifactId > < version >0.1-SNAPSHOT</ version > < name >httpclient-sampletesting</ name > < packaging >war</ packaging > < parent > < groupId >com.gfg</ groupId > < artifactId >parent-spring-5</ artifactId > < version >0.0.1-SNAPSHOT</ version > < relativePath >../parent-spring-5</ relativePath > </ parent > < dependencies > < dependency > < groupId >org.apache.httpcomponents</ groupId > < artifactId >httpcore</ artifactId > < version >${httpcore.version}</ version > < exclusions > < exclusion > < artifactId >commons-logging</ artifactId > < groupId >commons-logging</ groupId > </ exclusion > </ exclusions > </ dependency > <!-- utils --> < dependency > < groupId >org.apache.commons</ groupId > < artifactId >commons-lang3</ artifactId > < version >${commons-lang3.version}</ version > </ dependency > <!-- http client --> < dependency > < groupId >org.apache.httpcomponents</ groupId > < artifactId >httpclient</ artifactId > < version >${httpclient.version}</ version > < exclusions > < exclusion > < artifactId >commons-logging</ artifactId > < groupId >commons-logging</ groupId > </ exclusion > </ exclusions > </ dependency > < dependency > < groupId >org.apache.httpcomponents</ groupId > < artifactId >fluent-hc</ artifactId > < version >${httpclient.version}</ version > < exclusions > < exclusion > < artifactId >commons-logging</ artifactId > < groupId >commons-logging</ groupId > </ exclusion > </ exclusions > </ dependency > < dependency > < groupId >org.apache.httpcomponents</ groupId > < artifactId >httpmime</ artifactId > < version >${httpclient.version}</ version > </ dependency > < dependency > < groupId >commons-codec</ groupId > < artifactId >commons-codec</ artifactId > < version >${commons-codec.version}</ version > </ dependency > < dependency > < groupId >org.apache.httpcomponents</ groupId > < artifactId >httpasyncclient</ artifactId > < version >${httpasyncclient.version}</ version > < exclusions > < exclusion > < artifactId >commons-logging</ artifactId > < groupId >commons-logging</ groupId > </ exclusion > </ exclusions > </ dependency > < dependency > < groupId >com.github.tomakehurst</ groupId > < artifactId >wiremock</ artifactId > < version >${wiremock.version}</ version > < scope >test</ scope > </ dependency > <!-- web --> < dependency > < groupId >javax.servlet</ groupId > < artifactId >javax.servlet-api</ artifactId > < version >${javax.servlet-api.version}</ version > < scope >provided</ scope > </ dependency > < dependency > < groupId >javax.servlet</ groupId > < artifactId >jstl</ artifactId > < version >${jstl.version}</ version > < scope >runtime</ scope > </ dependency > </ dependencies > < build > < finalName >httpclient-simple</ finalName > < resources > < resource > < directory >src/main/resources</ directory > < filtering >true</ filtering > </ resource > </ resources > < plugins > < plugin > < groupId >org.apache.maven.plugins</ groupId > < artifactId >maven-war-plugin</ artifactId > < version >${maven-war-plugin.version}</ version > </ plugin > <!-- This should be added to overcome Could not initialize class org.apache.maven.plugin.war.util.WebappStructureSerializer --> < plugin > < groupId >org.apache.maven.plugins</ groupId > < artifactId >maven-war-plugin</ artifactId > < version >3.3.2</ version > </ plugin > </ plugins > </ build > < profiles > < profile > < id >live</ id > < build > < plugins > < plugin > < groupId >org.apache.maven.plugins</ groupId > < artifactId >maven-surefire-plugin</ artifactId > < executions > < execution > < phase >integration-test</ phase > < goals > < goal >test</ goal > </ goals > < configuration > < excludes > < exclude >none</ exclude > </ excludes > </ configuration > </ execution > </ executions > </ plugin > </ plugins > </ build > </ profile > </ profiles > < properties > <!-- util --> < commons-codec.version >1.10</ commons-codec.version > < httpasyncclient.version >4.1.4</ httpasyncclient.version > <!-- testing --> < wiremock.version >2.5.1</ wiremock.version > < httpcore.version >4.4.11</ httpcore.version > < httpclient.version >4.5.8</ httpclient.version > <!-- maven plugins --> < cargo-maven2-plugin.version >1.6.1</ cargo-maven2-plugin.version > </ properties > </ project > |
Начиная с HttpClient 4.3, запросы можно создавать с помощью RequestBuilder. Заголовок HTTP можно добавить, как указано в приведенных ниже строках кода. Пример создания RequestBuilder и использования с типом контента
Java
CloseableHttpClient httpClient = HttpClients.custom().build(); final HttpGet request = new HttpGet(GFG_URL); request.setHeader(HttpHeaders.CONTENT_TYPE, "application/json" ); httpResponse = httpClient.execute(request); |
До HttpClient 4.3 нам нужно было полагаться на приведенный ниже код. Любой пользовательский заголовок может быть установлен в запросе простым вызовом setHeader в запросе:
Java
HttpClient httpClient = new DefaultHttpClient(); HttpGet getRequest = new HttpGet(GFG_URL); request.setHeader(HttpHeaders.CONTENT_TYPE, "application/json" ); httpClient.execute(getRequest); |
Давайте посмотрим весь тестовый код Java для версий, начиная с HttpClient версии 4.3 и выше. Давайте проверим ResponseUtil.java, поскольку он используется
ResponseUtil.java
Java
import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import java.io.IOException; public final class ResponseUtil { private ResponseUtil() { } public static void closeResponse(CloseableHttpResponse response) throws IOException { if (response == null ) { return ; } try { final HttpEntity entity = response.getEntity(); if (entity != null ) { entity.getContent().close(); } } finally { response.close(); } } } |
SampleHttpClientHeadersUnitTest.java
Здесь мы передаем URL-адрес «GeeksforGeeks» в качестве запроса, используя заголовки.
Java
import com.google.common.collect.Lists; import org.apache.http.Header; РЕКОМЕНДУЕМЫЕ СТАТЬИ |