news 2026/4/15 13:47:56

如何搭建接口自动化测试框架?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何搭建接口自动化测试框架?

🍅点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快

一、原理及特点

  • 参数放在XML文件中进行管理
  • 用httpClient简单封装一个httpUtils工具类
  • 测试用例管理使用了testNg管理,使用了TestNG参数化测试,通过xml文件来执行case。
  • 测试报告这里用到第三方的包ReportNG 项目组织用Maven

二、准备

  • 使用工具:eclipse,maven
  • 用到的第三方jar包:dom4j、reportng、testng
  • 理解难点:httpUtils和xmlUtil工具类的封装;dom4j使用;CookieStore的应用

三、框架构思

1、项目结构

2、用例执行流程

3、接口调用流程

4、调度脚本流程

四、框架实现

1、输入参数

1.1 参数放在XML文件中进行管理

例:这里测试获取角色的接口输入参数为,page和rows,mapRole.xml内容如下

<?xml version="1.0" encoding="UTF-8"?> <map> <bean beanName="GetRole"> <!--Locator lists --> <locator name="page" value="1"></locator> <locator name="rows" value="10"></locator> </bean> </map>

1.2 封装一个xmlUtil工具类负责读取XML,使用第三方的jar包dom4j

1.2.1 xmlUtil中readXMLDocument方法返回值为HashMap<String, String>

public static HashMap<String, String> readXMLDocument(String beanName,String xmlName){ }

2、返回参数

2.1 创建一个接口返回对象ResponseBean

对象ResponseBean,包括status、statusCode、contentType、body、url、method、cookies

2.2 在工具类中在创建一个ReponseUtil工具类

ReponseUtil工具类负责将请求的返回数据CloseableHttpResponse 转换成ResponseBean

public ResponseBean setResponseBean(CloseableHttpResponse httpResponse) { }

3、测试用例

测试用例管理使用了TestNG管理 ,使用了TestNG参数化测试,通过xml文件来执行case

3.1 测试case脚本

