失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 性能测试之Jmeter元件

性能测试之Jmeter元件

时间:2020-06-23 01:41:28

相关推荐

性能测试之Jmeter元件

性能测试之Jmeter元件

1.性能测试的本质

性能测试的定义

基于协议模拟用户发请求,对服务器形成一定的负载,来测试服务器的性能指标是否满足用户(产品&公司)的需求。

关注点

时间性能空间性能

与界面无关

2.性能测试分类

负载测试

在需要测试的系统上面,不断施加压力,一直到性能指标达到极限。如:响应时间超过预定指标。如:CPU超过预定的指标。如:内存超过预定指标。

性能测试

特定的状态下,测试系统的状态。如:特定的时间中午12左右。晚上10点左右。

压力测试

被测试的系统在一定的饱和状态下。如:CPU,内存和使用情况下。系统能够处理的能力,以及系统是否会出现BUG或者缺陷。

并发测试

模拟用户访问,多用户并发访问(或同一时间段)同一个系统(同一模块)是否出现性能问题。

可靠性测试

系统加载到一定的压力下,持续运行一段时间,以此测试系统的稳定性。

3.性能测试指标

响应时间并发(并发数,并发用户数)TPS(每秒处理通过的事物数)吞吐量/吞吐率(事务/s, Kb/s)资源利用率: cpu利用率(不允许超过80%;队列长度),内存利用率(80%;页交换频率),带宽利用率

PS:具体的还是按照公司的性能测试指标去做的,因为每家公司的指标都不一样,SO这里我就不多做解释了!!!

4.性能测试工具

loadrunner

特点

1.工业化的性能测试工具,能支持大量用户,提供详细的报表来提供测试分析的数据

2.支持的协议多

3.使用c语言来编写的

优点

1.支持用户量大(以万为单位)

2.提供精确的报表

3.支持IP欺骗

缺点

1.收费

2.体积大

3.无法控制

jmeter

优点

1.开源免费

2.体积小

3.有丰富的第三方插件

缺点

1.不支持IP欺骗

2.报表的精度比loadrunner差

jmeter元件及基本作用域

基本元件

线程组: 模拟用户的配置元件: 进行测试环境与测试数据的初始化. 类似于自动化脚本中的SetUp前置处理器: 对要发送的请求预处理. 类似于自动化脚本中的参数化取样器: 往服务器发送请求. 类似于自动化脚本中的发送请求的代码后置处理器: 对收到的服务器的响应进行数据提取. 类似于自动化脚本中获取响应中特定字段的语句断言: 将收到的响应结果与预期结果做对比. 类似于自动化脚本中的断言监听器: 查看测试脚本运行的结果和日志 类似于自动化脚本中的测试报告定时器: 等待一段时间. 类似于自动化脚本中的sleep测试片段: 封装基本功能,不能单独执行,需要通过脚本调用才能执行. 类似于自动化脚本中封装的函数

元件作用域

核心: 根据测试计划中的树形结果的福子节点来确定的原则取样器是没有作用域的逻辑控制器: 只针对其子节点下的所有元件有效

其他元件

如果其父节点是取样器,只针对父节点(取样器)有效

如果其父节点是非取样器,针对父节点下的所有子节点及节点的子节点有效

3.元件执行顺序

1.顺序: 配置元件,前置处理器,定时器,取样器,后置处理器,断言,监听器

2.注意:

1.配置元件,前置处理器,后置处理器都需要依赖取样器才能执行

2.在同一个作用域下,相同类型元件的执行顺序是从上到下顺序执行

jmeter线程组的特点

介绍: 通过配置线程组中的线程数来模拟用户. 线程数是用户数,线程组就是用户组

特点:

模拟多用户取样器和逻辑控制器必须在线程组下使用一个测试计划可以添加多个线程组,他们可以并行或者串行执行 并行: 默认情况下线程组为并行执行串行: 在测试计划下勾选"独立运行每个线程组"

线程组的分类

