news 2026/4/15 17:35:21

接口自动化测试框架搭建

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
接口自动化测试框架搭建
一、原理及特点
  1. 参数放在XML文件中进行管理
  2. 用httpClient简单封装一个httpUtils工具类
  3. 测试用例管理使用了testNg管理,使用了TestNG参数化测试,通过xml文件来执行case。
  4. 测试报告这里用到第三方的包ReportNG 项目组织用Maven
二、准备

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

三、框架构思

1、项目结构

2、用例执行流程

3、接口调用流程

4、调度脚本流程

四、框架实现
1、输入参数

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

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

  1. <?xml version="1.0" encoding="UTF-8"?>

  2. <map>

  3. <bean beanName="GetRole">

  4. <!--Locator lists -->

  5. <locator name="page" value="1"></locator>

  6. <locator name="rows" value="10"></locator>

  7. </bean>

  8. </map>

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

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

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

  2. }

AI写代码python运行

2、返回参数
2.1 创建一个接口返回对象ResponseBean

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

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

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

  1. public ResponseBean setResponseBean(CloseableHttpResponse httpResponse) {

  2. }

AI写代码python运行

3、测试用例

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

3.1 测试case脚本

  1. public class GetRoleTest {

  2. static CookieStore cookieStore ;

  3. static CookieUtil cookieUtil=new CookieUtil() ;

  4. CloseableHttpClient client;

  5. HttpUtils httpUtils=HttpUtils.getInstance();

  6. @Parameters({ "url", "objBean" ,"statusCode","xmlName"})

  7. @BeforeSuite

  8. /*

  9. * 登录进入系统获取JSESSIONID放入到CookieStore中

  10. * */

  11. public void TestLoginIn(String url ,String objBean, String statusCode,String xmlName) {

  12. Map<String,String> params=xmlUtil.readXMLDocument(objBean,xmlName);

  13. client = HttpClients.createDefault();

  14. CloseableHttpResponse httpResponse= httpUtils.post(url, params, client, cookieStore);

  15. //cookieUtil.printResponse(httpResponse);

  16. cookieStore=cookieUtil.setCookieStore(httpResponse);

  17. }

  18. @Parameters({ "url", "objBean" ,"statusCode","body","xmlName"})

  19. @Test(priority = 2)

  20. public void TestGetRole(String url ,String objBean, String statusCode,String body,String xmlName) {

  21. Map<String,String> params=xmlUtil.readXMLDocument(objBean,xmlName);

  22. client = HttpClients.custom().setDefaultCookieStore(cookieStore).build();

  23. CloseableHttpResponse httpResponse= httpUtils.post(url, params, client, cookieStore);

  24. ResponseBean rb=new ReponseUtil().setResponseBean(httpResponse);

  25. // add Assert

  26. Assert.assertEquals("OK", rb.getStatus());

  27. Assert.assertEquals(statusCode, rb.getStatusCode());

  28. Assert.assertEquals(true, rb.getBody().contains(body));

  29. }

  30. @AfterSuite

  31. public void closeClient(){

  32. try {

  33. // 关闭流并释放资源

  34. client.close();

  35. } catch (IOException e) {

  36. e.printStackTrace();

  37. }

  38. }

  39. }

3.2 xml文件的编写

  1. <?xml version="1.0" encoding="UTF-8"?>

  2. <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">

  3. <suite name="TestGetRole" parallel="classes" thread-count="5">

  4. <parameter name="url" value="/sys/login" />

  5. <parameter name="objBean" value="loginIn" />

  6. <parameter name="status" value="OK" />

  7. <parameter name="statusCode" value="200" />

  8. <parameter name="xmlName" value="mapRole" />

  9. <test name="TestGetRole" preserve-order="true">

  10. <parameter name="url" value="/json/getRoleInfo" />

  11. <parameter name="objBean" value="GetRole" />

  12. <parameter name="status" value="OK" />

  13. <parameter name="statusCode" value="200" />

  14. <parameter name="body" value="roleName" />

  15. <classes>

  16. <class name="com.lc.testScript.GetRoleTest">

  17. <methods>

  18. <include name="TestGetRole" />

  19. <!--<include name="TestGetRole2" />-->

  20. </methods>

  21. </class>

  22. </classes>

  23. </test>

  24. </suite>

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

