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

2023-11-03

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

【敢称全站第一】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是否可以尝试一下呢

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

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

接口自动化测试框架搭建【附详细搭建视频】 的相关文章

随机推荐

  • Unicode编码详解

    Unicode定义 Unicode 统一码 万国码 单一码 是计算机科学领域里的一项业界标准 包括字符集 编码方案等 Unicode 是为了解决传统的字符编码方案的局限而产生的 它为每种语言中的每个字符设定了统一并且唯一的二进制编码 以满足
  • Java svg图片转png图片

    Java svg图片转png图片 比较简单 主要使用batik包里的batik transcoder模块 网上的教程引的包太多了 只是转化的话 这个包就够了 你们引用的时候 记得查一下version 之前我引用的包太老了 项目就起不来了 p
  • Windows下端口号被占用排查方法

    1 WIN R CMD进入命令行 本示例端口号为8081 实操根据自己的端口号来 查找哪个进程号 PID 占用了本端口号 netstat ano findstr 8081 通过PID查到对应占用程序 tasklist findstr 142
  • IP:网际协议

    本文是为了记录学习过程中的知识点所写 用于对自己的理解做一个记录 4位版本 目前的版本号为4 因此IP也称为IPv4 4位首部长度 首部占32bit 4字节 的数目 4bit最大值为15 也就是说最多为480bit 即60字节 包括选项 也
  • Axios----web数据交互方式

    一 VUE生命周期 Created gt Vue 对象创建完成触发的函数 二 缩写 v bind 给属性赋值 缩写为 v on 事件绑定 缩写为 缩写 三 计算属性 computed中定义 以匿名函数形式实现数据的操作 计算 返回的值为计算
  • Docker容器数据卷详解

    文章目录 1 数据卷介绍 2 简单使用 3 MySQL容器建立数据卷同步数据 4 常用命令 5 具名挂载和匿名挂载 5 1 匿名挂载 5 2 具名挂载 6 Dockerfile中设置数据卷 7 容器数据卷 1 数据卷介绍 Docker将运用
  • 详解MOSFET详解MOSFET与IGBT的本质区别与IGBT的本质区别

    http www dzsc com data 2017 11 27 113799 html
  • mysql中if()函数使用

    在mysql中if 函数的用法类似于java中的三目表达式 其用处也比较多 具体语法如下 IF expr1 expr2 expr3 如果expr1的值为true 则返回expr2的值 如果expr1的值为false 则返回expr3的值 其
  • (十)蓝牙MAC地址

    BLE MAC地址分类 1 BLE设备可以使用公共地址和随机地址 至少使用其中一种 也可以有两种 地址的长度是6个字节 严格来说广播中不用包含地址 默认已经有了 2 公共地址 从IEEE购买 保证唯一性 3 随机静态地址 自己定义 上电初始
  • 计算机网络不完全整理(下)--春招实习

    HTTP 从输入url到显示主页的过程 参考 segmentfault com a 119000000 DNS解析 网址到ip地址的转换 TCP连接 HTTP协议使用TCP作为传输层协议 发送HTTP请求 服务器处理请求并返回HTTP报文
  • Flink Watermark分配策略

    Flink Watermark分配策略 WaterMark是Flink为了处理Event Time窗口计算提出的一种机制 本质上是一种时间戳 主要用来处理乱序数据或者延迟数据的 这里通常watermark机制结合window来实现 wate
  • Spring 单例 bean 的线程安全问题

    首先解释一下什么是单例 bean 单例的意思就是说在 Spring IoC 容器中只会存在一个 bean 的实例 无论一次调用还是多次调用 始终指向的都是同一个 bean 对象 用代码来解释单例 bean public class User
  • Cisco L2TP 配置实例

    1 在企业端配置L2TP ENT LNS config username cisco password 0 cisco ENT LNS config vpdn enable ENT LNS config vpdn group myl2tp
  • 创建小程序WePY项目过程报错指南

    笔者在第一次创建小程序 WePY 项目的时候 遇到了各种各样的问题 也在网上搜索了一番 终于也还是把 WePY 项目创建起来了 为了日后遇到问题更快的处理 笔者也把在创建过程的遇到的问题记录了下来 如下 1 在 WebStorm 中创建一个
  • 用Python实现的这五个小游戏,你真的学会了嘛?

    相关文件 源码分享 问题解答 关注小编 私信小编领取哟 当然别忘了一件三连哟 对了大家可以关注小编的公众号哟 有很多资源可以领取的哟 Python日志 游戏名称 五子棋 雷霆战机 贪吃蛇 坦克大战 俄罗斯方块 开发环境 Python版本 3
  • 区块链DAPP开发入门课程(PHP版)

    1 前言及环境部署 1 1 课程说明 为什么有这个课程 入门区块链开发已有些时日 走过的坑实在是太多了 对于像我这种从事互联网软件开发多事的老兵来说 上手都有些吃力 可想而知对于新手来说就更难了 尤其是完全靠自学又没有人指导的情况 可能一个
  • navicat导入sql文件_中级数据分析-SQL入门

    一 如何快速学会SQL 黄金圈原则 1 为什么 目的 很多公司数据存放在数据库当中 SQL是操作数据库的语言 所以目前SQL是数据分析岗位几乎必备的技能 也是面试当中必须考察的能力 2 如何做 方法 入门 什么是数据库 sql 表和数据的新
  • c++日志库实战——spdlog,是不是感觉log4cxx有点笨重,不妨试一试spdlog

    c 日志库实战 spdlog 是不是感觉log4cxx有点笨重 不妨试一试spdlog 背景 更新记录 spdlog是什么 spdlog快速入门 编译 CMake手动方式 Vcpkg全自动方式 推荐 原生用法 实战代码 SpdlogWarp
  • 【深度学习】 Python 和 NumPy 系列教程(十四):Matplotlib详解:1、2d绘图(下):箱线图、热力图、面积图、等高线图、极坐标图

    目录 一 前言 二 实验环境 三 Matplotlib详解 1 2d绘图类型 0 设置中文字体 1 5 折线图 散点图 柱状图 直方图 饼图 6 箱线图 Box Plot 7 热力图 Heatmap 8 面积图 Area Plot 9 等高
  • 接口自动化测试框架搭建【附详细搭建视频】

    如果遇到什么问题建议观看下面视频 敢称全站第一 B站最全的Python自动化测试深度学习教程 学完即就业 小白也能信手拈来 帮你少走99 的弯路 一 原理及特点 参数放在XML文件中进行管理 用httpClient简单封装一个httpUti