jmeter压力测试,案例实讲

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

主界面:


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形式传参json


(2)Body Data形式传参


HTTP 信息头

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


响应断言

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



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 新增内容bash

用户定义的变量

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

使用方式以下:cookie

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


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

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

相关文章
相关标签/搜索