jmeter学习记录

Jmeter-工具入门

✈============================✈

Create_time:(学习第一天)

学习内容:

标题 jmeter的环境搭建及环境变量配置

1.下载jdk及jmeter文件
2.安装jdk,解压jmeter
3.将解压的jmeter拷贝到d:D:\Program Files\apache-jmeter-5.6.3
4.配置环境变量
1)系统属性→环境变量→系统变量→path配置界面中,新增java环境变量
配置参数:
C:\Program Files\Java\jdk-1.8(与实际jdk安装位置一致)
C:\Program Files\Java\jdk-1.8\bin(与实际jdk安装位置一致)
C:\Program Files\Java\jre-1.8\bin(与实际jre安装位置一致)
%JAVA_HOME%\bin
%JAVA_HOME%\jre\bin
%JMETER_HOME%\bin
2)系统属性→环境变量→系统变量界面中,新增JMETER_HOME
变量名:JMETER_HOME
变量值:D:\Program Files\apache-jmeter-5.6.3(与实际jmeter放置位置一致)

变量名:JAVA_HOME
变量值:C:\Program Files\Java\jdk1.8.0_162(与实际jdk安装路径一致)
3)系统属性→环境变量→系统变量界面中,新增CLASSPATH
变量名:CLASSPATH
变量值:;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar

✈============================✈

Create_time:(学习第二天)

学习内容:
1.jmeter基本使用
2.并发和顺序执行
3.优先和最后执行线程
4.线程组常用设置
5.http默认请求

接口:
巡检管理系统的HTTP/HTTPS服务地址格式为http(s)😕/ip地址:服务端口/,HTTP/HTTPS服务端口默认为8065
HTTP请求方式:GET
http(s)😕/IMS服务地址/api/v1/token?access_id=ACCESS_ID&access_secret=ACCESS_SECRET

1.jmeter基本使用

新建测试计划→创建线程组(测试计划右键-添加-线程-线程组)-创建取样器(线程组右键-取样器-http请求)-基本中配置参数
在这里插入图片描述

2.并发和顺序执行

点击测试计划,勾选独立运行。。。。选项为顺序执行,不够选为并发执行
在这里插入图片描述

3.优先和最优执行线程组

Setup线程组和teardown线程组
添加该两个线程组后,该两个线程组放置与执行的顺序永远是Setup线程组首先执行,然后执行其他线程组(执行顺序与独立运行是否勾选有关),最后执行teardown线程组

4.线程组常用基本设置

在这里插入图片描述

5.http请求默认值

简化程序,设置重复性内容
在这里插入图片描述
转换为
在这里插入图片描述
在这里插入图片描述
✈============================✈

Create_time:(学习第三天)

学习内容:
1.信息头管理器
2.参数化-用户定义变量
3.参数化-csv数据文件设置(常用)
4.参数化-用户参数
5.参数化-函数
6.参数化-常用函数
7.直连数据库

1.信息头管理器

需要用到的接口
接口调用请求说明
HTTP请求方式:POST
http(s)😕/IMS服务地址/api/v1/task/task_info/configuration?token=“TOKEN”?

请求为JSON数据包,示例数据如下:
{
“id_task_info”: “0CE13A65-1E3D-44C9-8E50-994873386122”,
“task_name”: “XX”,
“task_type”: “e_inspect_all”,
“task_sub_type”: “e_inspect_extend_1”,
“point_sort_type”: 0,
“monitor_points”: [“006991091c3140af9c4ba3a4070e0717”,
“00721cc33568402ca444c08669e89953”]
}

如果在请求的时候需要新增内容,那么就需要信息头管理器,管理传递的json数据

在这里插入图片描述
在这里插入图片描述
参数化
在这里插入图片描述

2.参数化-用户定义变量

用户自定义变量(UserDefinedYariables):更多用于设置全局变量,常用于数据库地址,测试环境、开发环境地址等常量配置。
用户定义变量符号:${}
在这里插入图片描述
在这里插入图片描述

3.参数化-csv数据文件设置(常用)

CSV数据文件设置(csyDataSetConfig):这种方式是通常所指的参数化。数据存储在文件中,该种参数化方式取值范围大,灵活性强,适用于大量测试数据时的使用。
1.参数化的定义
A 参数化是自动化测试脚本的一种常用技巧,可将脚本中的某些参数使用变量来代替。例如登录操作时,利用GET/POST请求方式传递参数的场景,可在脚本运行时指定参数的取值范围和规则。
B 脚本在运行时,根据需要选取不同的参数值作为输入,该方式称为数据驱动测试(DataDrivenTest),而参数的取值范围被称为数据池(Data Pool)。
2)什么情况下需要用到参数化测试数据的准备阶段我们需要用到参数化。使用场景:
A 若需求每次访问某一个接口的数据不一样时,需要用到参数化,更好地模拟用户情况,常用于压力测试。
B 需要多次获取同一数据,则可以用一个参数化来代替,在需要的地方使用这一个变量就可以了。

我一般常用操作,简单说明:
·文件名:就直接浏览选择文件即可,也就是使用数据文件的绝对路径。·文件编码选择UTF-8。
·变量名称:就是把数据文件的每个变量名都填写上,中间用逗号分割。
·忽略首行:选择True,如果CSV文件中首行写的是变量名称,选择忽略首行。
·分隔符:如果CSV文件中的数据,使用的是逗号隔开,就默是默认值。如果是制表符,就用t表示。·是否允许带引号?:如果变量值中有引号就选择True,没有则默认False即可。
·其他一般默认选择。如果需求看上面说明中写的很详细,按工作中实际情况选择。

2.数据文件内容:
1)先用Excel表格编辑所需的请求参数
2)我们需要把该文件保存为.csv格式。
3)然后使用Not epad++打开该文件,点击"编码”一>转为UTF-8编码,防止中文乱码。
4)最终所得到的·csv格式文件:
3.在测试计划(也可以是线程组)里面添加配置元件csyDataSetConfig组件:
选中"线程组"右键一>》添加一>配置元件一》CSV数据文件设置。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.参数化-用户参数

1、用户参数组件介绍
用户参数(Us erParameter)组件在前置处理器元件中添加,前置处理器的作用是在取样器发出请求之前,执行一些操作。即:如果将前置处理器附加到取样器元件中,则它将在该取样器元件运行之前执行。常用操作如:取样器参数设置、环境变量设置、脚本预处理等。
2.用户参数组件添加方式:选中"取样器"右键一〉添加->前置处理器->用户参数。
在这里插入图片描述
在这里插入图片描述
因为模拟的4个用户,所以需要设置线程数
在这里插入图片描述

5.参数化-函数

(1)信息类
主要用于获取一些常用的基本信息或是日志输出控制。
_threadnum函数:只是简单地返回当前线程的编号。
_samplerName 函数:获取当前请求的名称。
_machineIP 函数:获取本机的IP地址。
_machineNmae函数:返回本机的主机名。
_time函数:可以通过多种格式返回当前时间。
_1og函数:会记录一条日志,并返回函数的输入字符串。
_logn函数:会记录一条日志,并返回空字符串。
_TestPlanName函数:获取当前测试计划。
(2)输入类
主要用于从外部文件读取数据,进行参数化。即:用于读取文件。
_StringFromFile函数:可以被用来从文本文件中读取字符串,这对需要大量可变数据的测试很有用。
_FileTostring函数:可以被用来读取整个文件。每次对该函数的调用,都会读取整个文件。
_csvRead函数:会从CSV文件读取一个字符串(请注意与StringFromFile的区别)。
_XPath函数:读取XML文件,并在文件中寻找与指定XPath相匹配的地方。每调用函数一次,就会返回下一个匹配项。到达文件末尾后,会从头开始。
(3)计算类
用于计数、求和等操作。
_counter函数:每次调用计数器函数都会产生一个新值,从1开始每次加1。
_intsum函数:可以被用来计算两个或者更多整数值的和。
_longSum函数:可以被用来计算两个或者更多长整型值的合。
_Random函数:会返回指定最大值和最小值之间的随机数。
_RandomFromMultipleuars函数:从一组数据中提取一个数据。
_RandomString函数:生成随机字符串。
_UUID函数:生成随机的唯一的UUID。
(4)脚本类
主要用于调用外部脚本或是解析执行脚本,例如:groovy、beanshell等。
_groovy函数:执行groowy脚本。会执行传递给它的脚本,并返回结果。
_Beanshel1函数:会执行传递给它的脚本,并返回结果。
_javascript函数:可以用来执行Javascript代码片段(非Java),并返回结果值。
_jex12函数:可以用于执行JEXL2表达式,并返回执行结果。
_jex13函数:可以用于执行JEXL3表达式,并返回执行结果。
(5)属性类
用于读取和设置JMeter的配置。
_property函数:会返回一个JMeter属性的值。如果函数找不到属性值,而又没有提供默认值,则它会返回属性的名称。
_P函数:是一个简化版的属性函数,目的是使用在命令行中定义的属性。不同于函数_property,本函数没有提供选项用于设置保存属性值的变量。
_setProperty函数:用于设置JMeter属性的值。函数的默认返回值是空字符串,因此该函数可以被用在任何地方,只要对函数本身调用是正确的。
(6)变量类
对变量进行操作,主要用于验证变量表达式引用是否正确。
_split函数:会通过分隔符来拆分传递给它的字符串,并返回原始的字符串。如果分隔符紧挨在一起,那么函数就会以变量值的形式返回"?"
_v函数:可以用于执行变量名表达式,并返回执行结果。
_eval函数:可以用来执行一个字符串表达式,并返回执行结果。如此一来,用户就可以对字符串中的变量和函数引用做出修改。
_evaluar函数:可以用来执行保存在变量中的表达式,并返回执行结果。
(7)字符串类
用于对字符串的处理操作。
_regexFunction函数:正则表达式函数可以使用正则表达式(用户提供的)来解析前面的服务器响应(或者是某个变量值),函数会返回一个有模板的字符串,其中携带有可变的值。还可以被用来保存值,以便供后续使用。
_escapedroRegexpChars函数:将一些Java正则表达式引擎不识别的正则式进行转换,转换过程中使用了ORO正则表达式库,这个库也支持Perl5兼容的正则表达式语法。(Perl是一种高级、通用、直译式、动态的脚本语言,内部集成了正则表达式的功能)
_char函数:会将一串数字转换成Unicode字符。
_unescape 函数:用于反转义Java-escaped 字符串。
_unescapeHtm1函数:用于反转义一个包含HTML实体的字符串,将其变为包含实际Unicode字符的字符串。
_escapeHtml函数:用于转义字符串中的字符(使用HTML实体)。即:使用htmlcoding 编码目标字符串。
_LescapeXml函数:使用XMLcoding 编码目标字符串。
_urldecode 函数:urlcode解码。
_urlencode 函数:编码为urlcode。