4、测试报告和项目组织

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

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

  3. <modelVersion>4.0.0</modelVersion>

  4. ..........................................

  5. ..........................................

  6. ..........................................

  7. <properties>

  8. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

  9. <xmlFileName1>TestGetRole.xml</xmlFileName>

  10. .................这里写testNG对应的XML名称----------------------

  11. <xmlFileName10>TestGetUser.xml</xmlFileName>

  12. </properties>

  13. <dependencies>

  14. ..........................

  15. </dependencies>

  16. <build>

  17. <plugin>

  18. <groupId>org.apache.maven.plugins</groupId>

  19. <artifactId>maven-surefire-plugin</artifactId>

  20. <version>2.19</version>

  21. <configuration>

  22. <suiteXmlFiles>

  23. <suiteXmlFile>src/test/java/testSuites/${xmlFileName}</suiteXmlFile>

  24. .................略............

  25. ..............这里的和properties中的xmlFileName想对应............

  26. <suiteXmlFile>src/test/java/testSuites/${xmlFileName10}</suiteXmlFile>

  27. </suiteXmlFiles>

  28. </configuration>

  29. </plugin>

  30. <!-- 添加插件,添加ReportNg的监听器,修改最后的TestNg的报告 -->

  31. <plugin>

  32. <groupId>org.apache.maven.plugins</groupId>

  33. <artifactId>maven-surefire-plugin</artifactId>

  34. <version>2.5</version>

  35. <configuration>

  36. <properties>

  37. <property>

  38. <name>usedefaultlisteners</name>

  39. <value>false</value>

  40. </property>

  41. <property>

  42. <name>listener</name>

  43. <value>org.uncommons.reportng.HTMLReporter</value>

  44. </property>

  45. </properties>

  46. <workingDirectory>target/</workingDirectory>

  47. </configuration>

  48. </plugin>

  49. <plugin>

  50. <artifactId>maven-compiler-plugin</artifactId>

  51. <version>3.5.1</version>

  52. <configuration>

  53. <source>1.8</source>

  54. <target>1.8</target>

  55. </configuration>

  56. </plugin>

  57. </plugins>

  58. </build>

  59. </project>

测试报告

框架目前存在的不足

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

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

AI智能实体侦测服务内存溢出?轻量级部署优化实战案例

AI智能实体侦测服务内存溢出&#xff1f;轻量级部署优化实战案例 1. 背景与问题提出 在自然语言处理&#xff08;NLP&#xff09;的实际落地场景中&#xff0c;命名实体识别&#xff08;Named Entity Recognition, NER&#xff09;是信息抽取、知识图谱构建和智能搜索等任务的…

作者头像 李华
网站建设 2026/3/28 19:23:00

网络安全面试宝典:从OWASP到内网渗透,小白到专家的进阶指南

【收藏必备】网络安全面试宝典&#xff1a;从OWASP到内网渗透&#xff0c;小白到专家的进阶指南 本文全面整理网络安全面试题&#xff0c;涵盖HVV、OWASP Top 10漏洞原理与修复方法。详细讲解内网渗透技术、权限维持方法、Windows/Linux系统提权技巧&#xff0c;以及渗透测试流…

作者头像 李华
网站建设 2026/4/8 19:01:05

RaNER模型置信度输出:AI智能侦测服务结果可信度评估

RaNER模型置信度输出&#xff1a;AI智能侦测服务结果可信度评估 1. 引言&#xff1a;AI 智能实体侦测服务的现实挑战 在信息爆炸的时代&#xff0c;非结构化文本数据&#xff08;如新闻、社交媒体、公文&#xff09;呈指数级增长。如何从中高效提取关键信息&#xff0c;成为自…

作者头像 李华
网站建设 2026/4/7 16:30:05

《心理学导论》学习笔记・我们如何理解世界 —— 知觉的建构之旅

《心理学导论》学习笔记・我们如何理解世界 —— 知觉的建构之旅一、核心定位&#xff1a;知觉 —— 从 “感受刺激” 到 “赋予意义”如果说感觉是感觉器官捕捉物理能量、转化为神经信号的 “原材料采集” 过程&#xff0c;那么知觉就是大脑对这些零碎、无意义的感觉信号进行组…

作者头像 李华
网站建设 2026/4/14 13:11:54

导师严选2026 AI论文工具TOP9:专科生毕业论文必备测评

导师严选2026 AI论文工具TOP9&#xff1a;专科生毕业论文必备测评 2026年AI论文工具测评&#xff1a;为专科生量身打造的高效写作指南 随着人工智能技术在学术领域的广泛应用&#xff0c;越来越多的专科生开始借助AI论文工具提升写作效率与论文质量。然而&#xff0c;面对市场上…

作者头像 李华