以下是一个使用 **Java + TestNG + Apache HttpClient** 编写的自动化接口测试案例,包含GET/POST请求、断言和参数化测试:
---
### 1. Maven依赖(pom.xml)
```xml
org.apache.httpcomponents
httpclient
4.5.13
com.alibaba
fastjson
1.2.83
org.testng
testng
7.7.0
test
```
---
### 2. Java自动化测试代码
```java
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
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.*;
import java.io.IOException;
public class ApiTestExample {
private CloseableHttpClient httpClient;
// 测试前初始化HttpClient
@BeforeTest
public void setUp() {
httpClient = HttpClients.createDefault();
}
// 测试GET请求
@Test
public void testGetRequest() throws IOException {
String url = "https://jsonplaceholder.typicode.com/posts/1";
HttpGet request = new HttpGet(url);
HttpResponse response = httpClient.execute(request);
int statusCode = response.getStatusLine().getStatusCode();
String responseBody = EntityUtils.toString(response.getEntity());
// 断言状态码和响应内容
Assert.assertEquals(statusCode, 200);
Assert.assertTrue(responseBody.contains("\"id\": 1"));
}
// 测试POST请求(参数化测试)
@Test(dataProvider = "postData")
public void testPostRequest(String inputJson, String expectedTitle) throws IOException {
String url = "https://jsonplaceholder.typicode.com/posts";
HttpPost request = new HttpPost(url);
// 设置请求头和JSON请求体
request.setHeader("Content-Type", "application/json");
request.setEntity(new StringEntity(inputJson));
HttpResponse response = httpClient.execute(request);
String responseBody = EntityUtils.toString(response.getEntity());
// 断言响应内容
Assert.assertTrue(responseBody.contains("\"title\":\"" + expectedTitle + "\""));
}
// 参数化数据提供者
@DataProvider(name = "postData")
public Object[][] providePostData() {
return new Object[][]{
// 输入JSON,期望返回的title字段
{"{\"title\":\"Foo\",\"body\":\"Bar\",\"userId\":1}", "Foo"},
{"{\"title\":\"Hello\",\"body\":\"World\",\"userId\":2}", "Hello"}
};
}
// 测试后关闭HttpClient
@AfterTest
public void tearDown() throws IOException {
httpClient.close();
}
}
```
---
### 3. 代码说明
1. **依赖库**:
- `HttpClient`:发送HTTP请求。
- `TestNG`:管理测试用例和断言。
- `FastJSON`(可选):用于复杂JSON响应的解析(本例未使用,仅展示依赖)。
2. **关键功能**:
- **GET请求**:验证状态码和响应内容。
- **POST请求**:发送JSON数据并验证返回结果。
- **参数化测试**:通过`@DataProvider`提供多组测试数据,提升用例覆盖率。
3. **运行方式**:
- 使用IDE(如IntelliJ IDEA)右键运行测试类。
- 或通过Maven命令行执行:`mvn test`。
---
### 4. 扩展方向
- **增加日志记录**:集成Log4j或Slf4j记录请求/响应详情。
- **封装通用方法**:将HTTP请求、断言逻辑封装为工具类。
- **环境配置管理**:通过`@Parameters`或配置文件(如application.yml)管理测试环境URL。
- **自动化报告**:集成Allure或ExtentReports生成测试报告。
如果需要更复杂的场景(如鉴权、文件上传、性能测试),可以进一步扩展代码! 🚀
评论区: