jmeter的基本使用

1.什么是Jmeter
基于Java的压力测试工具
2.适合测试领域
压力测试
功能/回归测试
性能测试
接口测试
数据库压力测试
批量产生测试数据
3.HTTP request详解

4.HTTP response详解
一个http response(HTTP响应)指的是从服务端到客户端的响应消息

响应状态码:标记响应状态的一个标识,200-成功,404-资源找不到
			500-服务器异常,302-重定向
响应头:告诉服务端关于服务器,响应报文相关的一些信息,
		列如,服务器类型,响应报文格式
响应报文:针对请求从服务响应回来的数据,比如:HTML、xml、json等

5.HTTP 请求常见状态码
2开头(请求成功)表示成功处理了请求信息
200 (成功)服务器已成功处理了请求,
通常这表示服务器提供了请求的网页
3开头(请求被重定向)表示要完成请求,需要进一步操作,
通常这些状态码用来重定向
302(临时移动)
304(未修改)

4开头(请求错误)这些状态代码表示请求可能出错,妨碍了服务器的处理
	400(错误请求)服务器不理解请求的语法
	401(未授权)请求要求身份验证
	403(禁止)服务器拒绝请求
	404(未找到)服务器找不到请求的网页
5开头(服务器错误)

6.Jmeter发送GET请求
添加线程组:先添加线程组–sampler
paramtcrs:参数的地方 bodydata :json xml
如何填入地址 如何选择get请求
监听器–添加一个查看结果树
保存脚本进行请求

get请求与post请求的区别:
	get请求参数直接拼接到地址后面
	post请求参数和地址分开的

7.Jmeter之参数类型
param和bodydata只能二选一
FilesUPload不受影响

param参数:
	1.如何填写参数:键值对形式  字典
	2.注意:不能有空格,如果报错且确定参数名和参数值没有问题,
				就去检查是否带有空格

bodydata参数:
	1.如何填写参数:json xml的格式
	2.注意:不能有空格

FilesUPload参数:
	参数的用途:上传文件
	参数的解释:
				文件名称:文件的绝对地址
				参数名称:File
				MIME名称:多媒体的类型  根据文件的后缀,去寻找MIME地址
	注意:三个参数必填  不能有空格

8.HTTP请求的默认值
如何添加:线程组右键–配置元件–HTTP请求默认值
作用:会在http请求的时候,自带这些参数,复用的一个作用

9.察看结果树
Text的使用
查看结果树中请求的默认格式为Text,显示取样器结果、请求、响应数据3个部分内容。

	取样器结果: 默认Raw展示,可以切换为Parsed视图,表单展示更直观。

	请求:默认Raw展示,包括Restquest Body 及Restquest Headers两部分。
		  HTTP视图展示更直观。还可输入信息查找,并可以设置区分大小写、正则表达式。

	响应数据:显示Response Body 及Response Headers两部分内容。
	当数据过多时,
	可通过输入信息搜索,
	另外可设置区分大小写、正则表达式。
	
css/jQuery Tester的使用
	li[class=nav-item]
	
HTML的使用
	
JSON Path Tester的使用
	$表示根节点,一级一级的往下走可以用.来表示,
		$.result['yangli'] or $.result.yangli1
	 
Document的使用
	作用:选择Document视图。将显示从各种类型的文档中提取的文本。
		例如Microsoft Office(Word,Excel,PPT,2007-2010(openxml),Apache OpenOffice(writer, calc, impress),HTML,gzip,jar / zip)文件以及“多媒体”文件(例如mp3,mp4,flv等)。
		
RegExpTester(正则表达式)的使用
	作用:当需要从上一个请求的响应结果中获取数据来关联到下一个请求,
		  且通过正则表达式提取器来实现。
		  可以选择该显示格式,输入正则表达式,点击Test,测试正则表达式是否正确。
Xpath Tester的使用
	作用:通过Xpath提取器来实现关联时,
	查看结果可以选择Xpath Tester格式。
	在XPath query输入xpath表达式,
	点击Test验证,验证是否正常获取到所需内容。

10.配置元件HTTP信息头管理器的使用
1.什么是信息头:请求头
2.什么时候用:cookie token 或者是其他信息的时候
3.场景设计:反爬虫添加信息头–模拟浏览器去发送请求–HTTP信息头管理器–user-Agent
4.范围:分为全局和局部

