Jmeter的使用简介及实例

时间:2020-12-15 17:30:26

一、安装及配置环境
1.安装
   java环境
   该软件需要java环境,安装jdk,在百度自行查找安装
   环境变量配置:变量名JAVA_HOME 值:jdk的安装路径
                            变量名CLASSPATH  值:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
                            变量名Path       值:追加;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin

二、验证
1.Win+R   Cmd 打开控制台 输入 java
Jmeter的使用简介及实例

三、Jmeter的简单使用
1.打开jmeter
 打开Jmeter 安装包,进入\bin 中,找到“ApacheJMeter.jar”或"jmeter.bat", 双击打开即可。

2.jmeter线程组 建立线程组步骤:在下图打开的Jmeter 页面中,右键“测试计划” -> “添加” -> "Threads(Users)" -> “线程组” Jmeter的使用简介及实例

线程属性
 线程数:
虚拟用户数,一个虚拟用户占用一个进程或线程,设置的虚拟用户数也就是压测并发的线程数
 Ramp-Up Period(in seconds):
准备时长,设置的虚拟用户数全部启动的时间,如果线程数为20,准备时长为10s,那么需要10秒启动20个线程,也就是平均每秒启动2个线程
 循环次数:每个线程发送请求的个数。如果线程数为20,循环次数为100,那么每个线程发送100个请求,总请求数为:20*100=2000;如果勾选了“永远”,那么所有线程会一
      直发送请求,直到手动点击工具栏上的停止按钮,或者设置的线程时间结束

取样器错误后要执行的动作

 Start Next Thread Loop:线程当前循环错误,忽略错误,执行下一个循环
 停止线程:只限当前线程停止,不影响其他线程执行

3.jmeter发送HTTP请求
步骤:
右键“线程组” -> “添加” -> “Sample” -> “HTTP请求”, 输入“服务器名称或IP”,对应的端口号,http默认端口号80,可以不写。
 
(例如:http://api.zhongchou.cn/user/login?v=1)

1)设置目标信息--HTTP请求

Jmeter的使用简介及实例

1号位置填写host:api.zhongchou.cn

2号位置填写目标的端口号,绝大部分情况的http请求的端口号是80,https的端口号是443。其他端口号用的极少,
              需要写明端口号。http://172.16.5.177:8092/test/beta.apk,端口号就是8092。

3号位置填写具体的路径。通俗的讲就是域名之后的玩意。/user/login?v=1
     2)设置请求参数
           登录接口绝大部分是post请求,画圈部分的方法需要改成post
            Jmeter的使用简介及实例      
           4号位置是个添加,点击一下即可。
           5号位置是参数名称,本例的“用户名”是identity,“密码”是password,写进去即可
           6号位置是参数值,identity对应13581698559,password对应123456

4.jmeter参数化
 方式A:借助函数助手的方式,功能较弱
 步骤:单击菜单选项--函数助手对话框--选择_CSVRead
 Jmeter的使用简介及实例
 CSV file to get values from | *alias:对应的值填写文件绝对路径(如果文件中有中文,则保存文件时,需要把编码改为UTF-8)
 CSV文件列号| next| *alias:获取文件参数项的序列号即下标

 方式B:jmeter中的配置元件(CSV Data Set Config)
 步骤:选中线程组点击右键----添加----配置元件----CSV Data Set Config
 说明:
    Filename:----参数项文件
    File Ecoding:----文件的编码,设置为utf-8
    Vaiable Names:----文件中各列所表示的参数项,各参数项之间利用逗号分隔
    Delimiter:----文件中使用的是逗号分隔,则填写逗号;如果使用的是TAB,则填写\t(如果此文本文件为CSV格式的,默认用英文逗号分隔)
    Ignore first line (only used if Variable Names is not empty):表示从文件中取值时,第一行的值是否要忽略,
    Allow quoted data:----False则文本中参数原样获取,True则不会,例如文本中参数为“A1”,False时取的就是“A1”,True取的就是A1
    Recycle on EOF:----True=当读取文件到结尾时,再重头读取文件,| False=当读取文件到结尾时,停止读取文件
    Stop thread on EOF:----当Recycle on EOF为False时,当读取文件到结尾时,停止进程;当Recycle on EOF为True时,此项无意义
