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

开源测试工具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
*
FROM
Commodity
WHERE
CommodityID = '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":,

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

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

            "SalePrice":16.0,

            "SaleAmount":

        }

    ],

    "records":,

    "status":true,

    "message":""

}

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

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

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

SELECT

    *

FROM
Commodity
WHERE
CommodityID = '${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完成了一个轻量级的接口自动化测试的用例构造,构造好的用例可以用于后续版本的回归测试。

Jmeter笔记(Ⅱ)使用Jmeter实现轻量级的接口自动化测试的更多相关文章

  1. 七、Jmeter + ant + jenkins轻量级接口自动化测试

    七.Jmeter + ant + jenkins轻量级接口自动化测试 杀猪不用牛刀,工具没有牛逼高大尚之分,每个工具都有存在的理由:关键是看会不会用,怎么用,有没有用在合适的地方. 需要安装的工具: ...

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

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

  3. Jmeter使用基础笔记-认识Jmeter

    我在工作过程中接触Jmeter不算特别多,对Jmeter的使用也只是限于基础阶段,不过对付基本的一些需求我想足够使用了.有好几个朋友问我关于Jmeter的问题,在此我将我在工作过程中的使用心得和总结的 ...

  4. 接口自动化测试框架【windows版】:jmeter + ant + jenkins

    为了提高回归效率及保证版本质量,很多公司都在做自动化测试,特别是接口自动化.接口自动化测试框架很多,有写代码的,也有不写代码的,我觉得没有谁比谁好,谁比谁高级之说,只要适用就好. 今天给大家分享一个不 ...

  5. jenkins+ant+jmeter接口自动化测试(持续构建)

    使用badboy录制脚本,到处到jmeter后进行接口自动化,后来想着 可不可以用自动化来跑脚本呢,不用jmeter的图形界面呢, 选择了ant来进行构建,最后想到了用Jenkins来进行持续构建接口 ...

  6. 基于Jmeter的接口自动化测试实践

    在去年实施了一年的三端(PC.无线M站.无线APP[Android.IOS])后,今年7月份开始,我们开始进行接口自动化的实施,目前已完成了整个框架的搭建以及接口的持续测试集成.今天做个简单的分享. ...

  7. Jmeter+Ant+Jenkins接口自动化测试(二)_测试方案设计及jmeter脚本开发

    前言 根据之前部署好的测试环境,进行接口自动化测试的方案设计及Jmeter脚本开发.测试方案设计过程中采用了数据分离和对象分离等思路,因此直接通过特定的测试用例文档来驱动整个自动化接口测试的执行,相关 ...

  8. 使用jmeter+ant进行接口自动化测试(数据驱动)之二:利用apache-ant执行测试用例并生成HTML格式测试报告

    在 使用jmeter+ant进行接口自动化测试(数据驱动)之一 介绍了如何使用csv文件来批量管理接口 本次接着介绍如何利用apache-ant执行测试用例并生成HTML格式测试报告 ①下载安装 ap ...

  9. Jmeter+ant+jenkins接口自动化测试 平台搭建(一)

    平台简介 一个完整的接口自动化测试平台需要支持接口的自动执行,自动生成测试报告,以及持续集成.Jmeter 支持接口的测试,Ant 支持自动构建,而 Jenkins 支持持续集成,所以三者组合在一起可 ...

随机推荐

  1. http动词解释及规范

    GET:GET用于信息获取,而且应该是安全的和幂等的. 安全的意味着该操作用于获取信息而非修改信息,不管进行多少次操作,资源的状态都不会改变. 幂等的意味着对同一URL的多个请求应该返回同样的结果. ...

  2. HttpWebRequest简单使用

    HttpWebRequest简单使用  摘要 HttpWebRequest类对WebRequest中定义的属性和方法提供支持,也对使用户能够直接与使用HTTP的服务器交互的附加属性和方法提供支持. 创 ...

  3. PostgreSQL自学笔记:6 PostgreSQL函数

    6 PostgreSQL函数 6.2 数学函数 abs(x) 绝对值 pi() 圆周率π select abs(-3),pi(); cookie: MySQL中的pi()默认值3.141593, Po ...

  4. Synergy简单使用小记

    需求: 两台笔记本用两套键盘鼠标,那体验,糟透了. 怎样才能使得两个主机公用一套鼠标和键盘呢?上网搜索到Synergy这款软件 参考: 具体使用方法参考了这篇博文 基本使用: 这款软件分为服务端和客户 ...

  5. linux(ubuntu) 安装composer(PHP用来管理依赖关系的工具 ) 和安装中国全量镜像

    https://www.phpcomposer.com/  composer中文网 1:进入安装目录   cd /usr/local/bin 2:下载并安装     sudo curl -s http ...

  6. 在 CentOS7 安装 ELK

    ELK是一个成熟的日志系统,主要功能有收集.分析.检索,详细见 elastic官网. 本文主要介绍如何在CentOS7下安装最新版本的ELK,当然现在docker已经有完全配置成功的elk容器,安装配 ...

  7. 阿里云 windows 2008 使用Thinkphp5 captcha验证码不显示问题

    第一次使用Thinkphp5在阿里云上面运行,后台验证码竟然显示不出来!有种要吐血的感觉...找了半天,终于找到类似解决办法 thinkphp,onethink和thinkox中验证码不显示的解决方法 ...

  8. archlinux下安装acroread打开pdf

    虽说acroread是个好东西,但是在打开pdf几秒后总是自动退出呢 在其aur网页下找到了这么一解决办法: 打开终端输入 sudo unshare -n sudo -u ${USER} ACRO_A ...

  9. 电子产品使用感受之--DJI OSMO Pocket VS OSMO MOBILE

    2019.02.20 更新 打算出掉OSMO MOBILE,有需要的可以联系我啊 2019.1.26 更新 快要到春节了,购物中心的过年气氛很浓,网络上也是喜气洋洋. 今年天津有很多活动在春节期间举办 ...

  10. 20175320 2018-2019-2 《Java程序设计》第9周学习总结

    20175320 2018-2019-2 <Java程序设计>第9周学习总结 教材学习内容总结 本周学习了教材的第十一章的内容,在这章中介绍了JDBC与Mysql数据库,通过本章我了解到了 ...