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;РЕКОМЕНДУЕМЫЕ СТАТЬИ |