6.参数化-常用函数

常用函数介绍
_Random 函数
_counter函数
_time 函数函数
_property函数
_setProperty函数
_intsum函数
_machineName函数
_threadNum 函数
在这里插入图片描述
在这里插入图片描述

7.直连数据库

JMeter中查询语句的操作步骤:
1.添加测试计划。
2.添加线程组,设置线程组的次数。
3.添加 JDBCConnection Configuration 组件,配置数据库连接。
4.添加JDBCRequest请求,编写SQL语句,使用参数化。
5.运行脚本,发送SQL请求。
6.添加察看结果树,查看结果。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
调试取样器中无需设置参数,是用于获取JDBC Request的结果并给后续的请求取值用
在这里插入图片描述
在这里插入图片描述
✈============================✈

Create_time:(学习第四天)

学习内容:
1.断言-响应断言(常用)
2.断言-大小断言
3.断言-持续时间断言

1.断言-响应断言

添加元件操作步骤:
1.创建测试计划。
2.创建线程组:选中"测试计划"右键一>添加一>线程(用户)一>线程组。
3.在线程组里面,添加取样器"HTTP请求"组件:选中"线程组"右键->添加->取样器->HTTP请求
4.在取样器下,添加断言"响应断言"组件:选中"取样器"右键->添加->断言->响应断言。
5.在取样器下,添加监听器"断言结果"组件:选中"取样器"右键->添加->监听器->断言结果。
6.在线程组里面,添加监听器"察看结果树"组件:查看结果,选中"线程组"右键->添加-〉监听器->察看结果树。

总结
响应断言组件常用于断言三个方面:
1.断言HTTP请求的响应状态码。如上面的练习。 2.断言响应信息中的业务状态码。如下示例:
响应结果:{“status”:1,“code”:“100e1”,“data”:null,“msg”:“登录成功”} 匹配业务状态码界面:

2.断言-大小断言

Response Size Field to Test(响应字段大小):要断言哪部分内容的字节大小。
完整响应:Fullresponse:响应全部内容的字节大小。
响应头:Response Headers:响应头内容的字节大小。
响应消息体:ResponseBody:响应体内容的字节大小。
响应代码:响应码字节大小。
响应信息:Responsemessage部分信息字节大小。
在这里插入图片描述

3.断言-持续时间断言

用于判断服务器的响应时间是否符合要求。
该断言计算的时间为,从发送请求到收到响应的这段时间,是否在我们设置的时间之内。如果该时间小于设置时间,则成功:如果大于设置时间,则失败。
添加持续时间断言组件操作:选中“取样器"右键->添加一》断言一》持续时间断言。

Jmeter-工具进阶

✈============================✈

Create_time:(学习第四天)

学习内容:

1.逻辑控制器-if控制器
2.逻辑控制器-For Each控制器
3.逻辑控制器-循环控制器
4.接口关联(X-Path提取器)
5.接口关联(正则表达式提取器)

什么是逻辑控制器

JMeter官网对逻辑控制器的解释是: “Logic Controllers determine the order in which Samplers are processed.” 意思是说,逻辑控制器可以控制采样器(Samplers)的执行顺序。
由此可知,控制器需要和采样器一起使用,否则控制器就没有什么意义了。放在控制器下面的所有采样器,都会当做一个整体,执行时也会一起被执行。
JMeter提供了多种逻辑控制器,它们各个功能都不相同,大概可以分为两种使用类型:
控制测试计划执行过程中,节点的逻辑执行顺序,如:ForEach Controller(ForEach控制器),Loop Controller (循环控制器)、If Controller(如果if空制器)等:
对测试计划中的脚本进行分组,方便JMeter统计执行结果,以及进行脚本的运行时控制等,如:ThroughputController(吞吐量控制器)、TransactionController(事务控制器)等。

标题1.逻辑控制器-if控制器

1.1界面说明:
如果(If)控制器组件界面说明:
名称:如果(If)控制器组件的自定义名称,见名知意最好。
注释:即添加一些备注信息,对该如果(If)控制器组件的简短说明,以便后期回顾时查看。
Expression(mustevaluate totrue or false):填写条件表达式,评估结果必须为真或假。
换句话说,是执行流程验证的条件,用于决定是否应执行子元件。默认情况下,条件被解释为true或false的 Javascript 代码。
Interpret Condition as Wariable Expression?:将条件解释为变量表达式? 意思是说:
如果不勾选此选项:则输入的条件表达式,将会使用JavaScript进行解析。得到需要的true/false结果。
如果勾选此选项:
1)输入的条件表达式,不会使用JavaScript进行解析,而是将条件视为JMeter的变量。
2)如果需要进行条件判断,则需要使用_jex13或者_Broovy函数,来生成函数表达式。通过函数表达式,得到需要的 true/false 结果。
Evaluatefor allchildren?:条件作用于每个子项进行评估。
如果勾选该项,则该控制器在每一个子节点执行时前,执行一次。
默认情况下,该控制器可以对在其下面的所有可运行的组件,进行控制执行,但只在入口执行一次。
在这里插入图片描述
1.2 if控制器中的表达式有两种方式:
1.一种使用Java5cript语言解析条件表达式,表达式为基本的条件表达式写法。(取消勾选 Interpret Condition as Yariable Expression? 选项。)
2.另一种是使用_jex13或者_groovy函数,通过函数表达式,得出我们需要的true 或false结果。(勾选 Interpret Condition as Yariable Expression? 选项)

参数说明:
JEXL expression to evaluate:填写要计算的表达式。
Name ofvariable in which to store theresult(optional):给函数结果定义一个可被引|用的变量名(可选)。
_jex13函数条件格式:KaTeX parse error: Unexpected character: '' at position 17: …_jex13(条件表达式)} ̲==是否等于,如_jex13({AR}==1,)},判断{VAR}变量是否等于1。
!=不等于,如{_jex13(KaTeX parse error: Expected 'EOF', got '}' at position 10: {AR}!=1,)}̲,判断{AR}变量是否不等于1…{AR}!=1 的结果取反。
&&目和||或,如KaTeX parse error: Expected 'EOF', got '&' at position 8: fjex13(&̲{AR}==1 &&“{name}"=“张三”,)}。
>大于或者>=大于等于,如KaTeX parse error: Expected '}', got 'EOF' at end of input: {jex13({count}>=10,)}。
在这里插入图片描述
这样就完成了使用_jex13函数编写表达式的用法。(–groovy函数同理)
说明:
尽可能使用"解释条件作为变量表达式"选项,然后使用_jex13或者_Broovy函数生成条件表达式。
因为运行模拟大量用户的性能脚本时,这样消耗的资源最小。
WHY?
If Controller使用Java5cript解释条件,是每个解释都占用资源,但本来就是一个测试性能的软件,不应因解析条件而消耗更多的资源。
即:如果你使用"解释条件作为变量表达式”,而不是使用Javascript解释表达式,这样能节省更多的性能资源。
因此,if控制器中输入如下:
在这里插入图片描述
1.3 Evaluate for all children?选项说明
如果你勾选了 Interpret Condition as Wariable Expression? 选项,同时也勾选了 Evaluate for all children? 选项。则填写在如果(If)控制器中的表达式,需要为&{JMet erThread.last_sample_ok}。
KaTeX parse error: Expected 'EOF', got '}' at position 28: …d.last_saple_ok}̲表达式的意思是:检查上一个请求…{MeterThread.last_sample_ok}为true,否则为false。
2.下一个请求拿${MeterThread.last_sample_ok}的值来判断是否执行,如果为true,则继续执行,如果为false则不执行,且后边的所有请求都不执行。

标题2.逻辑控制器-For Each控制器

2.1界面介绍
·名称:ForEach控制器组件的自定义名称,见名知意最好。
·注释:即添加一些备注信息,对该ForEach控制器组件的简短说明,以便后期回顾时查看。
·输入变量前缀:输入需要遍历的这一组数据的前缀,例如:appid_1、appid_2,则appid 就是前缀。提示:包括用户自定义变量,或者是参数化文件中的数据都要这样命名才能遍历。
·开始循环字段(不包含):循环的起始位置,如填0,实际是从第一个开始。默认为空也可。(亲测可以)
·结束循环字段(含):循环结束的位置,如填4,实际第4个不会被使用,只会到第3个。默认为空也可以,程序会循环执行到最后一个变量,再停止。(亲测可以)
·Add""before number?:是否在上面输入的变量后增长下划线“"。例如不勾选此项,变量为appid1,appid2…以此类推。勾选此项后,变量名变为appid_1.appid_2…以此类推。
默认为勾选,默认的最好不要动,按照上面的变量名整理数据就好。在日常工作中,看准备数据的情况,来决定是否取消勾选。

ForEach控制器添加元件操作步骤:
在线程组中,添加逻辑控制器“ForEach控制器"组件:选中"线程组"右键->添加一>逻辑控制器->ForEach控制器。
在这里插入图片描述

标题3.逻辑控制器-循环控制器

控制器添加元件步骤:
在线程组中,添加逻辑控制器“循环控制器”组件:选中"线程组"右键->添加一>逻辑控制器->ForEach控制器。
添加控制后,设定循环次数即可

标题4.接口关联(X-Path提取器)

1、XPath提取器介绍
有些WEB项目是前后端不分离的,接口返回的内容不是Json格式的数据,而返回的是一个HTML页面。并且有些参数是隐藏在
HTML页面里面的,需要从HTML页面中提取出这些隐藏参数,这个时候就会用到XPath提取器组件。 XPath提取器组件常用于接口返回值为HTML或XML格式数据的时候,进行数据的提取。
XPath提取器组件在后置处理器元件中,后置处理器主要的作用,在请求结束或者返回响应结果时发挥作用。

2、XPath提取器界面详解
添加XPath提取器组件操作:选中"取样器"右键->添加一>后置处理器一>XPath提取器。
在这里插入图片描述
下面是XPath提取器组件的详细说明:
·名称:XPath提取器组件的自定义名称,见名知意最好。
·注释:即添加一些备注信息,对该XPath提取器组件的简短说明,以便后期回顾时查看。
(1)第一部分Apply to:作用范围(返回内容的取值范围)
Main sampleandsub-samples:作用于父节点的取样器及对应子节点的取样器。
Main sampleonly:仅作用于父节点的取样器。 Sub-samplesonly:仅作用于子节点的取样器。
JMeterYariableName touse:作用于JMeter变量(输入框内可输入JMeter的变量名称),从指定变量中提取需要的值。
(2)第二部分MLParsingOptions:要解析的XML参数
UseTidy(tolerantparser):当需要处理的页面是HTML格式时,必须选中该选项;如果是XML或XHTML格式,则取消选中。
Quiet:表示只显示需要的HTML页面。
Reporterrors:表示显示响应报错。
Showwarnings(报告异常):表示显示警告
UseNamespaces(显示告警):如果启用该选项,后续的XML解析器将使用命名空间来分辨。
Yalidate XML:根据页面元素模式进行检查解析。 Ignore Whites pace :忽略空白内容。
FetchexternalDTDs:如果选中该项,外部将使用DTD规则来获取页面内容。
(3)第三部分内容
Return entire XPath fragment of textcontent:表示是否返回文本内容的整个XPath片段。
Reference Name:定义提取值的变量名称。
XPathQuery:用于提取值的XPath表达式。
匹配数字(0代表随机):表示取值是第几个匹配结果,因为有可能XPat表达式会匹配到多个值。0表示随机,-1表示全部,1代表第一个,2代表第二个,以此类推。
DefaultYalue:参数的默认值。也就是取不到值时的默认值。
总结XPath提取器组件:
对所有符合条件的取样器按顺序进行取样。
例如,如果有一个主取样器和三个子取样器,每个取样器都有一个符合条件的匹配结果(总共4个)。当设置为Sub-samplesonly时,匹配数字为3,则第三个子取样器的匹配结果返回;
当匹配数字为口或者负数,所有的合格的取样器都将被处理,而当匹配数字>0,一旦找到足够的匹配,比对就停止下来。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

标题5.接口关联(正则表达式提取器)

