4.5 TestNG 集成 HttpClient
首先将 TestNG 和 HttpClient 进行集成,然后进行 HTTP 接口自动化测试。
在 pom.xml 文件的 <dependencies> 标签中输入以下粗体部分内容:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>cn.edu.bjut</groupId> <artifactId>httpinterfacetest</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.9</version> </dependency> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>6.14.3</version> <scope>test</scope> </dependency> <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20180813</version> </dependency> <dependency> <groupId>org.dom4j</groupId> <artifactId>dom4j</artifactId> <version>2.1.1</version> </dependency> <dependency> <groupId>jaxen</groupId> <artifactId>jaxen</artifactId> <version>1.2.0</version> </dependency> </dependencies> </project>
保存 pom.xml 文件,这时 Maven 会自动下载依赖的 jar 包。这里添加了 4 个依赖。
①TestNG:自动化测试框架 TestNG 的依赖。
②JSON:用于处理 JSON 数据,在 RESTful POST 请求的请求体及响应体中均可使用。
③DOM4J:用于处理 XML 数据,在 SOAP 请求的请求体及响应体中均可使用。
④JAXEN:当 DOM4J 用 XPath 方式获取节点时需要依赖该 jar 包。
依赖 jar 包下载完成后,在工程(httpinterfacetest)上用鼠标右击,从弹出的快捷菜单中选择「TestNG → Convert to TestNG」选项,在工程中生成 testng.xml 文件。
4.5.1 RESTful 接口自动化测试
1.编写 GET 接口自动化测试用例
把 Test Class 重命名为 GetMobilePhoneTest,删除 GetMobilePhoneTest 中的内容,输入以下代码:
package cn.edu.bjut; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.utils.URIBuilder; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import org.testng.Assert; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import java.net.URI; public class GetMobilePhoneTest { private CloseableHttpClient client; private CloseableHttpResponse response; @BeforeClass public void init() { client = HttpClients.createDefault(); } @Test public void testCase1() { Assert.assertEquals("{\"brand\":\"Apple\",\"model\":\"iPhone 6S\",\"os\":\"IOS\"}", sendHttpGetRequest(client, "iPhone 6S")); } @Test public void testCase2() { Assert.assertEquals("", sendHttpGetRequest(client, "")); } @Test public void testCase3() { Assert.assertEquals("", sendHttpGetRequest(client, null)); } @Test public void testCase4() { Assert.assertEquals("", sendHttpGetRequest(client, "01234567890123456789012345678901234567890123456789")); } @AfterClass public void clear() { try { response.close(); client.close(); } catch (Exception e) { e.printStackTrace(); } } //定义一个私有的方法,用来发送Get请求 private String sendHttpGetRequest(CloseableHttpClient client, String model) { String result = null; try { URI uri = new URIBuilder().setScheme("http").setHost("localhost").setPort(8080).setPath("/mobilePhone") .setParameter("model", model).build(); response = client.execute(new HttpGet(uri)); result = EntityUtils.toString(response.getEntity()); } catch (Exception e) { e.printStackTrace(); } return result; } }
修改 testng.xml 文件,在<;test>;标签中新增以下粗体部分内容:
保存所做的修改,在 testng.xml 上用鼠标右击,从弹出的快捷菜单中选择「Run As → TestNG Suite」选项,可以看到如图 4-2 所示的测试报告。
图 4-2
下面对运行结果进行说明。
①init()方法初始化了一个 HTTP 客户端,并在 sendHttpGetRequest()方法中使用,最后在 clear()方法中关闭。
② 将构造 URI、发送 GET 请求和转换服务器响应等过程封装在 sendHttpGetRequest()方法中,通过传递 HTTP 客户端和参数来使用该方法。
③ 在 clear()方法中对 HTTP 客户端和服务器响应进行关闭操作,在操作过程中可能出现异常,所以需要对异常进行捕获和处理。
2.POST 接口自动化测试用例编写