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

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

 开源测试工具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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/451412.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

依赖注入简介(二)

在上一篇中,我们已经介绍过了最基本的依赖注入,接下来我们来看如何对需要使用的类进行装配。通常应用程序的组件之间的关联是通过wiring,在Spring中同样有很多方式来装配。但是一个最通常我们使用的方法是利用XML。接下来我们来展示一个简单的…

eclipse启动tomcat 访问http://localhost:8080 报404错误

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 eclipse正常启动tomcat,但是 访问http://localhost:8080 却报404错误 修改下配置 就好操作如下图 打开eclipse的server视图&a…

手把手JDK环境变量配置

分为下载,配置,验证三个步骤解释如何进行JDK环境变量配置。 步骤一: 首先查看配置成功后的效果: tip:点击win——>运行(或者使用winr,或者shift鼠标右键打开powershell)——>输入cmd回车——>控制…

myeclipse进入Myeclipse configuration center 如何关闭

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 找到这个图标,放上去显示return即可关闭,隐藏很深有木有

[No0000166]CPU的组成结构及其原理

中央处理器(Central Processing Unit, CPU)CPU的基本架构和工作原理其实百科上讲得已经相当清楚了,不过我觉得有些事情呢还是给个例子出来比较方便学习。本文会先从内存地址,计算机的一般架构之类的基础知识出发,然后逐步为读者"拼装&qu…

Java 时间总结

转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/80613024 本文出自【赵彦军的博客】 时区 整个地球分为二十四时区,每个时区都有自己的本地时间。为了统一起见,使用一个统一的时间,称为通用协调时(UTC, Univer…

4.10/4.11/4.12 lvm讲解 4.13 磁盘故障小案例

2019独角兽企业重金招聘Python工程师标准>>> 准备磁盘分区 fdisk /dev/sdb n 创建三个新分区,分别1G t 改变分区类型为8e 准备物理卷 pvcreate /dev/sdb1 pvcreate /dev/sdb2 pvcreate /dev/sdb3 pvdisplay/pvs 列出当前的物理卷 pvremove /dev/sdb3 删除…

外围功能电路控制 LET′S TRY“嵌入式编程”: 4 of 6

外围功能电路控制 LET′S TRY“嵌入式编程”: 4 of 6本连载讲解作为嵌入式系统开发技术人员所必需具备的单片机的基础知识。 在《单片机入门(1)~(3)》中,我们一起学习了单片机的硬件和编程语言以及开发环境…

如何防止代码腐烂

很多团队都有这个问题,一个项目的代码本来开始设计得好好的,一段时间以后,代码就会变得难以理解,难以维护,难以修改。为什么?我一直在思考这个问题。 让我们先看一个人的情况。 1. 程序员的成长 新手的代码…

git branch 分支

Git自学之路(四)- git branch 分支 几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。 在很多版本控制系统中,这是一个略微低效的过程——常常需要完全创建一…

大数据分析如何创建最佳的移动应用用户体验

2019独角兽企业重金招聘Python工程师标准>>> 如今,越来越多的人使用移动应用程序。而移动应用将在未来成为一个价值数十亿美元的产业。大数据可以帮助企业构建最佳的用户体验。 多年来,开发移动应用程序的技术一直在不断发展,这实…

Jstorm+Spring+mybatis整合

在现有的jstorm框架下,有一个需求:jstorm要对接mysql数据库的实时读取数据, 通过bolt处理,可能要调用service层的框架,最后保存到数据库。 在网上寻找了一下,发现storm集成spring的资料非常少,有…

上海云栖:金融政企行业的CDN最佳实践

2019独角兽企业重金招聘Python工程师标准>>> 摘要: 在刚刚结束的上海云栖大会飞天技术汇分论坛上,阿里云视频云产品架构师罗小飞进行了《阿里云CDN——面向金融政企的CDN最佳实践》主题分享,为上海的嘉宾介绍CDN的解决方案与技术服…

lunix基本命令

安装lunix 批量创建文件 whoami查看当前用户 sudo adduser lilei创建用户 groups lilei 查看用户所属用户组 sudo usermod -G root lilei 赋予root权限 sudo deluser lilei --remove-home ls -l 显示目录的文件 ls -a 显示隐藏文件 PWD 获取当前目录 cd .. 返回上层目录 cd 进入…

开启Swarm集群以及可视化管理

为什么80%的码农都做不了架构师?>>> 在搭建的两台coreos服务器上开启swarm集群 前置条件: docker均开启2375端口同一个局域网内主服务器上安装Portainer容器安装Portainer容器执行: docker run -d -p 9000:9000 --restartalways …

python基本语法:序列

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1. 序列的基本操作: 2.用例: 3.序列包含字符串、元组、列表。

IMDb、烂番茄、MTC、各种电影行业评分名字整理

这篇不是技术文章,就是对总是看到但是不知道具体是什么的一些电影名词、评分、来源,学习一下。 IMDb 互联网电影资料库(Internet Movie Database,简称IMDb)是一个关于电影演员、电影、电视节目、电视明星和电影制作的在…

iOS应用:成功就像中彩票,大半开发者亏本

移动是座大金矿,从来都不乏一飞冲天的成功故事(Draw Something、愤怒的小鸟等)。但是大家往往只看到光鲜的一面,对于移动开发者来说,现实是残酷的,根据市场营销机构App Promo的一项调查,绝大多数…

python基本语法:元组

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1. 元组说明: 元组和列表类似,只不过元组和字符串一样是不可变的,即你不能修改元组。 元组通过圆括…

python基本语法:列表(列表和元组的区别)

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1.基本说明 2.用例: 3.列表类似于java中的list. 与元组不同,定义单个元素对象时不用加逗号,且元素值…