在这里插入图片描述
下面是正则表达式提取器组件的详细说明:
名称:正则表达式提取器组件的自定义名称,见名知意最好。
注释:即添加一些备注信息,对该正则表达式提取器组件的简短说明,以便后期回顾时查看。
(1)第一部分:Applyto:作用范围(返回内容的取值范围)
Mainsample andsub-samples:作用于父节点的取样器及对应子节点的取样器。
Mainsampleonly:仅作用于父节点的取样器。
Sub-samplesonly:仅作用于子节点的取样器。
JMeterYariableNametouse:作用于JMeter变量(输入框内可输入JMeter的变量名称),从指定变量中提取需要的值。
(2)第二部分:Field tocheck:要检查的响应字段
主体:响应报文的主体,最常用。
Body(unescaped):是替换了所有的HTML转义符的响应主体内容,注意HTML转义符处理时不考虑上下文,因此可能有不正确的转换,不太建议使用。(即:替换了转义码的Body部分)
Body as a Document:从不同类型的文件中提取文本,注意这个选项比较影响性能。
信息头(Response Headers):从响应头信息中提取数据,如果你使用中文语言的JMeter,会看到这一项是信息头,这是中文翻译问题,应以英文为准。
Request Headers:从请求头信息中提取数据。
URL:从请求URL中提取数据。
响应码(ResponseCode):提取响应状态码,比如:200、404等。
响应信息(Response Message):响应信息中提取数据。
(3)第三部分内容
引用名称(Name ofcreatedvariable):定义提取值的引l用变量名称。
正则表达式(RegularExpression):用于提取值的正则表达式。
模板(Template( i i iwhereiiscapturing group number,starts at1)):正则表达式的提取模式。如果正则表达式有多个提取结果,则结果是数组形式,模板为 1 1 1,$2,表示把解析到的第几个值赋给变量从1开始匹配,以此类推。若只有一个结果,则只能是 1 1 1
(该项主要针对有多个正则表达式的情况,比如(.<em>?)</em>;(.?),title对应 1 1 1,body对应 2 2 2
匹配数字(0代表随机):正则表达式匹配数据的结果可以看做一个数组,表示如何取值:0代表随机取值,正数n则表示取第n个值,比如1代表第一个,2代表第二个,以此类推。负数则表示提取所有符合条件的值,如-1。
缺省值(DefaultYalue):匹配失败时候的默认值:通常用于后续的逻辑判断,一般通常为特定含义的英文大写组合,比如:ERROR等。
Use empty defau’tvalue:使用空值为默认值。
在这里插入图片描述
总结
正则表达式提取器可以用于对任何文本的提取。提取完参数后,相当于把参数以key-value的形式放到参数池,以便后面的请求使用。
注意:不能超前引用。
正则表达式提取器和XPath提取器的区别:
正则表达式提取器可以用于对页面任何文本的提取,提取的内容是根据正则表达式在页面内容中进行文本匹配:
2.XPath提取器则可以提取返回页面任意元素的任意属性:
3.如果需要提取的文本是页面上某元素的属性值,建议使用XPathExtractor
4.如果需要提取的文本在页面上的位置不固定,或者不是元素的属性,建议使用正则表达式提取器。
正则表达式简单说明
正则表达式(RegularExpression):使用正则表达式解析响应结果,()表示提取字符串中的部分值,请不要使用||,除非你本身需要匹配这个字符。
.代表匹配任意一个字符。
[]表示取值范围。比如:[0-9]代表匹配0-9之间任意一个数字。[a-z]代表匹配a-z之间任意一个字符。[A-Z代表匹配A-Z之间任意的一个字符。
+:匹配前面的子表达式一次或多次。
?:代表匹配一次或一次也没有。这个符号还有特殊的用法,当放到*号后面的时候,标识取到的数据是非贪婪的。
说明:贪婪与非贪婪模式是两种不同的表达式匹配行为,贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配,而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配,即匹配第一个。
*:匹配前面的子表达式零次或多次。
\d:匹配一个数字字符,等价于[0-9]。
\w:匹配包括下划线的任何单词字符,等价于[A-Za-zα-9_]。
{3}:代表匹配3次,
示例如下:
[1-9][0-9]{4,14}:代表前面的子表达式,至少匹配4次,最多不超过14次。
1[358]d{9}:匹配手机号。
[a-zA-Z0-9_]+@[a-zA-Z0-9]+.[a-zA-Z]+:匹配邮箱。

✈============================✈

Create_time:(学习第五天)

学习内容:

1.跨越线程组关联
2.性能测试-高并发
3.性能测试-高频率
4.性能测试-分布式

标题1.跨越线程组关联

在做压力测试的时候常常会遇见一个场景,想要测试的接口需要登录接口返回的token做参数,或者需要其它接口的认证信息,通常能想到的就是正则表达式提取器,把需要的参数提取出来,传递到另一个HTTP请求中。
如果有多个线程组的情况下,需要每个线程组中都要有登陆请求,这不符合我们的规范,最理想状态就是获取token的接口请求一次。然后登陆的认证信息,在Meter测试脚本中的所有接口请求中都可以使用。
这样就实现了跨线程组传递参数,这使得接口之间的关联更加灵活。
所以:什么是跨线程组关联呢?就是在不同线程组之间实现参数传递。
需要设置到的接口:

获取token信息
HTTP请求方式:GET
http(s)😕/IMS服务地址/api/v1/token?access_id=ACCESS_ID&access_secret=ACCESS_SECRET
获取地图元素信息
HTTP请求方式:POST
http(s)😕/IMS服务地址/api/v1/scene/map_element_info?token=“TOKEN”
请求为JSON数据包,示例数据如下:
{
“id_scene_map_info”: “e4d4be918d194d729a78f4cc1e354d13”,
“type_element”: “e_robot_path”
}
需要设计到的接口:

需要设置到的元件:
1.json提取器或者正则表达式提取器
2.函数助手(setproperty和proterty或者p)
3.Beanshell取样器
4.http信息头管理器
操作步骤:
线程组1中使用http请求,获取token值,并使用正则表达式提取器提取token,然后使用函数助手,生成全局变量KaTeX parse error: Expected group after '_' at position 2: {_̲_setProperty(ne…{token},)}
,并将该变量写入到BeanShell取样器中
线程组2中添加HTTP信息头管理器,获取全局变量${__property(newtoken,)}值并赋值给token,然后调用http请求(查询地图元素信息)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
拓展说明(也很重点)
如上需求,在进行性能测试的时候,我们要保证登陆请求线程组中,所有用户登陆的Cookie或token都保存好,才能进入到下
一个线程组中执行其他的跨域关联请求。这样就会有两种实现方式:
1.像本篇文章一样,把需要关联的数据提升到全局属性。
但是这种方式只能适用于单线程跨域关联,如果是很多用户并发进行跨域关联,该种方式只是把最后一个登陆请求的 Cookie或token进行了提升。所以下一个线程组中使用的登陆状态,都是登陆线程组最后一个人的请求状态。

2.第二种方式,把登陆请求中的Cookie或token信息,提取出来并保存到一个文件中。然后在其他关联跨域请求中,使用参数化的方式,把用户登陆的Cookie或token信息,传入到所需的请求中,从而实现跨域关联的操作。(推荐)

第二种方式实现步骤:
1.每一个接口放在一个线程组中。
2.把登陆接口的返回Cookie数据,写入到.csv文件中。
3.jmeter写.csv文件,使用BeanShell。取样器添加后置处理器Beanshellpostprocessor。
4.在下一个跨域关联接口使用数据,用参数化的方式导入·cs文件。只提供BeanShell中的数据存储代码(简单示例)
在这里插入图片描述
关于详细步骤,这里就不展开说明了。我们举一反三,实现这个操作,会很有意思的。

标题2.性能测试-高并发

模拟多用户同时访问的情况
配置情况
1.创建线程组,并配置线程组的线程数量(与并发用户数量一致)
2.在线程组下创建http请求,
3.在http请求下,通过定时器添加同步定时器(Synchronizing Timer),并设置用户数量(与线程数量一致),修改超时时间为10
4.通过监听器添加聚合报告
在这里插入图片描述

标题3.性能测试-高频率

单个用户频繁点击情况(一秒钟访问多少次,持续多少秒)
QPS:Query per Seconds每秒查询数(查询率),每条访问多少次服务器
例如:20QPS(==20次/S)
循环次数=访问频率持续时间
每分钟访问的次数=访问频率
60
需求:
一个用户以20qps的评率访问服务器,持续时间15s,统计服务器平均响应时间
配置情况
1.创建线程组,并配置线程组的循环次数(2015)
2.在线程组下创建http请求,
3.在http请求下,通过定时器添加常数吞吐量定时器(Constant Throughput Timer),并设置目标吞吐量(每分钟的样本量)参数(20
60)
4.通过监听器添加聚合报告
在这里插入图片描述

标题4.性能测试-分布式

(1)什么是分布式测试
分布式测试是指通过局域网和Internet,把分布于不同地点、独立完成特定功能的测试计算机连接起来,以达到测试资源共享、分散操作、集中管理、协同工作、负载均衡、测试过程监控等目的的计算机网络测试。
即:由多台电脑共同完成同一个测试计划的执行,我们称这种测试的方式为分布式测试。换句话说,也就是一个人干不了,就多叫几个人一起干。
(2)为什么要使用分布式测试
在工作中使用JMeter做大并发压力测试的场景下,需要模拟成百上千的用户并发,这样使用单台机器模拟所有的并发用户就有些力不从心。
因为单机受限内存、CPU、网络IO等,会出现被测服务器压力还没有上去,但是执行压测的服务器已经由于模拟的压力太大而宕机了。
为了让JMeter工具能够提供更强大的负载能力,JMeter提供了多台机器同时产生负载的机制,也就是我们所说的分布式的执行方式。
即:Meter的集群模式可以让我们将多台机器联合起来一起产生负载,从而弥补单台机器负载生成能力不足的问题。 JMeter自身的局限性总结:
由于一台电脑的CPU、内存有限,无法满足更高的测试要求。一台压力机中的JMeter,默认最大支持1000左右的并发用户数(线程数),再大的话,容易造成卡顿、无响应等情况。
由于JMeter是JaVa应用,对CPU和内存的消耗较大,在需要模拟大量并发用户数时,单机很容易出现JAVA内存溢出的错误,导致测试脚本本身就有瓶颈。
(3)JMeter分布式测试原理
1.一台电脑作为控制机(Controller、master),其它电脑做为执行机(Agent、slave)。
2.JMeter脚本执行时,控制机会把脚本发送到每台执行机上,执行机拿到脚本后就开始执行。 3.在执行机中执行脚本时,不需要启动JMeter工具界面,可以理解它是通过命令行模式执行的。
4.执行完成后,执行机会把结果回传给控制机,控制机会收集所有执行机的信息并汇总。 JMeter分布式测试架构图如下:
在这里插入图片描述
JMeter分布式测试前提条件:
所有机器,包括aster和slave机器:
1.运行相同版本的JMeter。
2.使用相同版本的Java环境,即JDK。
3.所有机器都要在一个网络中。即:同一局域网中,也就是同一网段中。
4.有基于SSL的RMI的有效密钥库,或者禁用SSL。(本文举例中都是采用的禁用SSL)即:在 jmeter.properties 配置文件中,配置 server.rmi.ssl.disable=true。
5.关闭防火墙,尤其是Linux系统。
提示:
Agent机器上可以不放JMeter的脚本,但如果有用到测试数据,就必须把测试数据放到Agent机器上去。
Controller和Agent机器上最好装有相同版本的JDk和JMeter,并配置好环境变量。
启动的时候控制及和从机都需要启动jmeter-server

多台机协作,以集群的方式完成测试任务,可以提高测试的效率
在这里插入图片描述
准备工作:
不同的控制机和执行机上都必须安装部署jmeter相关软件
配置基础环境中,需要统一软件版本(jdk,jmeter等)
控制机和执行机需要进入jmeter.properties修改参数
控制机和执行机都需要运行jmeter和jmeter-server

jmeter.properties修改参数
1.控制机参数修改内容:
进入D:\Program Files\apache-jmeter-5.6.3\bin安装目录下,找到jmeter.properties,修改如下参数:
remote_hosts=127.0.0.1,192.168.32.200:1099 (增加执行机的IP及端口号)
server.rmi.ssl.disable=true (去掉前面的#号)
2.执行机参数修改内容:
进入D:\Program Files\apache-jmeter-5.6.3\bin安装目录下,找到jmeter.properties,修改如下参数:
server.rmi.ssl.disable=true (去掉前面的#号)

服务启动:
控制机和执行机都需要启动D:\Program Files\apache-jmeter-5.6.3\bin\jmeter-server.bat文件
然后控制机和执行机都需要启动jmeter软件,在执行机中不添加任何数据,控制机中正常编写代码
在控制机中选择运行→远程启动所有,即可查看结果
在这里插入图片描述
✈============================✈

Create_time:(学习第六天)

学习内容:

1.使用非GUI模式运行JMeter(命令行模式)

标题1.使用非GUI模式运行JMeter(命令行模式)

1、JMeter的非GUI模式说明
之前,我们在启动JMeter时,一直会有一个黑色命令行窗口,窗口中提示了如下的信息:
在这里插入图片描述
信息中提示:
1.不要使用GUI模式进行负载测试!GUI模式仅用于测试创建和测试调试。
2.对于负载测试,使用非GUI模式。
非GUl模式启动方式:jmeter -n -t [jmx file] -l [results file]-e -o[Path to web report folder]
3.可以增加Java虚拟机的堆空间,以满足您的测试需求。
在JMeter批处理文件中修改当前环境变量:HEAP=“-Xms1g-Xmx1g-XX:MaxMet as paceSize=256m”
在这里插入图片描述

标题2、为什么使用非GUI模式运行JMeter

使用GUI方式启动JIMeter,在运行线程较多的测试时,会造成内存和CPU的大量消耗,导致客户机卡死。
所以做一般的接口测试、脚本调试、压力测试脚本编写等操作时,我们都会选用GUI模式,因为这里不会涉及到压力测试,只是调试脚本,我们本身关注的也是结果是否通过。而在进行负载测试时,都是使用命令行模式执行脚本,来减少因系统资源的消耗,对测试结果的影响。
并且命令行方式支持在多个环境下使用,可以在Windows系统的dos环境下,也可以在Linux环境上执行。命令行模式优点:
1.图形化界面消耗更多资源,如CPU和内存,容易使压力机达到瓶颈,从而影响测试结果。
2.图形化界面不支持大型的负载测试和性能测试,并发较大时,JMeter会崩溃。
3.命令行方式可以把脚本配置到Jenkins上实现持续集成,做成自动化测试。通过shel脚本或比处理命令均可执行,测试结果可生成报表,可被直接使用生成图形化报告。
4.支持远程或分布式执行。
2、为什么使用非GUI模式运行JMeter
使用GUI方式启动JMeter,在运行线程较多的测试时,会造成内存和CPU的大量消耗,导致客户机卡死。
所以做一般的接口测试、脚本调试、压力测试脚本编写等操作时,我们都会选用GUI模式,因为这里不会涉及到压力测试,只是调试脚本,我们本身关注的也是结果是否通过。而在进行负载测试时,都是使用命令行模式执行脚本,来减少因系统资源的消耗,对测试结果的影响。
并且命令行方式支持在多个环境下使用,可以在Windows系统的dos环境下,也可以在Linux环境上执行。
命令行模式优点:
图形化界面消耗更多资源,如CPU和内存,容易使压力机达到瓶颈,从而影响测试结果。
图形化界面不支持大型的负载测试和性能测试,并发较大时,JMeter会崩溃。
命令行方式可以把脚本配置到Jenkins上实现持续集成,做成自动化测试。通过shell脚本或批处理命令均可执行,测试结果可生成报表,可被直接使用生成图形化报告。
支持远程或分布式执行。

标题3、使用非GUI模式运行JMeter

(1)非GUI模式运行JMeter步骤
1)确定执行路径
执行命令前要检查当前目录是否是%JMeter_Home%\bin目录。
如果 JMeter 脚本不在当前目录,需要指定完整的路径。
如果要把执行的结果保存在其他地方,也要指定完整的路径。
命令中不指定测试计划与测试结果的路径时,
测试计划只在当前目录中查找,测试结果默认都是在执行JMeter命令所在的目录下生成。
2)执行命令
例如,上面日志中提示的命令方式,如下:
jmeter -n -t [testplan jmx file] -l [results file] -e -o [Path to web report folder]
参数解释:
-n:表示non gui mode,就是非图形化模式。
-t:指定JMX脚本路径,即test plan(测试计划)。后面跟需要运行的JMeter 脚本的路径和脚本名称。
-l:指定结果文件路径。
后面跟输出结果文件路径和结果文件名称。
1)若没有指定指定结果文件路径,则自动创建,可以生成.csv文件或者.jtl文件。
2)若只写脚本名称,则默认是在当前目录查找或创建。
-e:设置测试完成后生成测试报表。
-o:指定测试报表生成文件夹,该文件夹必须为空或不存在。
(2)其它参数说明
对于负载测试,您必须在非GUI模式下运行JMeter,以获得最佳结果。
为此,请使用以下命令选项:
在这里插入图片描述