线程组: 用于执行业务测试的脚本SetUp线程组: 测试前的预处理操作,在所有的线程组中最先执行TearDown线程组: 测试后的后置处理(恢复环境,数据)的操作,在所有的线程组中最后执行

线程组参数详解

线程数: 模拟虚拟用户数Ramp-up时间: 虚拟用户启动所需要的时间(性能测试)循环次数: 配置指定次数: 控制脚本循环执行次数配置循环永久

1.需要调度器配合使用

2.运行时间: 脚本执行时间

3.延迟启动时间: 脚本等待特定的时间才能开始运行

线程数m和循环次数n的关系

如果同时配置,实际发送的HTTP请求数应该为m * n虽然发送请求次数相同,但不能相互替换

1.线程数: 代表并发用户数,提现服务器的负载量

2.循环次数: 代表执行时间

jmeter取样器

HTTP请求(取样器):

http协议: 可以填写为HTTP或者HTTPS,莫特热闹不填写时为HTTP协议http主机名/IP端口(http用80,https用443): 可以填任意值,默认不填写时为80端口请求方法: HTTP协议支持的所有方法路径: 目录+参数编码格式: 默认IOS国际标准,推荐使用utf-8

察看结果树(监听器)

取样器结果: 统计请求相关信息请求: HTTP请求的请求头和请求体的详细信息响应: HTTP响应的响应头和响应体的详细信息

http请求默认值(配置元件)

测试类似API或网址时可以设置公用的参数

http信息头管理器(配置元件)

用于新增数据,往数据库添加新的数据点击’添加’: 名称 Content-Type; 值 application/json:charset=utf-8

jmeter响应中文乱码的处理

修改jmeter.properties文件中,sampleresult.default.encoding=utf-8.重启jmeter

Jmeter参数化

JMeter参数化常用方式 用户定义的变量用户参数CSV Data Set Config函数 用户定义的变量(作用域不同) 方式1: 添加: 线程组 -> 配置元件 -> 用户定义的变量配置: 参数名 + 参数值使用: 在HTTP请求的取样器中引用定义的变量. ${参数名} 方式2: 配置: 在测试计划中配置用户定义的变量使用: 在HTTP请求的取样器中引用定义的变量. ${参数名} 用户参数 添加: 线程组 -> 前置处理器 -> 用户参数配置: 参数: 添加变量参数值: 添加用户 – 针对每个用户配置不同的参数值使用: 在HTTP请求的取样器中引用定义的变量. ${参数名} CSV数据文件配置 添加: 线程组 -> 配置文件 -> CSV数据文件设置编写CSV数据文件(.csv作为后缀) 多个参数写为多列,其中用逗号分割多组参数值,则使用多行来设置 配置: 文件名: 填写CSV文件的路径,建议使用相对路径文件编码: UTF-8变量名称: 从CSV数据文件中读取的数据需要保存的变量名,有多个变量时用逗号分隔是否忽略首行: 是否从CSV数据文件第一行开始读取分隔符: 要求与CSV数据文件中多列的分隔符一致遇到文件结束符是否再次循环: 默认TRUE遇到文件结束符是否停止线程: 当前一个参数为FALSE,该参数有效,一般设置为TRUE 函数 counter: TRUE: 每个用户使用独立的计数器FALSE: 所有用户使用全局的计数器引用: 在取样器中使用${__counter(FALSE,)}来引用对应的值应用场景: 当需要参数化的数据只有唯一性要求,但是对具体的参数值无明确要求时,建议使用函数方式 random: 随机数函数: 生成用户名称 time 生成一组数字: 时间戳–19700000到现在的时间换算成毫秒在函数助手可设置固定的时间戳: Format string for SimpleDateFormat (optional):yyyy-MM-dd hh:mm:ss

JMeter断言

作用: 让脚本自动化执行的过程中,能够自动的判定执行结果是否正确,需要添加断言常用断言类型 响应断言JSON断言持续时间断言大小断言 响应断言 添加: 线程组 -> HTTP请求 -> 断言 -> 响应断言配置: 测试字段: 需要检查的字段模式匹配规则: 需要使用什么规则来进行检查且, 或者, 非测试模式: 需要校验的值填写多个值 JSON断言 添加: 线程组 -> HTTP请求 -> 断言 -> JSON适用于返回的HTTP响应为JSON格式配置 JSON PATH: $.weather.city勾选"Additional assert value"在expected value里填写期望值 断言持续 适用于性能测试时候,检查HTTP请求响应时间是否超过预期添加: 线程组 -> HTTP请求 -> 断言 -> 断言持续时间配置: 预期时间 大小断言 响应代码: 比如200 代表2,0,0三个字符,需要写3,不能写200

关联和提取器

当多个请求之间有依赖关系,后一个请求的参数需要使用前一个请求的相应数据时,需要用到关联分类: 正则表达式提取器;xpath提取器;JSON提取器正则表达式: 添加: 线程组 - HTTP请求 - 后置处理器 -正则表达式配置: 要检查的响应字段: 默认主体引用名称: 匹配后的数据要存储的变量名正则表达式:(.*?)()里是要保存的数据模板: 111 数字1代表上面正则表达式中第几个() 匹配数据: 0代表随机值, 1代表第一个结果, -1代表所有结果缺省值: 当没有匹配上时将该值保存到变量里 引用: 如果匹配数字为1,则直接使用变量名来使用: $(变量名)如果匹配数字为-1,则使用变量名+后置的方式来引用: $(变量名_s) Xpath提取器添加: 线程组 – HTTP请求 – 后置处理器 – xpath提取器配置 引用名称: 匹配后的数据要存储的变量名xpath_xpath: xpath匹配规则匹配数字: 1代表第一个结果, -1代表所有结果, 0表示随机缺省值: 当没有匹配上时将改制保存到变量里 JSON提取器 添加: 线程组 – HTTP请求 – 后置处理器 – JSON提取器配置 引用名称: 匹配后的数据要存储的变量名JSON path: json路径. $.weatherinfo.city 引用: 直接引用变量名即可 跨越线程组传值(线程组1,线程组2) 在线程组1里: 点击函数助手–选取函数setProperty – 设置参数(属性名称(该函数名称),Value of property(${其他提供的属性名称})) – 生成,复制在线程组1里: 取样器 – BeanShell取样器 – 粘贴在线程组2里: 函数助手 – property --属性名称(该函数名称) – 生成,复制在线程组2里: 放到用到的地方

JMeter直连数据库

连接准备 打开数据库,确定数据库的表及对应的字段加载mysql的jdbc驱动 将jdbc驱动通过测试计划,浏览的方式添加将jdbc驱动jar包放入到lib\ext目录下,并重启jmeter 配置jdbc connection configuration created pool name: 给连接池命名,用于后续引用数据库url: jdbc:mysql://127.0.0.1:3306/tpshop2.0用户名密码 直连数据库使用: 添加JDBC Request: 在取样器下添加配置 配置连接池的名称配置SQL语句配置保存的变量名如果SQL语句返回了多个参数,输入相同个数的变量名来保存 HTTP断言中,就可以引用变量来进行判断

JMeter逻辑控制器

控制元件的执行顺序 IF控制器添加: 线程组 – 逻辑控制器 – if控制器 配置: 使用JS语法: “${name}” == “百度”使用JMeter函数的方式: KaTeX parse error: Expected group after '_' at position 2: {_̲_jexl3("{name}" == ‘baidu’,)}推荐使用函数方式 循环控制器 指定HTTP请求执行特定的次数添加: 线程组 – 逻辑控制器 – 循环控制器配置: 指定次数循环控制器中的循环次数配置m与线程组中的循环次数配置n对比: 关系: 如果同时配置,循环控制器下HTTP请求实际的执行次数应该是m*n区别: 这两个循环次数作用域不同 线程组的循环次数针对整个测试计划循环控制器的循环系数只做用于循环控制器下的请求 ForEach控制器 与用户定义的变量或者与正则表达式提取器配合使用,循环读取返回的变量中的值,执行一次或者多次与用户定义的变量配合使用添加: 线程组 – 逻辑控制器 – ForEach控制器配置:用户定义的变量 变量名: 固定前缀+连续数字 ForEach控制器 变量的前缀: 用户定义的变量中配置的固定前缀起始数字: 连续数字的最小值-1结束数字: 连续数字的最大值输出的变量名称: 依次读取变量值后存储到参数中,供HTTP请求来引用 HTTP请求 引用输出的变量名称与正则表达式配合使用先通过正则表达式提取器,提取出请求中所有满足条件的数据添加ForEach控制器,并配置提取所有满足条件的数据,并保存为变量在其子节点下,添加HTTP请求并引用变量,即可循环读取正则表达式中匹配的所有数据

JMeter定时器

同步定时器[集合点(loadrunner)]高并发 当需要进行大量用户的并发测试时,为了让用户能真正的同时执行,添加同步定时器,用户阻塞线程,直到线程数达到预先配置的数值,才开始执行取样器的操作配置: 模拟用户组的数量(并发数): 同时达到多少用户才开始发送请求超时时间: 必须配置: 否则当虚拟用户数无法被并发数整除时,就会有部分的用户挂起无法执行配置不能太短: 必须比并发数加载的时间要长.否则无法达到并发数的要求,数据就会被释放掉 常数吞吐定时器(高频率) 用于性能测试时模拟用户产生的业务压力,通过指定QPS来对服务器发送固定频率的请求添加: 线程组 – HTTP取样器 – 常数吞吐量定时器配置: 吞吐量的值: QPS * 60

JMeter分布式

应用场景: 当测试机无法模拟用户需要的业务负载时,需要使用多台测试机配合使用原理: 分布式测试时分为一台控制机和多台代理机控制机负责发布测试任务给代理机代理机接受任务并向服务器发送请求,并接受服务器返回的响应,然后将测试结果返回给控制机由控制机对测试结果数据进行汇总统计 注意事项: 所有的测试机防火墙都已经关闭所有的测试机及服务器在同一个网络内所有的测试机的JMeter版本和JDK版本完全相同关闭JMeter里的RMI.SSL开关 分布式配置: 配置: 代理机:server_port: 不重复.如果使用多台机器做代理机,可不用配置关闭RMI.SSL 控制机 emote_server: 所有代理机的IP+port,有多台代理机时用逗号分隔关闭RMI.SSL 运行 代理机: jmeter-server.bat运行控制机:jmeter.bat运行控制代理机执行脚本: 运行 - 远程启动所有

Jmeter报告

生成HTML报告

在cmd中输入

jmeter -n -t 脚本文件 -l 日志文件 -e -o 目录-n: 无图形化运行-t: 被运行的脚本-l: 将运行信息写入日志文件(日志文件必须为空或者不存在)-e: 生成测试报告-o: 指定报告输出目录(目录不存在或者为空)

jmeter -n -t xxx.jmx -l xxx.jtl

jmeter -g xxx.jtl -o [空文件夹]

参数解析

-n:非GUI模式执行JMeter-t: 执行测试文件所在的位置-l: 指定生产测试结果的保存文件, jtl文件格式-e: 测试结束后,生成测试报告-o: 指定测试报告的存放位置-g: 指定已存在的测试结果文件

聚合报告

Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值Samples:表示你这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100Average:平均响应时间——默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,也可以以Transaction 为单位显示平均响应时间Median:中位数,也就是 50% 用户的响应时间90% Line:90% 用户的响应时间Min:最小响应时间Max:最大响应时间Error%:本次测试中出现错误的请求的数量/请求的总数Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数KB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/SecLabel: 请求的名称,就是我们在进行测试的httprequest sampler的名称Samples:总共发给服务器的请求数量,如果模拟10个用户,每个用户迭代10次,那么总的请求数为:10*10 =100次;Average:默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,以Transaction 为单位显示平均响应时间 ,单位是毫秒Median: 50%用户的请求的响应时间,中位数

PS:下篇文章再讲 loadrunner 吧。今天眼睛有点疼了

如果觉得《性能测试之Jmeter元件》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。