11.断言之响应断言
使用断言目的:在Request的返回层面上增加一层判断机制;
因为request成功了,并不代表结果一定正确

断言之XPath Assertion
	通过Xpath进行断言判断

12.用户自定义变量
配置的元件–用户定义的变量
参数引用: 变 量 名 13. 请 求 元 件 之 参 数 化 t x t : 通 过 文 本 一 一 排 列 出 数 据 , 然 后 在 调 用 参 数 引 用 : {变量名} 13.请求元件之参数化 txt: 通过文本一一排列出数据,然后在调用 参数引用: 13.txt{参数名}
CSV Date Set Config:
参数引用:${参数名}
CSV格式:更加方便管理数据

14.参数化函数助手_CSVRead
用函数的方式找到CSV文件的数据
自定义数据不会出现重复的数据
参数引用: 函 数 15. 参 数 化 函 数 助 手 r a n d o m s t r i n g 能 够 随 机 生 成 数 据 弊 端 : 可 能 出 现 重 复 数 据 参 数 引 用 : {函数} 15.参数化函数助手_randomstring 能够随机生成数据 弊端:可能出现重复数据 参数引用: 15.randomstring{函数}

16、常用正则表达式
元字符:
. --任意单个字符
\d–任意单个数字
[0-9]–等价0-9
[a-zA-Z]–等价于所有的大小写字母

限定符:
	+--匹配至少大于一次
	?--匹配0次或1次
	*--匹配0次或多次 ,贪婪匹配
	{n,}、{n,m}、{n}--匹配限定次数
方式:元字符+限定字符

17、Jemter正则表达式提取器
如何使用:
如果想要在某个请求的响应结果里面拿到某个值

	场景设计:后置处理器--正则表达式。
	
{"status":0,"code":"(\d*)","data":null,"msg":"(.*)"}

1.确定左右边界:"msg":"--左边界;"}--右边界
2.写正则表达式:"msg":"用户名或密码错误"}-->"msg":"(.*)"}
				
3.模板:$1$ 指定要匹配的第几个数据

4.匹配数字:0代表随机;-1代表所有
引用:${变量名}

18、正则表达式提取器获取数组数据
(.*)

19、请求元件之foreach循环控制器
输出变量的值:${id}

20、JSON PATH提取器
一般用于返回JSON格式的数据 字典格式的场景使用
右键–后置处理器–JSON Extractor

21、请求之cookie两种处理方式
第一种:右键–配置处理器–HTTP cookie 管理器
第二种:在需要引用值的下面添加HTTP cookie管理器,然后利用正则表达式提取器提取到cookie的值,然后引用到cookie管理器

22、请求之处理token
场景设计:是否有别的参数是自动输入的,
非手动输入的,
包含了数字字母大小写字母不规范的一长串
它一定是不断变化的
一般在该请求之前的某个请求的响应结果里面

	token="(.*)" data-id="

23、接口的本质
什么是接口:官方定义–接口是数据传递的通道
要完成接口测试,必须要有接口地址,接口参数以及接口的返回文档。

接口文档:
	做接口测试最重要的是有对应的接口文档以及接口参数,有好的接口文档对于我们来顺利完成接口时非常重要的
	
	任何一个接口都有如下特定的参数:
	接口地址
	接口参数以及接口的返回文档。接口情趣方式
	接口返回结果

24、接口串联自动化测试
使用HTTP Cookie管理器串联登录和充值

25、存储测试结果
右键–监听器–保存响应到文件
文件名前缀:保存到那个地方的前缀时什么?
variable Name:把结果存储起来,
后续会用到的时候,直接通过变量来获取后续的选项
26、写入结果到Excel之环境准备
需要下载jxl.jar包来完成对Excel的读写以及修改操作

获取结果,写入到对应的单元格里面去
需要利用beanshell写java代码,获取对应的数据写入到Excel里面去
beanshell中的vars:实际引用Jmeter线程的局部变量, 连通Jmeter 和 beanshell
Excel中一般有三个要素:workbook、sheet、cell
要把结果存储到指定的单元格,那么就必须要确定好这三个元素依次来定位

1.先获取Excel的文件名
2.获取表单名
3.获取单元格的坐标

Jemter写入结果到Excel
	1.新建线程组,创建1一个登入请求的HTTP请求,并传入相关参数
	2.新建一个正则表达式提取器,获取http请求返回的结果
	3.创建一个beanshell调用代码,创建一个Excel文件,
		这里需要用到仅一次控制器(原因:才能让所有的用例写入到一个Excel中)
			代码:
			{
			t=new CWOutputFile();//实例化对象
			String filePath=t.cOutputFile("测试");//调用方法,获取到文件名保存到变量中
			vars.put("filePath",filePath);//转为jmeter变量
			}
	
	4.创建一个beanshell调用代码,写入数据到Excel文件中:
		代码:
		{
		s=new CWOutputFile();
		String testData="{"+"\"mobilephone\":\""+"${mobilephone}\","+"\"pwd\":\""+"${pwd}\""+"}";
		String preResult=vars.get("preResult");//用get方法可以确保获取到的是字符串,里面传递的是变量名,不需要用${变量名}这种方式咯!
		String fresult=vars.get("fresult");
		s.wOutputFile("${filepath}", "${caseNo}","${testPoint}",testData,preResult,fresult);
		}
		
		注意:在Jmeter中我们经常会使用正则表达式去获取接口返回的参数,
			在引用参数的时候,可以直接使用“${参数名}”,
			如果这个参数的格式不带有任何符号需要转义的时候,
			那么这种引用方式就没有问题,否则Jmeter就没法识别。
			这时可以用vars.get("参数名")的方法将Jmeter变量先变成Java变量,
			然后再去操作,就不会报错!

27、接口项目实战——一粒云
28、JSON Extractor获取数组类型的数据
下标从零开始,取头不取尾

29、正则表达式来获取数组类型的数据
“fileId”\d*),“parentId”

30、逻辑控制器FOREACH的用法
去遍历每个数组的数据
正则表达式如果获取的是数组的话,就应该和foreach搭配使用

31、Jmeter录制脚本的原理
代理:客户端与服务端的中转站
原理:

	客户端-Jmeter代理-网络-服务端
			|
		生成脚本文件
		
Jmete录制WEB脚本
	方式:
		工作台-右键添加-非测试元件-HTTP代理服务器
	
对录制脚本进行优化:
	js/css/png/jpeg等这类请求删掉
	没有传递任何数据的请求可以屏蔽掉
	与目标网站无关的域名请求可以删掉

32、回放WEB脚本和联调
1、回放脚本,查看脚本是否跑成功
2、回访不成功查看每个请求的参数:那些是我们手动填写的那些不是?
3、从包含非手动填写数据的请求的前几个请求的返回结果里找数据
4、利用正则表达式或JSONPATH正则表达式的方式去获取数据,并传递给第二步的请求参数
5、再次访问,多次修改并联调,直至脚本顺利通过

34、web脚本参数化
参数化的方式:csv-.txt;csv-.csv;函数助手;用户自定义的变量

35、Jmeter录制APP脚本
设置手机代理:让App请求指向Jmeter
选项–代理–设置:地址为电脑的本机iP地址 端口是8888
注意:我们的手机与Jmeter所在的电脑必须在同一个WLAN下!否则会失败
Jmeter启动必须要用BAT非JAR

