jmeter压力测试,案例实讲

       最近刚结束一个小项目,类似于课堂考试的一部分功能需要测试在多个学员登录系统,并执行考试,到提交试卷的这样一个过程,开始考虑用loadRunner,后来发现太重,所以采用的jmeter,轻量学习成本低,鼓捣了两天搞出现在的成果,不总结出来很多东西就容易忘,废话不多,上正文(本文为了直观,使用了众多截图,加载慢请耐心等待收获,(*^__^*) 嘻嘻……)。

主界面:


jmeter基本设置:

options按钮中可以切换语言

工程操作流程:

操作方式本文以下面案例进行讲解,此案例流程如下:

用户登录-Token Check-判断用户角色–获取统计信息-获取考试状态-获取考试题目-单选题答题-提交试卷-退出登录

工程目录:


组件介绍

查看结果数


聚合报告

图形结果

 

线程组

添加线程组

可在根节点 “Test Plan”右键添加线程组和相关,测试计划的其他元件;例如本项目目录树中的 jdbc线程组 就是这样添加的。


添加元件

在线程组或控制器等上面右键即可添加该节点下的相关元件

包括:HTTP请求,逻辑控制器,前置后置处理器,断言,定时器,配置元件,监听器等,元件的具体使用方法会在后面讲。

HTTP请求默认值

有时候测试项目有一些全局的固定变量和参数需要在多处引用,为了减少操作,可在线程组或某父节点下增加 HTTP请求默认值 默认设置,例如下图中设定服务器名称和端口,在其子节点下的 http请求接口名称就不必都写 127.0.0.1:3001/api/getUrl,而是直接写成/api/getUrl
即可;

“同请求一起发送的参数”如果写了就会在每个请求中带着这个参数,这个用的不多,本案例没用到


jdbc 连接配置

连接不同的数据库需要安装不通过的依赖 jar包,此处只讲解sqlite数据的安装方法,其他数据库可查看官网或其他博客文章:

jar包安装方法:

将下载的jar包复制到jmeter安装位置的lib目录下即可,


jdbc配置方法


jdbc请求

数据库连接之后执行的一些CRUD(增删改查)操作配置,一般常用的是查询,此案例由于后面需要模拟用户登录实现一系列操作,故此处是查询用户表的相关字段;


点击运行之后,得到的数据可以在查看结果树下的 JDBC Request下查看到运行结果


Debuger Sampler

添加之后可以在查看结果树中看到该节点下变量的值,相当于debug模式的变量查看。


循环控制器

遇到循环请求的情况,需要设置循环次数,如上面的得到用户表用户信息之后,循环用其中每一行的用户名密码登录系统。


计数器

循环引用的时候需要制定参数的下标,如得到的用户列表 userList 数组中第2 次登录要在请求中发送的userName为userList[2];第三次userName= userList[3],每次不一样,使用计数器就可实现


HTTP Cookie管理器

有时候我们需要在浏览器上存储 cookie 信息,但是在接口请求的时候是没有cookie的,此时就需要在父节点上增加这个cookie管理器,即可自动拦截到服务端通过setCookie写入的cookie信息,如下图:

服务端在login/check请求发送后往cookie中写了user信息,则在后面的请求中就会自动带着
cookie信息了。


HTTP请求

接口压力测试的基础就是发送请求,直接上图,此处以登录接口为例,使用如下:

(1)Parameters形式传参


(2)Body Data形式传参


HTTP 信息头

以Body Data方式传输参数的时候,需要配置HTTP信息头,Content-Type的值根据实际填写,常用的主要是下图所示:


响应断言

我们为了验证请求的正确与否,一般会设置请求断言,来验证请求返回的状态码是否正确,如下,用户登录之后返回的状态码”errcode”:0,结果包括这个内容就算该请求通过。



JSON Extractor(json解析器)

在执行完 http请求之后,往往需要取其返回结果中的某些字段,后面的接口请求会依赖前面的接口结果,此时就要用到JSON解析器(在Http右键,添加-后置处理器下)。如下在登录之后需要拿到登录的token,登录返回结果示例:

{
 "errcode":0,
    "user":{
        "id":6,"userName":"XXX0001","pwd":"45b1017f751948aa",
            "desc":"{
                \"name\":\"赵四\",\"birthday\":\"1991.03.111\",\"politicalStatus\":\"\",\"nation\":\"\",\"education\":\"\",\"health\":\"\",\"company\":\"\",\"duty\":\"\",\"dutyStartTime\":\"\",\"dedicatedNet\":\"\",\"tel\":\"\"                }",          "roleApp":{"id":4,"name":"学员"},        "token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX25hbWUiOiJEWFRHMjAxODA4MDEyMDkiLCJ1dWlkIjoiYzY3NDhhMjAtYTVkYS0xMWU4LThmNGItZDcxYzA5YzJhMTFlIn0.ofbHY9LbGQPiI9Hs3ZQHLM6WWYKmk4meNUFgu-YlRLI",
    }
}复制代码


解析提取token信息如下;


这样在后面的请求中就可以直接用${token}引用到token信息了。在案例中还取了其返回的状态码,只有状态码正确才会执行后续请求。

If控制器

有的 http请求 是要判断某变量的结果是否符合来决定是否请求,如案例中只有
errcode为0,才会执行;也有之前的用户角色判断,只有是学员才会执行考试查询等操作,都需要用到该控制器。


到这已经将本案例讲解完毕了,其他功能博主暂未使用,今天就分享到这。

--------------------------------------- 一条实而不华的分界线 --------------------------------

2018.08.23 新增内容

用户定义的变量

        前面我们讲了HTTP请求默认值,这个只是在请求的时候免去我们重复输入请求地址和端口以及固定变量的方式;其实更方便的还有一个就是本节的“用户定义的变量”,用户可在此处设置更多的全局变量,用于请求中用到的。例如,博主今天遇到的,我们将开发好的项目发布在测试机上进行测试,此时就需要修改多个地方:用户认证服务地址+端口、系统服务地址+端口、jdbc需要读取的数据库位置,甚至sql语句也可以放在用户变量中,方便随时修改要查询的用户的条件。

使用方式如下:

“右键-添加-配置元件-用户定义变量”,即可完成添加。


例如博主自己加的各个变量,之后便可以通过${_loginIP}引用对应的变量,在HTTP默认设置中也可直接这样用,下次修改变量的时候就不用各个地方去修改,而是直接在这里修改即可跑测试。

谢谢您的阅读,希望您能有所手滑点了关注(其实是准备打“希望您有所收获的”),欢迎交流,共同进步!


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值