接口自动化测试框架搭建【附详细搭建视频】

如果遇到什么问题建议观看下面视频:

【敢称全站第一】B站最全的Python自动化测试深度学习教程!学完即就业,小白也能信手拈来!帮你少走99%的弯路~

一、原理及特点

  参数放在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){
 
  }
 
  参数xmlName(xml文件的名字); 参数beanName(xml文件中节点的名称);
 
  1.3 封装一个CookieUtil工具类,通过CookieStore储存cookie
 
  1.3.1 CookieUtil类中setCookieStore方法返回值为CookieStore
 
  public  CookieStore setCookieStore(HttpResponse httpResponse) {
 
  }
 
  1.4 用httpClient简单封装一个httpUtils工具类有get.post,put,delete方法
 
  1.4.1 httpUtils中post封装方法如下:
 
  public CloseableHttpResponse post(String url, Map<String, String> params,CloseableHttpClient httpclient,CookieStore cookieStore){
 
  }

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,所有的测试用例就开始执行了

测试报告

 框架目前存在的不足

  1、数据库数据校验这一块的功能还没有完善,计划用MyBatis

  2、参数使用了xml文件配置虽然灵活但有些繁琐,目前还没想到好的解决方案,testlink是否可以尝试一下呢

最后允许我对你们说一段话:

如果你也在往自动化测试开发方向发展

在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势

我的自动化测试之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,所以,我和朋友特意花了一段时间整理编写了以上的《自动化测试工程师进阶路线》,也整理了不少【网盘资源】,需要的朋友可以扫描下方小卡片获取网盘链接。希望会给你带来帮助和方向。

相关推荐
Scott9999HH6 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
码智社7 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海7 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖8 小时前
JDK 26 新特性详解
java·开发语言
马优晨8 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
我的xiaodoujiao10 小时前
API 接口自动化测试详细图文教程学习系列32--Allure测试报告2
python·学习·测试工具·pytest
人邮异步社区10 小时前
怎么把C语言学到精通?
c语言·开发语言
心平气和量大福大11 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf
ttwuai11 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang