1.创建一个线程组
Jmeter安装完成后,为了防止后续响应结果出现中文乱码情况,可以用记事本打开bin目录下的jmeter.properties文件设置encoding=UTF-8(原值为encoding=ISO-8859-1)并取消注释。通过bin目录下的jmeter.bat文件在windows环境下启动jmeter(linux系统下的启动文件为jmeter.sh),打开软件后,选择options→choose language→chinese(simplified)将jmeter界面设置为简体中文,测试计划(右键点击)→添加→线程→线程组。
2.在线程组里创建取样器-http请求
*名称
修改为需要的名称,如:淘宝登录接口
*创建方式
线程组(右键点击)→取样器→http请求。创建完成后对http请求进行配置。
假设一个网址为:http://204.187.187.187:8080/a/b,http为协议,204.187.187.187为ip地址,/a/b为路径,端口号为:8080,正常网站上端口号被封装在ip地址中
* 配置http请求
协议框输入:http
ip地址框输入:204.187.187.187
端口号输入:8080(被封装的情况下不用输入)
选择请求方式:get、post、put、delete
路径:/a/b
内容编码:可以不输入,请求内容含中文时输入utf-8
输入参数或消息体数据:(选择哪种输入方式不按照请求方式进行判断,而是按照请求数据的类型来进入判断。)
当请求内容为键值对形式:选择参数栏→点击添加→输入变量名→输入值
当请求内容为json类型:选择消息体数据栏→点击添加→输入json数据
这是基本的http请求配置,但是大多请求还是需要其他的参数信息,如请求头,必要的请求数据,cookie等等,后面继续说。
3.添加监听器-查看结果树
配置好http请求后,点击运行并不能直接查看到响应结果,而是需要添加查看结果树进行查看。可以选择http请求(右键点击)→添加→监听器→查看结果树,这样会为该http请求添加一个查看结果数,也可以选择在线程组下添加一个查看结果数,这种方式添加的查看结果数,可以在运行时同时查看所有该线程组下的运行结果,两者之间的区别相当于局部变量和全局变量的区别,一个是内部使用,一个是全局使用
4.添加断言
判断一个请求是否完成期望结果,可以通过断言来实现,右键http请求→断言→选择断言方式,断言的方式有很多种,可以匹配响应体的字符串,匹配响应状态码,匹配数据库数据等等,选择匹配的部分,添加要匹配的数据即可
如果要跟数据库数据进行比较的话需要操作数据库,后面讲如何操作数据库
5.添加监听器-断言结果
断言失败会在查看结果数中报错,但是为了更清晰的判断断言结果,可以添加监听器→断言结果进行断言结果的判断。
6.添加Cookie管理器
一些接口请求的操作需要前置接口的cookie信息,jmeter中,运行时不会自动捕获cookie信息,需要通过添加→配置元件→http cookie管理器,添加后cookie管理器后管理器会自动捕获线程组中接口请求时产生的cookie信息,并传递给后续运行的接口。
7.添加http信息头管理器
一些接口请求需要http信息头管理器来添加一些请求头信息,http信息头管理器可以配置在线程组作为一个全局请求头添加到所有接口请求中,也可以配置在接口请求内部作为一个内置请求头添加该接口的请求头部分。
*添加方式:
添加→配置元件→http信息头管理器
*添加数据:
Content-Type:在jmeter中content-type默认为application/x-www-form-urlencoded,也就是form表单形式,如果请求数据为其他形式则需要进行设置,如json形式需要设置为:application/json
Authorization:添加某些作为请求头使用的参数信息,判断是否需要添加可以根据运行时报错unauthorized进行判断,数据来源一般是其他接口,需要通过提取器来捕获数据并进行添加,在jmeter中引用设置为变量的数据的引用方式为:${变量名}
8.使用JSON提取器提取JSON响应体
*预测试:
响应体为json类型时可以通过json提取器提取响应体中的数据,在添加json提取器之前,可以先通过查看结果数→选择json path test(默认为text)进入测试响应体数据页面,在json path expression中输入json表达式,点击test可以进行测试。
*json表达式:
小数点+关键字,加入想要取sid字段的数据,取值方式为:.sid,如果sid内部有id字段,id对应数据为列表形式,想要取id第五个值,取值方式为:.sid.id[4]
*添加一个json提取器:
右键点击→添加→后置处理器→json提取器
*配置json提取器:
设置提取数据的变量名:如token1
设置json表达式:如.token
设置匹配第几位:1
使用json提取器的数据:
在需要引用的地方输入:${token1}
9.使用正则提取器提取字符串响应体
正则提取器用于操作字符串类型的响应体数据,也可以匹配json响应体中的数据,因为同样也是字符串,操作方式与json提取器基本相同,但是匹配方式不同,产生的数据类型也有一定差异
*测试正则表达式:
进入查看结果树→选择regexp tester,想要匹配("token":"abc";)中token的值abc,需要使用非贪婪匹配:"token":"(.+?)";,匹配结果是二维数组的形式,索引[1][0]为"token":"abc";,索引[1][1]为abc
*添加正则提取器:
添加→后置处理器→正则表达式提取器
*配置正则提取器:
设置生成的变量名:token
设置正则表达式:"token":"(.+?)";
设置二级索引位匹配:$1$,匹配二级索引为1的数
设置匹配数字:1,匹配一级索引位为1的数
10.引用用户参数
在jmeter中可以在线程组下创建一个用户参数表,在里面配置一些数据信息作为变量,该线程组下所有请求都可以调用用户参数表中的数据,添加方法:添加→前置处理器→用户参数,在里面输入名称和值即可设置变量
11.引用外部CSV/txt文件数据
jmeter可以引用外部文件的数据作为变量使用,配置方法为:添加→配置元件→csv数据文件设置
*文件数据读取规则:
按行读取csv/txt文件中的数据,需要设置与csv文件中每行数据对应的变量名,变量之间用西文逗号隔开,如果是txt文件,每行数据这样写:232,123,'abc' 用逗号隔开
*配置csv数据文件设置:
首先需要先导入文件,假如文件中每行数据为三个,可以设置变量名称为:a,b,c,西文逗号隔开,三个变量按照从左到右的顺序取出文件中的每行的值
一次匹配一行数据,想要匹配多行时,需要在http请求中设置线程数为想要匹配的行数(当线程数设置的超过csv/txt文件的行数的时候,超出部分会再次从第一行进行匹配)
文件中如果第一行为变量名,不想匹配第一行,可以在csv数据文件设置中将忽略首行设置为True(默认为False)
*引用数据方式:
${设置的变量名}
12.jmeter操作mysql数据库
通过jmeter也可以操作mysql数据库,主要用于对断言结果进行判断,在操作之前,需要先从网上下载mysql-drvier文件,放到jmeter目录下的lib/ext目录下,jmeter会自动导入,也可以选择在Test Plan中导入mysql-driver文件
*JDBC connection configure:
添加→配置元件→JDBC connection configure,在这个文件中可以配置mysql连接,首先在variable name for created pool中设置生成的连接池的名字(可以设置为数据库名),接着一堆数据不用管,直接操作database connection configure栏:
设置database url:
jdbc:mysql://服务器地址:端口号?数据库名?参数1=value1&参数2=value2,一些基本的参数信息:useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true&allowMultiQueries=true
设置mysql driver class:
com.mysql.cj.jdbc.driver(mysql8及以上版本)
com.mysql.jdbc.driver(mysql8以下版本)
设置要操作的数据库账号和密码
*JDBC request:
添加→取样器→jdbc request
设置要操作的连接池名称:上面jdbc configure配置的名字
设置query类型并添加query语句:默认为select statement,该类型可以实现单个查询select语句,若要进行增删改则要选择update statement,若要进行多个query语句的使用,需要选择callable statement,每一行作为一个查询语句,如:
select * from student;
select name from student;
*添加查看结果树
查看结果树同样可以查看jdbc request的查询结果
*JDBC request parameter
在jdbc request中可以使用jdbc parameter(jdbc参数化)来调用一些设置的变量作为query语句的一部分使用,也可以将返回结果作为变量让后续jdbc request文件使用
假如要调用全局变量name,age的值作为query的where条件的一部分使用,需要设置:
parameter value:${name},${age}
parameter type:varchar,integer
在query内容里查询语句为:select * from student where name=? and age=?;(?代表取parameter中的值,从左往右取值)
假如要将返回结果name,age作为变量传递给其他jdbc request使用,需要设置:
variable name:nam,ag(分别从左往右对应查询结果中的值)
在query内容里查询语句为:select name,age from student;
其他request调用这里生成的数据可以通过使用{nam_1}代替值的方式,nam代表设置的变量名,1代表第几行(因为可以使用多条查询语句)