接口自动化测试实践分享:基于 TestNG + Allure + HttpClient

🧪 接口自动化测试实践分享:基于 TestNG + Allure + HttpClient

一、背景介绍

在日常接口开发过程中,后端接口的验证往往依赖前端页面或 Postman 等工具。为了实现自动化回归、减少人工测试成本,我基于 Java 生态,选用了以下技术栈构建自动化测试框架:

  • TestNG:测试用例执行框架
  • Allure:生成结构化、可视化的测试报告
  • Apache HttpClient:发送 HTTP 请求
  • Jackson:处理 JSON 格式的数据
  • 外部 JSON 文件:进行测试数据驱动

二、项目结构

src
├── main
│   └── java
│       └── com.mycompany.mall.utils
│           └── HttpClientUtil.java        // HTTP 请求封装
├── test
│   └── java
│       └── com.mycompany.mall.api
│           └── LoginTest.java             // 登录接口测试
│           └── TestBase.java              // 公共工具类
│   └── resources
│       └── test-data
│           └── login.json                 // 登录测试数据

三、关键实现

1. 登录测试类:LoginTest.java

@Listeners(AllureTestNg.class)
public class LoginTest extends TestBase {
    // 使用 Jackson 对象处理 JSON
    private ObjectMapper objectMapper = new ObjectMapper();

    @Description("正常登录")
    @Step("输入:有效的用户名和密码 预期:登录成功,返回 token")
    @Test
    public void testLoginSuccess() throws Exception {
        JsonNode testData = getTestData("test-data/login.json", "testUser");
        String json = objectMapper.writeValueAsString(testData);

        String response = HttpClientUtil.postJson("http://localhost:8080/admin/login", json);
        JsonNode respJson = objectMapper.readTree(response);

        Assert.assertTrue(respJson.has("data") && respJson.get("data").has("token"), "响应体中未找到 token");
    }

    @Description("用户名不存在")
    @Step("输入:无效的用户名 预期:登录失败,提示错误信息")
    @Test
    public void testLoginFailure() throws Exception {
        JsonNode testData = getTestData("test-data/login.json", "testUserFailure");
        String json = objectMapper.writeValueAsString(testData);

        String response = HttpClientUtil.postJson("http://localhost:8080/admin/login", json);

        Assert.assertTrue(response.contains("用户名或密码错误"), "未匹配到错误提示信息");
    }
}

2. HTTP 请求工具类:HttpClientUtil.java

public class HttpClientUtil {
    private static final CloseableHttpClient client = HttpClients.createDefault();

    public static String postJson(String url, String json) throws Exception {
        HttpPost post = new HttpPost(url);
        post.setHeader("Content-type", "application/json");
        post.setEntity(new StringEntity(json, "UTF-8"));

        HttpResponse response = client.execute(post);
        String result = EntityUtils.toString(response.getEntity(), "UTF-8");

        int statusCode = response.getStatusLine().getStatusCode();
        if (statusCode != 200) {
            throw new RuntimeException("请求失败,状态码:" + statusCode + ",响应体:" + result);
        }

        return result;
    }
}

3. 测试数据文件:login.json

{
  "testUser": {
    "username": "admin",
    "password": "admin123"
  },
  "testUserFailure": {
    "username": "wrong_user",
    "password": "wrong_pass"
  }
}

4. 数据读取工具方法(位于 TestBase.java

protected JsonNode getTestData(String path, String key) throws IOException {
    InputStream is = new FileInputStream(path);
    ObjectMapper mapper = new ObjectMapper();
    JsonNode root = mapper.readTree(is);
    return root.get(key);
}

四、测试执行与报告查看

执行测试命令:

mvn clean test

生成 Allure 报告:

allure generate target/allure-results -o target/allure-report --clean
allure open target/allure-report

五、最佳实践建议

项目建议
请求封装建议将 HTTP 请求逻辑抽取封装,提升复用性
数据驱动使用 JSON 管理测试数据,便于维护和拓展
报告质量善用 @Description@Step@Story 丰富测试报告内容
错误断言断言尽量详细,包含失败提示,便于排查问题
日志打印推荐打印请求体、响应体,方便排查问题

六、后续计划

  • 支持 token 自动提取和复用
  • 提供注册、登出、修改密码等完整用例
  • 集成到 CI/CD 流程中(如 GitLab CI、Jenkins)
  • 接口断言支持 JsonPath、Schema 校验

如果你有更多想法或建议,欢迎交流 🙌


需要我帮你转成 Markdown 格式、Word 文档或者 Notion 页面内容吗?

Java接口自动化测试框架的搭建通常涉及到以下几个关键组成部分: 1. 测试框架选择:常见的Java接口测试框架有JUnit, TestNG等。JUnit是最常用的单元测试框架,而TestNG则提供了更多的功能和更灵活的配置。 2. HTTP客户端库:接口测试中,我们需要发送HTTP请求并验证响应。常用的库有Apache HttpClient, OkHttp, Rest-Assured等。Rest-Assured是一个专门用于RESTful服务的测试库,它简化了发送HTTP请求和验证响应的过程。 3. 断言库:为了验证接口返回的结果是否符合预期,通常会使用断言库进行结果校验。常用的断言库包括Hamcrest, AssertJ等。 4. 测试数据管理:在自动化测试中,测试数据的管理非常重要。可以使用XML, JSON, YAML, Excel等文件来管理测试数据,或者使用数据库。在Java中,可以使用对应的库来读取这些文件。 5. 日志记录:为了跟踪测试过程和记录问题,测试框架需要集成日志记录功能。常用的日志框架有Log4j, SLF4J等。 6. 报告生成:测试完成后,通常需要生成报告来展示测试结果。TestNG和JUnit等框架都自带了生成测试报告的功能,或者可以使用第三方报告工具如Allure。 以下是一个简单的Java接口自动化测试框架搭建的示例步骤: 1. 引入依赖库:在项目的pom.xml文件中引入JUnit, Rest-Assured等依赖。 2. 编写测试用例:根据业务需求编写接口测试用例。 3. 配置测试数据:将测试数据配置在相应的文件中,或者在测试代码中直接定义。 4. 编写断言:使用断言库来验证接口返回的结果是否符合预期。 5. 运行测试并生成报告:运行测试并根据配置生成测试报告。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值