一、安装及配置环境
1.安装
java环境
该软件需要java环境,安装jdk,在百度自行查找安装
环境变量配置:变量名JAVA_HOME 值:jdk的安装路径
变量名CLASSPATH 值:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
变量名Path 值:追加;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
三、Jmeter的简单使用
1.打开jmeter
打开Jmeter 安装包,进入\bin 中,找到“ApacheJMeter.jar”或"jmeter.bat", 双击打开即可。
2.jmeter线程组 建立线程组步骤:在下图打开的Jmeter 页面中,右键“测试计划” -> “添加” -> "Threads(Users)" -> “线程组”
线程属性
线程数:虚拟用户数,一个虚拟用户占用一个进程或线程,设置的虚拟用户数也就是压测并发的线程数
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请求
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
4号位置是个添加,点击一下即可。
5号位置是参数名称,本例的“用户名”是identity,“密码”是password,写进去即可
6号位置是参数值,identity对应13581698559,password对应123456
4.jmeter参数化
方式A:借助函数助手的方式,功能较弱
步骤:单击菜单选项--函数助手对话框--选择_CSVRead
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值。
2 HTTP cookie管理器的使用实例
以金币充值接口(/api/user/gold_add
) 为例,右键HTTP请求->添加->配置元件->HTTP cookie管理器
3 post 请求中入参为json类型时, 参数为json类型时,一定要在HTTP信息头管理器中设置header配置
右键线程组-->添加-->sampler-->HTTP请求,在body data中输入json类型的参数,如图所示:
4 post请求中上传文件的使用
在HTTP 请求中点击“Flies Upload” tab页, 点击“添加”, 然后通过“浏览”选择需要上传本地的文件。(win10系统中通过浏览选择本地文件运行报错的话,则将文件放到jmeter的bin目录下,在文件名称中直接输入文件名就行)如图所示:
注意: 参数名称必须为"file"。
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 右键“线程组”-->“添加”--->“监听器-查看结果树”(添加一个察看结果树,查看接口调用结果)
这是Sampler-BeanShell Sampler里的操作内容,直接将代码粘贴过来,修改存放文件路径就行
最后察看结果树内容如下
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
在“JSONPath Expression” 中Destination Variable Name即为设置一个变量名:sign2,可以自己随便写一个,金币充值接口会用到,
JSONPath Expression则输入之前定位到的sign:"$.login_info.sign",如图所示
金币充值接口要用到之前的变量sign2,则需要通过HTTP cookie 管理器来实现,在cookie管理器中,名称输入登录接口中用到的用户名,
值则是上面提到的sign2变量:${sign2},域则是服务器的IP或域名
7.操作数据库的使用
以下是JMeter 驱动数据库列表:
以下以MySQL数据库为例
7.1 创建一个测评计划,将我们需要的数据库驱动包导入:Add directory or jar to classpath 点击“浏览”,选择mysql-connector-java-5.1.28.jar(该文件可自行百度下载)
7.2 右键“线程组”-->“添加”-->“配置元件”-->“JDBC Connection Configuration”
Variable Name自己随便起个名字,下面JDBC Request中会用到,
Database URL数据库地址按照上面表格中的数据库url格式输入(dbname为数据库名),
JDBC Driver class是驱动程序,将上面表格中对应数据库的驱动复制过来就行,
Username则是登录数据库时的用户名,
Password是登录数据库时的密码,其他字段保持默认值就行
7.3 右键“线程组”-->“添加”-->“Sampler”-->“JDBC Request”
若sql中有insert 和select, 则Query Type 需要选择"Callable Statement",
如果是单个的select 或者insert,则Query Type可以选取对应的Select Statement 和Update Statement。
Variable Name输入上面“JDBC Connection Configuration”中的Variable Name:ytt-mysql
7.4 右键“线程组”-->“添加”-->“监听器”-->“察看结果树”
可以在响应数据里察看查询到的数据
四、Jmeter异常解决方法
1.使用jmeter进行测试时,如果返回结果为乱码,则修改jmeter.properties文件中的该字段的值并取消注释,改为utf-8(即:sampleresult.default.encoding=utf-8)
2.入参为json类型,参数为中文乱码时,需修改jmeter.properties文件中的jsyntaxtextarea.font.family的值为:宋体,并取消注释 即:jsyntaxtextarea.font.family=宋体