public class GetRoleTest { static CookieStore cookieStore ; static CookieUtil cookieUtil=new CookieUtil() ; CloseableHttpClient client; HttpUtils httpUtils=HttpUtils.getInstance(); @Parameters({ "url", "objBean" ,"statusCode","xmlName"}) @BeforeSuite /* * 登录进入系统获取JSESSIONID放入到CookieStore中 * */ public void TestLoginIn(String url ,String objBean, String statusCode,String xmlName) { Map<String,String> params=xmlUtil.readXMLDocument(objBean,xmlName); client = HttpClients.createDefault(); CloseableHttpResponse httpResponse= httpUtils.post(url, params, client, cookieStore); //cookieUtil.printResponse(httpResponse); cookieStore=cookieUtil.setCookieStore(httpResponse); } @Parameters({ "url", "objBean" ,"statusCode","body","xmlName"}) @Test(priority = 2) public void TestGetRole(String url ,String objBean, String statusCode,String body,String xmlName) { Map<String,String> params=xmlUtil.readXMLDocument(objBean,xmlName); client = HttpClients.custom().setDefaultCookieStore(cookieStore).build(); CloseableHttpResponse httpResponse= httpUtils.post(url, params, client, cookieStore); ResponseBean rb=new ReponseUtil().setResponseBean(httpResponse); // add Assert Assert.assertEquals("OK", rb.getStatus()); Assert.assertEquals(statusCode, rb.getStatusCode()); Assert.assertEquals(true, rb.getBody().contains(body)); } @AfterSuite public void closeClient(){ try { // 关闭流并释放资源 client.close(); } catch (IOException e) { e.printStackTrace(); } } }

[注] 因为API接口测试时每次都要校验Cookie,所有我们每次都先执行登录操作去获取Cookie

3.2 xml文件的编写

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="TestGetRole" parallel="classes" thread-count="5"> <parameter name="url" value="/sys/login" /> <parameter name="objBean" value="loginIn" /> <parameter name="status" value="OK" /> <parameter name="statusCode" value="200" /> <parameter name="xmlName" value="mapRole" /> <test name="TestGetRole" preserve-order="true"> <parameter name="url" value="/json/getRoleInfo" /> <parameter name="objBean" value="GetRole" /> <parameter name="status" value="OK" /> <parameter name="statusCode" value="200" /> <parameter name="body" value="roleName" /> <classes> <class name="com.lc.testScript.GetRoleTest"> <methods> <include name="TestGetRole" /> <!--<include name="TestGetRole2" />--> </methods> </class> </classes> </test> </suite>

右键->run as ->TestNG Suite,这个场景的的测试用例就可以运行了

4、测试报告和项目组织

测试报告这里用到第三方的包ReportNG 项目组织用Maven

<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> .......................................... .......................................... .......................................... <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <xmlFileName1>TestGetRole.xml</xmlFileName> .................这里写testNG对应的XML名称---------------------- <xmlFileName10>TestGetUser.xml</xmlFileName> </properties> <dependencies> .......................... </dependencies> <build> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.19</version> <configuration> <suiteXmlFiles> <suiteXmlFile>src/test/java/testSuites/${xmlFileName}</suiteXmlFile> .................略............ ..............这里的和properties中的xmlFileName想对应............ <suiteXmlFile>src/test/java/testSuites/${xmlFileName10}</suiteXmlFile> </suiteXmlFiles> </configuration> </plugin> <!-- 添加插件,添加ReportNg的监听器,修改最后的TestNg的报告 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.5</version> <configuration> <properties> <property> <name>usedefaultlisteners</name> <value>false</value> </property> <property> <name>listener</name> <value>org.uncommons.reportng.HTMLReporter</value> </property> </properties> <workingDirectory>target/</workingDirectory> </configuration> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.5.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>

[注] 因为是maven的项目所以要将testSuite的xml文件放在maven的test目录下,这样右键pom.xml文件maven test,所有的测试用例就开始执行了

测试报告

框架目前存在的不足。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 8:43:08

Ruby编程最佳实践

Ruby编程最佳实践 【免费下载链接】md2key Convert markdown to keynote 项目地址: https://gitcode.com/gh_mirrors/md/md2key 您的名字 代码规范 使用有意义的变量名保持方法简短专注编写清晰的注释 性能优化技巧 避免不必要的对象创建合理使用缓存机制优化数据库…

作者头像 李华
网站建设 2026/4/12 10:36:52

【前端】从零开始搭建现代前端框架:React 19、Vite、Tailwind CSS、ShadCN UI-第四章《统一的代码风格与严格的代码质量检查,ESLint 与 Prettier的配置 》

第4章&#xff1a;统一的代码风格与严格的代码质量检查&#xff0c;为项目安装配置ESLint和Prettier在现代前端项目中&#xff0c;ESLint 与 Prettier 的工程化整合非常关键&#xff0c;它决定了&#xff1a;团队代码是否统一自动化格式化是否生效是否能在 VSCode Git Hooks 中…

作者头像 李华
网站建设 2026/4/11 15:07:23

区块链核心知识点梳理(7)-Gas 机制与优化

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录7. Gas 机制与优化7.1 Gas 基础原理7.1.1 为什么需要 Gas&#xff1f;7.1.2 Gas 计算规则7.2 EIP-1559 详解7.2.1 动态 BaseFee 机制7.2.2 Priority Fee&#xff08;…

作者头像 李华
网站建设 2026/4/8 6:00:18

[网鼎杯 2020 朱雀组]Nmap 1

Nmap 相关参数 -iL 读取文件内容&#xff0c;以文件内容作为搜索目标 -o 输出到文件 举例 nmap -iL ip_target.txt -o result.txt 扫描ip_target.txt内包含的ip地址&#xff0c;输出扫描结果至result.txt 读取文件结果 # Nmap 6.47 scan initiated Fri Dec 24 06:48:23 202…

作者头像 李华
网站建设 2026/4/10 16:32:53

从0到1搭建智能分析OBS埋点数据的AI Agent:实战指南

在数据驱动业务决策的时代&#xff0c;OBS埋点数据作为用户行为分析的核心资产&#xff0c;其价值挖掘却常因技术门槛陷入困境。传统分析流程中&#xff0c;工程师需手动解析表结构、编写SQL查询、生成可视化图表&#xff0c;不仅效率低下且难以支持灵活的探索式分析。本文将结…

作者头像 李华
网站建设 2026/4/15 8:00:02

ABB机器人系统自带调试例行程序介绍

ABB机器人系统自带调试例行程序介绍1.AxisCalibration (轴校准)功能&#xff1a;用于校准机器人每个轴的“偏置”或“零点位置”。机器人在出厂时&#xff0c;每个关节轴都有一个机械的零点标记&#xff0c;此程序就是通过示教器操作&#xff0c;将软件中的零点位置与机械标记对…

作者头像 李华