5.响应断言
 步骤:
选中一个取样器,右键----添加----断言----选中“响应断言”
 说明:
 Apply to :
    Main sample only :----断言仅用于主取样器
    Sub-samples only :----断言仅用于子取样器
    Jmeter Variable :----断言将被施加到命名变量的内容
 要测试的响应字段:
    响应文本 :服务器返回的文本内容
    响应代码 :匹配响应代码,比如HTTP请求中“200”代表成功
    响应信息 :匹配响应信息,处理成功返回“成功”或“OK”字样
    Response Header :匹配响应头中的信息
 模式规则匹配:
    包括 :返回结果包括制定的内容,支持正则匹配
    SbuString :与包括基本一致,都是指返回结果包括你指定的内容,但不支持正则字符串
    正则匹配 :正则表达式必须能匹配整个返回值,而不是返回值的一部分
    Equals :返回结果与响应断言完全一致
    否 :就相当于取反
      案例 :若断言结果为true,勾选“否”后,最终断言结果为false
         若断言结果为false,勾选“否”后,最终断言结果为true
6.正则提取器
 步骤:HTTP请求上右键----后置处理器----正则表达式提取器
 说明:
    引用名称 :下一个请求要引用的参数名称,如填写A,则可用$(A)引用
    正则表达式 :
          ()括起来的部分就是提取的;.匹配任何字符串;+ 一次或多次; * 0次或多次;?在找到第一个匹配项后停止
    模板 :用$$引用起来,如果在正则表达式中有多个正则表达式,则可以是$2$ $3$等等,表示解析到第几个值给title
    匹配数字 :0代表随机取值,1代表全部取值,通常情况下填0
    缺省值 :如果参数没有取得到值,那默认给一个值让它取
          

四、Jmeter的使用实例

1 HTTP信息头管理器的应用
以获取所有学生信息接口(/api/user/all_stu) 为例,右键HTTP请求->添加->配置元件->HTTP信息头管理器, 可通过抓包获取header相应信息 ,输入对应的header值。

Jmeter的使用简介及实例

2 HTTP cookie管理器的使用实例

以金币充值接口(/api/user/gold_add) 为例,右键HTTP请求->添加->配置元件->HTTP cookie管理器

Jmeter的使用简介及实例

 3 post 请求中入参为json类型时, 参数为json类型时,一定要在HTTP信息头管理器中设置header配置
右键线程组-->添加-->sampler-->HTTP请求,在body data中输入json类型的参数,如图所示:

Jmeter的使用简介及实例

4 post请求中上传文件的使用

在HTTP 请求中点击“Flies Upload” tab页, 点击“添加”, 然后通过“浏览”选择需要上传本地的文件。(win10系统中通过浏览选择本地文件运行报错的话,则将文件放到jmeter的bin目录下,在文件名称中直接输入文件名就行)如图所示:
注意: 参数名称必须为"file"。

Jmeter的使用简介及实例

5 post请求中下载文件的使用

5.1 右键“测试计划”-->“添加”-->“Threads(Users)”-->“线程组”;
5.2 右键“线程组”-->“添加”-->“Sampler”-->“HTTP请求”;
5.3 右键“线程组”-->“添加”-->“Sampler-BeanShell Sampler”(添加beanshell,是为了获取到返回的文件内容,保存到本地一个文件里面)
       beanshell代码格式是固定的,如下所示:

import java.io.*;

byte[] result = prev.getResponseData(); //这个是获取到请求返回的数据,prev是获取上个请求的返回

String file_name = "C:\\Users\\yitai\\Desktop\\ytt.jpg"; //代表存放文件的位置和文件名

File file = new File(file_name);

FileOutputStream out = new FileOutputStream(file);

out.write(result);

out.close();

5.4 右键“线程组”-->“添加”--->“监听器-查看结果树”(添加一个察看结果树,查看接口调用结果)

脚本实例如下:
这里是HTTP请求里的操作
Jmeter的使用简介及实例

这是Sampler-BeanShell Sampler里的操作内容,直接将代码粘贴过来,修改存放文件路径就行

Jmeter的使用简介及实例

最后察看结果树内容如下

Jmeter的使用简介及实例

6.接口之间的关联使用 

6.1 右键“线程组” --> “添加” --> “Sample” --> “HTTP请求”(修改HTTP请求名称为:HTTP请求--登录)
6.2 右键“HTTP请求--登录” -->“添加”--> “后置处理器 --> "jp@gc - JSON Path Extractor"
6.3 右键“线程组” --> “添加” --> “Sample” --> “HTTP请求”(修改HTTP请求名称为:HTTP请求--充值金币)
6.4 右键“HTTP请求--充值金币” -->“添加”--> “配置元件 --> "HTTP cookie 管理器"

调用金币充值接口,必须先得登录,即需要用到登陆接口(login)的"sign" 值,此时我们可以通过"jp@gc - JSON Path Extractor"来实时获取登录接口的最新sign值
从登录接口的“察看结果树”中可以看出,登陆接口(login)的Response 结构为Json格式, sign 在 login_info 里面一层。
定位到sign值则是:$.login_info.sign

Jmeter的使用简介及实例

在“JSONPath Expression” 中Destination Variable Name即为设置一个变量名:sign2,可以自己随便写一个,金币充值接口会用到,
JSONPath Expression则输入之前定位到的sign:"$.login_info.sign",如图所示

Jmeter的使用简介及实例

金币充值接口要用到之前的变量sign2,则需要通过HTTP cookie 管理器来实现,在cookie管理器中,名称输入登录接口中用到的用户名,
值则是上面提到的sign2变量:${sign2},域则是服务器的IP或域名

Jmeter的使用简介及实例

7.操作数据库的使用
以下是JMeter 驱动数据库列表:

Jmeter的使用简介及实例

以下以MySQL数据库为例

7.1 创建一个测评计划,将我们需要的数据库驱动包导入:Add directory or jar to classpath 点击“浏览”,选择mysql-connector-java-5.1.28.jar(该文件可自行百度下载)

Jmeter的使用简介及实例

7.2 右键“线程组”-->“添加”-->“配置元件”-->“JDBC Connection Configuration”

Variable Name自己随便起个名字,下面JDBC Request中会用到,
Database URL数据库地址按照上面表格中的数据库url格式输入(dbname为数据库名),
JDBC Driver class是驱动程序,将上面表格中对应数据库的驱动复制过来就行,
Username则是登录数据库时的用户名,
Password是登录数据库时的密码,其他字段保持默认值就行

Jmeter的使用简介及实例

7.3 右键“线程组”-->“添加”-->“Sampler”-->“JDBC Request”
若sql中有insert 和select, 则Query Type 需要选择"Callable Statement"
如果是单个的select 或者insert,则Query Type可以选取对应的Select StatementUpdate Statement
Variable Name输入上面“JDBC Connection Configuration”中的Variable Name:ytt-mysql

Jmeter的使用简介及实例

7.4 右键“线程组”-->“添加”-->“监听器”-->“察看结果树”

可以在响应数据里察看查询到的数据

Jmeter的使用简介及实例

四、Jmeter异常解决方法
 1.使用jmeter进行测试时,如果返回结果为乱码,则修改jmeter.properties文件中的该字段的值并取消注释,改为utf-8(即:sampleresult.default.encoding=utf-8)
     Jmeter的使用简介及实例

2.入参为json类型,参数为中文乱码时,需修改jmeter.properties文件中的jsyntaxtextarea.font.family的值为:宋体,并取消注释 即:jsyntaxtextarea.font.family=宋体

Jmeter的使用简介及实例