接口测试虽然作为版本的一环,但是也是有一套完整的体系,有接口的功能测试、性能测试、安全测试;同时,由于接口的特性,接口的自动化低成本高收益的,使用一些开源工具或一些轻量级的方法,在测试用例开发的成本不高的情况下能去的比较好的测试效果。

开源测试工具Jmeter可以承担接口请求、结果解析和断言的工作,可以作为轻量级接口自动化的实现手段,对于开发能力不强或规模不大的团队也能接受。Jmeter可以在协议层实现基本的功能,包括接口访问、参数化构造、返回值断言和数据库访问,基本足够满足一个轻量级的接口自动化框架的功能。

我们定义一个如下的接口:

入参:

    SearchKeys: 我亲爱的你, //用户输入的查询数据,不能为空PageSize: 10,//分页的Page大小,默认入参为10,前端传入PageIndex: 1,//分页的PageIndex,第几页,前端传入OrderBy: 0,//排序条件:0-销量,1-价格,由前端传入,前端的通过单选控件实现Method: ASC//排序方式:ASC-升序,DESC-降序,前端通过单选控件实现

返回值:

{

"data":

[

{

"CommodityID":"03445f1e-ba55-421d-80fa-1777741bb57e",

"CategoryID":2,

"CommodityName":"双人床solo抽泣",

"Thumb":"http://img4.imgtn.bdimg.com/it/u=1924829949,2185178641&fm=27&gp=0.jpg",

"SalePrice":16.0,

"SaleAmount":13

}

],

"records":1,

"status":true,

"message":""

}

代码处理逻辑:按照分页的页面和大小,从Commodity表一张表中直接查询到对应数据,查询结果进行实例化为Json处理后返回,对应字段均存在Commodity表中,对应数据如下:

测试的思路为,按照实现的业务逻辑,取除了Thumb的字段作为断言字段,并构造SQL进行查询,如果查询到对应数据,则证明接口返回通过。具体构造的SQL如下:

SELECT*
FROMCommodity
WHERECommodityID = '03445f1e-ba55-421d-80fa-1777741bb57d'
AND CategoryID = 2
AND CommodityName = '我亲爱的你大事不妙'
AND SalePrice = 13.0
AND SaleAmount = 130

那么我们需要进行的工作,按照顺序即为访问接口-获取返回值-解析回参-构造SQL-查询-判断结果。整个过程,都能通过Jmeter进行实现,上手起来也比较容易。具体操作过程如下:

一.Http请求:

在测试计划下新增一个线程组,并在线程组下新增一个http请求:

添加Http请求以后,按照下图所示可以设置请求,需要注意的是如果要输入协议,就不要在服务器名称或IP前加http或https了,否则会直接访问到http://http://上去 :

一般来说,接口在访问的时候都需要在验证Header中的身份信息,Jmeter中提供了头信息管理的功能:添加-配置元件-Http请求头管理器:

使用结果树查看接口返回值:添加-监听器-查看结果树,可以明确看到接口的返回报文:、

入参:

PS:Jmeter记录的入参会进行自动URL编码处理,有需要的可以自己做URL解码即可

回参:

这样,我们就完成了一个基本的Http请求的访问。

二.实现参数化

想必大家注意到了,我们之前在通过Http请求构造入参时,对SearchKey这个入参并没有填入之前构造的参入,而是使用了${Key},在Jmeter中,参数的传入就是通过${参数名}的方式进行的。

一般来说,我们测试过程中不一定能保证数据的稳定或需要构造多个不同的参数进行处理 ,很多时候需要考虑做参数化的处理,一定程度上实现动态构造。Jmeter中提供了通过读取本地文件进行参数化的功能:

读取配置文件中的参数:在添加的http请求下添加配置元件-CSV DATA SET CONFIG:

添加CSV 数据配置器后,按照如下设置即可设置参数:

需要调用的时候, 直接使用 ${参数名} 进行调用即可。

三.使用JSON Extractor处理返回值中的Json

通常来说,现在大部分的接口返回值都序列化处理成为Json格式进行返回。虽然使用正则获取返回值也可以,但是Jmeter提供了一个更加方便的插件:JSON Extractor处理Json。

下载插件https://jmeter-plugins.org/wiki/JSONPathExtractor/,下载解压后,把lib里的两个jar拷贝到jmeter的lib目录,lib/ext里面的两个jar拷贝到jmeter的lib/ext目录,重启jmeter即可。

我们以处理以下Json中的CommodityID为例,来获得对应的值:

{"data":[{"CommodityID":"03445f1e-ba55-421d-80fa-1777741bb57e","CategoryID":2,"CommodityName":"双人床solo抽泣","Thumb":"http://img4.imgtn.bdimg.com/it/u=1924829949,2185178641&fm=27&gp=0.jpg","SalePrice":16.0,"SaleAmount":13}],"records":1,"status":true,"message":""}