36、压力设计场景
1、那些业务需要做压力测试
比较常见的业务场景(or 功能模块)
单业务场景/或者多业务场景
项目要求做的业务场景

	2、压力测试并发数量值
			是否有预期数值,一次性达到,有无测试参考值
			无预期数值,采取二八原则-->用在线用户数的20%作为参考
			
	3、关注的参数
			响应时间--135、258原则
			tps--吞吐量,每秒通过的事务数,会有极限值,根据结果去做进一步的并发数/脚本的调整
			错误率--越低越好,90%的正确率,金融业务须达到100%正确率
			CPU和内存 队列 磁盘 的使用情况--cpu占有率不超过80%,内存<20%,队列<1;磁盘读写操作频率不要过高过快;
	
	场景设置:
		线程数:就是并发数,目标100,采取叠加的方式进行添加
		启动时间(Ramp-Up period):每秒启动多少个(可以根据结果去进行调整),想要服务器压力大点就时间少点,想要服务器压力慢慢增加就时间长点
		循环次数:指定次数or永远(跟下面的持续时间配合使用)
		调度器:配合“永远”使用去设置时间
		
	负载测试:逐步增加并发数
	稳定性设计:时间确定,查看该事件段内的性能情况
	
	聚合报告--查看压力测试结果
	
	Average:平均响应时间-默认情况下是单个Request的平均响应时间,当使用了Transaction Controller时,也可以已Transaction为单位显示平均响应时间
	Median:中位数,也就是50%用户的响应时间
	90%line:90%用户的响应时间
	Min:最小响应时间
	Max:最大响应时间
	Throughput:吞吐量-默认情况下表示每秒完成的请求数,当使用了Transaction Controller时,也可以表示了类似LoadRunner的Transaction per Second数
	
使用Assertion对结果进行简单的分类
	响应断言:通常是用于对每一个request sampler进行额外验证的工具
	响应时间的断言:规定请求的响应时间不能超过多少毫秒1000ms=1s
	文件大小的断言:单位bytes,可以暂时不考虑

37、GUI模式和非GUI模式的查看方法
GUI模式:界面模式,一般在做接口测试/脚本编写/压力测试的时候使用
非GUI测试:命令行模式,做压力测试,并发测试,性能测试

38、非GUI模式常用命令(即CLI模式)
1、命令执行如:jmeter -n -t xx.jmx -l xx.jtl -e -o D:\xx
常用参数解释如下:
-n:说明jmeter非GUI运行
-t:运行的测试计划名称,xxx.jmx路径+文件
-l:JTL文件去保存结果,路径+xxx.jtl
-r: 使用远程执行
-j:保存执行log
-H:代理机主机名或者ip地址
-P:代理机端口
-e:在脚本运行结束后生成HTML报告
-o:保存html报告的路径,此文件夹必须为空或者不存在
用命令生成结果文件:jmeter -n -t [jmx file] -l [results file]
用命令生成HTML报告:
37、HTML测试报告的的分析
1、APDEX (Application Performance Index)指数
性能指标,用户对应用性能满意度的量化值,0代表没有满意用户,1则代表所有用户都满意
2、Statistics(统计):相当于GUI模式的聚合报告

38、Jmeter操作数据库原理

39、JDBC Connection Configuration 数据库的连接配置
1)Variable Name:数据库连接池的名称,所有数据库的连接信息都可以通过这个变量名获取到

2) Database URL: jdbc:mysql://数据库地址:数据库端口号/数据库名 

3) JDBC Driver Class :org.gjt.mm.mysql.Driver  或者 com.mysql.jdbc.Driver   这是固定值

4) Username:这个数据库的登录名

5) Password: 这个是数据库的登录密码

40、操作数据库的JDBC Request

Variable Name:数据库连接池的名字,需要与上面配置的JDBC Connection Configuration中Variable Name Bound Pool的Variable Name相同 
Query type:必填,请求类型;增删改--Update 查--select
Select statement:查询语句类型;如果有多条语句,也只会执行第一条语句
Update statement:更新语句类型(包含insert和update);如果有多条语句,也只会执行第一条语句
Prepared select statement :多条语句的查询
Prepared update statement:多条涉及更新sql的语句

成对出现{
Parameter valus:参数值 参数之间用逗号隔开
Parameter types:参数类型,可参考:Javadoc for java.sql.Types 
}

Variable names:保存sql语句返回结果的变量名 
Result variable name:创建一个对象变量,保存所有返回的结果 
Query timeout:查询超时时间 
Handle result set:定义如何处理由callable statements语句返回的结果

41、Jmeter如何连接数据库
步骤:
添加测试计划
添加线程组
添加JDBC请求
添加JDBC Connection Configuration
添加查看结果树
发送测试请求

要求:
	Jmeter并不能直接操作数据库
	连接信息不能有空格
	书写的SQL语句不用写分号
	自动增长的值和是有默认值,可以不写

42、多条语句的查询
多条SQL语句需要在database URL后:拼接-?allowMultiQueries=true
多条语句的查询必须加;
设置线程组的数据–指定多少数据就设置数据大小