标题4、CLI模式运行示例

示例:(推荐)
在任何位置,执行任何位置的脚本。
前提:需要配置JMeter的bin目录到环境变量中。
在任何位置执行如下命令:
jmeter -n -t C:\Users\L\Desktop\JMeterScript\CLI_test.jmx -l C:\Users\L\Desktop\cli\result.jtl

配置完成JMeter的环境变量,就可以在任何位置执行JMeter命令,不用每次都到%JMeter_Home%\bin位置执行命令了。
同理:执行命令所在目录中的脚本,同样可以不写路径。

示例:
默认分布式执行,命令如下:
jmeter -n -t CLI_test.jmx -r -l report\01-result.csv -j report\01-log.log
示例六:
指定IP分布式执行,命令如下:
jmeter -n -t CLI_test.jmx -R 192.168.10.25:1036 -l report\01-result.csv -j report\01-log.log
即:启动remote_hosts分布式测试。
注意:如果使用-R serverIP port模式,将启动指定的远程压力机,配置文件中设置的 remote_hosts 属性将被此设置覆盖,类似指定远程压力机执行测试。

示例:
生成测试结果报表,即:生成 HTML报告,并保存报告到指定文件夹中。
命令格式:
jmeter -n -t 【Jmx脚本位置】-l 【结果文件result.jtl存放的位置】-e -o 【报告指定文件夹】
实列:
jmeter -n -t E:\jmeter_test\open_api.jmx -l E:\jmeter_test\result\result.jtl -e -o E:\jmeter_test\report -j E:\jmeter_test\log\result.log
如下图所示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 31
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值