注意到CommodityID在Json数组中,所以Json路径为data[0]["CommodityID"],需要添加Json数组中的索引值 。我们在Json Path Expreeions填入 $.data[0].[CommodityID],这样我们就取出了CommodityID的值;在后续之后,我们就可以通过${CommodityID}的方式调用取出的值。

如法炮制,我们可以取出所有的断言字段。

按照之前的分析,我们可以构造使用断言字段构造一条SQL访问数据库,如果所有的字段都返回正确,那么查询结果应该是不为空的;按照如下的格式,我们就可以构造出我们所需要的断言SQL了:

SELECT*FROMCommodity
WHERECommodityID = '${CommodityID}'
AND CategoryID = ${CategoryID}
AND CommodityName = '${ CommodityName }'
AND SalePrice = ${SalePrice}
AND SaleAmount = ${SaleAmount}

接下来,我们只需要使用Jmeter执行该SQL,并对返回结果进行验证,即可实现这个轻量级的接口自动化。

四.使用JDBC访问MySql:

Jmeter提供了JDBC的插件进行数据库访问,但是在此之前,我们需要下载MySql的JDBC驱动包。一般来说,JDBC驱动包版本需要和数据库版本匹配,否则可能因为驱动的关系导致出错。

1.在测试计划下添加,导入对应的JDBC驱动包:

2.添加-配置元件,JDBC Connection Configuration

具体设置如下所示,蓝色框线内的部分一般可以直接使用默认设置,红色框线内需要我们手动填写:

底部的数据库连接字符串填写如下:

DataBaseURL: 数据库连接字符串,使用MySql的同学按照以下格式填写即可:

jdbc:mysql://localhost:2000/AutoTest?useUnicode=true&characterEncoding=utf8
jdbc:mysql://数据库服务器地址:端口号/数据库名,在测试过程中遇到过因为编码问题,查询条件中的中文字符串不生效导致断言结果错误,所以需要添加编码方式,设置的与数据库本身的编码方式相同即可,我使用的是UTF-8
JDBC Driver Class:直接填写com.mysql.jdbc.Driver即可
UserName/Password:连接数据库的账号和密码

3.使用JDBC Request进行数据库操作:添加-Sampler-JDBC Request

JDBC的操作比较简单,我们只需要通过参数名调用设置的JDBC Connection Configuration,然后输入要执行的SQL即可:

添加一个查看结果树,我们就能看到SQL的执行结果了:

构造的SQL:

查询的结果:

五.使用断言验证返回结果:

Jmeter提供了丰富的断言功能,可以用于检查响应数据与预期是否一致,可以用作接口自动化测试的结果校验。对于一次请求,如果通过的话,断言结果中只会打印一行请求的名称;如果失败,则除了请求的名称外,还会有一行失败的原因(不同类型的断言,结果不同),也可以帮助我们定位返回值错误的内容。此外,一个Sampler可以添加多个断言,根据你的检查需求来添加相应的断言,当Sampler下所有的断言都通过了,那么才算request成功。

那么针对这个用例,我们可以把问题简单化:既然数据库返回的查询结果查询到数据就算测试通过,那么JDBC Request的返回值中是一定有我们的传入的参数的,那么我们就可以直接使用基本的文本工具来进行断言的验证,返回结果包含一个或几个断言字段,那么就能断言测试通过了:

添加-断言-响应断言,响应文本中包括关键的参数即可:

那么如果返回结果正确,断言测试通过,结果树中只有一条返回的数据:

如果返回结果错误,那么断言测试失败,结果树中会新增一行失败的原因:

我们构造一个错误的场景,将返回字段中的SaleAmount(销量)返回为SalePrice(价格),那么我们的查询结果为空,返回的断言结果就会是失败的,因为返回值中没有包括传入的CommodityID:

断言失败,因为没有匹配到对应的CommodityID数据。

至此,我们就使用Jmeter完成了一个轻量级的接口自动化测试的用例构造,构造好的用例可以用于后续版本的回归测试。

转载于:https://www.cnblogs.com/rd-ddddd/p/9578242.html

Jmeter笔记(Ⅱ)使用Jmeter实现轻量级的接口自动化测试相关推荐

  1. JMeter笔记9 | JMeter参数化

    9 | JMeter参数化 1 测试对象 2 分析 3 JMeter参数化 3.1 配置元件 3.2 CSV Data Set Config 3.2.1 元件介绍 3.2.2 界面参数 3.3 函数助 ...

  2. jmeter的java测试框架_性能测试学习之路 (四)jmeter 脚本开发实战(JDBC JMS 接口脚本 轻量级接口自动化测试框架)...

    1.业务级脚本开发 登录脚本->思路:在线程组下新建两个HTTP请求,一个是完成访问登录页,一个是完成登录的数据提交. 步骤如下: 1) 访问登录页 2) 提交登录数据的HTTP PS:对于业务 ...

  3. 学习笔记-JMeter 进行接口压力测试

    一.压力测试场景设置 1.场景设定:进行接口压力测试时,有单场景也有混合场景.单场景就是对一个接口进行请求:混合场景需要对多个接口进行请求,在流程类业务场景会运用到 2.压测时间设定:通常时间为10- ...

  4. jmeter中没有sampler_JMeter 接口自动化测试篇 29

    接口自动化测试框架,初始设计(四) 写着写着觉得JMeter 常规的使用和框架已基本快完成了,如果大家还需要更深入的了解JMeter 可以私信我,我这个专题内容相对还是有些局限,JMeter中的内容还 ...

  5. Jmeter+ant+Jenkins构建接口自动化测试时构建失败 提示:Fatal Error! 字符引用 #原因...

    Jmeter+ant+Jenkins构建接口自动化测试时构建失败 提示:Fatal Error! 字符引用 "&#原因:接口响应数据中有&# 转载于:https://www. ...

  6. jemeter python接口自动化测试平台_ant+jmeter+Jenkins接口自动化测试实战(1)

    项目中需要做接口自动化测试,于是就去做实验,做实验要从搭建测试环境开始.在学习的过程中肯定会遇到不同的问题,于是就用了两天的时间做了一个简单的接口自动化环境,中间也遇到一些问题,现在把路上踩到的坑记录 ...

  7. 使用Fiddler/Charles+Jmeter进行接口自动化测试和接口性能测试(关联接口测试、接口自动化测试、脚本录制、软件测试、性能测试、测试工具)

    目录 1.Fiddler篇,脚本录制,接口自动化测试,性能测试 2.Charles篇,脚本录制,接口自动化测试,性能测试 背景:有时候不是说我们不懂一个一个接口进行拼装编辑,只是为了我们能更好更快的进 ...

  8. jmeter+csv+ant接口自动化测试--利用apache-ant执行测试用例并生成HTML格式测试报告(二)

    在上一篇博文中介绍了如何使用csv文件来批量管理接口,本篇博文介绍如何利用apache-ant执行测试用例并生成HTML格式测试报告. ①下载安装apache-ant-1.10.0,配置环境变量 如下 ...

  9. 最新出炉 csdn最牛最全JMeter+Ant+Jenkins接口自动化测试框架(Windows)

    一:简介 大致思路:Jmeter可以做接口测试,也能做压力测试,而且是开源软件:Ant是基于Java的构建工具,完成脚本执行并收集结果生成报告,可以跨平台,Jenkins是持续集成工具.将这三者结合起 ...

最新文章

  1. Python-Django配置阿里大于的短信验证码接口
  2. python字符串的方法和列表的方法_python 字符串方法及列表,元组,字典(一)
  3. robotframework安装包_Robot Framework零基础入门教程
  4. dmg文件转换iso ultraiso_mac去除dmg打开密码的方法
  5. hibernate的HQL查询语言总结
  6. java 字节取位_java位 、字节 、字符的梳理
  7. SecureCRT如何进入和退出全屏及调出菜单栏
  8. “机器换人”之潮涌向珠三角,蓝领工人将何去何从
  9. css flexbox模型_代码简介:CSS Flexbox有点像旅行
  10. 一个 wince 开发经验的杰出blog
  11. c++中计算2得n次方_PLC-上海会通松下PLC中的数据类型有哪些?
  12. [笔记] SRAM Controller
  13. selenium+webDriver环境搭建和学习基础(java环境)
  14. 比较iOS和Android的优缺点,第一次安卓机优缺点总结(对比iOS系统)
  15. 程序员客栈:程序员的经纪人_对于程序员:如何处理干扰和打扰
  16. 抓取前程无忧招聘信息
  17. 股票level2数据接口获取逐笔成交数据的过程
  18. 帆软FCRP认证分享
  19. oracle中常用关键字,oracle常用函数及关键字笔记
  20. 树莓派自启动python程序,远程树莓派桌面,重装树莓派系统,串口驱动,永不休眠,树莓派旋转屏幕方向,树莓派定时重启,修改矫正树莓派时间,raspbian Linux 系统命令常用

热门文章

  1. etl构建数据仓库五步法_带你了解数据仓库的基本架构
  2. 【CodeForces - 673D】Bear and Two Paths(构造,tricks)
  3. 【牛客 - 283E】贪心只能过样例(模拟)
  4. 数论中的无数公式 总结
  5. IMX6怎么移植最新Android,[IMX6Q][Android5.1]移植筆記 --- 無法掛載system文件系統
  6. c 语言车牌识别系统课题设计,车牌识别系统的设计--课程设计报告.doc
  7. 有向图算法 PHP,科学网—一种可用于脑神经网络分析的有向图分解算法 第六稿 - 谢勤的博文...
  8. php开发地图导航,php 实现百度地图(很详细出来的地图)
  9. python实现k均值算法_python实现kMeans算法
  10. leetcode109. 有序链表转换二叉搜索树