43、操作bean shell sampler编写加密算法
有部分数据直接插入是不可以的,需要加密处理

44、批量删除数据
采用csv的形式
利用like %
利用between

45、更新和插入操作乱码问题
有中文乱码需要在database URL后:拼接-?allowMultiQueries=true&characterEncoding=UTF-8

46、多条语句的查询
如果要显示多条数据,要设置:query Type=Callable Statement

47、jdbc request select参数化

48、webservice接口
常见的接口类型:
http
webservice(soap)
webSocket
dubbo
如何判断是否是 webservice接口:
地址后有wsdl结尾的
以xml树展示的浏览器信息的

查看接口文档的相关信息
	接口地址
	接口文档名称:
	接口参数:

49、用Jmeter完成webservice测试
1、准备webservice的接口地址
2、新建线程组-选择http请求-填入参数-添加查看结果树-发送请求-查看结果
3、测试完成

webservice请求是经过包装后的post请求,所以,这里需要选择post请求
webservice请求不是单纯的HTTP请求,所以还需要添加请求头
由于中文不能被传递过去识别,所以还需要设置编码UTF-8	

50、什么是websoket
对于实时要求高,海量并发的应用,如:金融证券的实时信息,社交网络的实时消息推送,网络直播等
1、下载jmeter-plugins的JAR包,放到lib/ext路径下
2、选项-plugins Manager(插件管理器) 下载Socket的相关插件
3、添加线程组-sampler-websocket sampler
51、dubbo的理解
严格来说,dubbo不是协议,而是一种分布式服务框架

52、Referer的作用
Referer是HTTP请求的header的一部分,当浏览器(或者模拟器)向web服务器发送请求的时候哦,头信息里有包含Referer
1.防盗链
2、防止恶意请求

53、data-from格式的数据处理
解决方案:
1、找准key和value(顺序要一致)
2、勾选–use multipart/from-data for POST ; -Browser-compatible headers

54、线程数与循环次数的设置
线程数:表示会发起几组线程去请求
循环数:表示每组线程会循环几次
仅一次逻辑控制器只对循环数设置的时候有效
55、if循环控制器
运行指定用例
给用例添加一个run字段
0表示不执行
1表示执行
利用函数助手表达式KaTeX parse error: Expected '}', got 'EOF' at end of input: {_jex13({run}==1)}

56、Critical Section Controller(临界控制器)
Jmeter中的取样器的执行顺序是:从上往下执行
Jmeter中 察看结果树中取样器是根据时间升序排列的
固定定时器:保证请求按顺序执行
Critical Section Controller(临界控制器):用于执行一定要有现后顺序的测试
${_threadNum}线程数

固定锁名称,就固定只能由一个线程执行
临界控制器:并发测试,就变成了单用户串行

57、并发线程组bzm - Concurrency Thread Group阶梯式加压
Target Concurrency:目标并发(线程数)
Ramp Up Time:加速时间(整个测试)
Ramp-Up Steps Count:加速步骤计数(总共分几步加线程)
Hold Target Rate Time:保持目标速率时间(持续时间)

Time Unit:选择时间单位(分钟或者秒)

Thread Iterations Limit:线程迭代次数限制(循环次数)

Log Threads Status into File:将线程状态记录到文件中(将线程启动和线程停止事件保存为日志文件)

56、.如果脚本中请求的返回值过于大时,必须要设置请求头为Accept-Cofing:gzip,将返回的值进行压缩,避免占用过大内存(即脚本本身不能存在瓶颈)

58、阶梯压测线程 jp@gc - Stepping Thread Group (deprecated)
This group will start:总加载线程数100
Fist,wait for:等待多长时间开始运行,相当于延时多少秒开始执行
Then start:初次加载多少个线程
next add 、threads every、using ramp-up:每过30秒加载10线程,10个线程在5秒加载完成,可以理解为总共花费35秒时间,再多10个线程再跑
then hold load for:所有线程加载完之后,运行60秒
fianlly,stop /threads every :每1秒停止5个线程,20秒则停止100个线程数

本文只是学习笔记,本人也是小白一枚,如有不对的地方还请大佬指出

你可能感兴趣的:(jmeter)