本文介绍: 文件名:要读取数据文件名称(数据文件的绝对路径,可浏览选择加载),这个必须要填写,否则会报错Jmeter的绝对路径:1.当Jmeter脚本保存后,使用文件中的选择文件按钮打开时,默认显示的是jmx文件路径窗口;换句话说:文件选择时,其相对路径地址,就是jmx地址——建议这种方式2.CSV文件的相对地址还有一个:Jmeter安装路径中的bin文件夹下文件设置的时候,为了兼容linux和MAC,层级的分隔符使用的是反斜杠,一般使用的是绝对路径,但为了其他人也可以使用脚本,这需要使用相对路径。

jmeter功能测试和做性能测试区别

CSV数据文件设置读取外部文件,进行分数据驱动

文件设置

字段介绍

文件名

文件编码

  • 文件编码:读取数据文件时,采用的编码,该编码设置要和文件名保持一致(utf-8、GBK等等,必须和CSV文件一模一样)
  • txt文件,一般是utf-8
  • CSV文件,字符集并不一定是utf-8,如果自身不是utf-8,但是Jmeter中选择了utf-8,中文信息就有可能出现因为字符集不同导致的乱码
  • 因此,文件名那儿上传的文件,建议使用txt
如果出现编码问题导致的乱码,如何解决

变量名

忽略首行

分隔符

是否允许带引号
  • 是否允许带引号:默认选择False,选择True时会自动去掉数据中双引
  • 如果不允许带引号,但是文件中存在引号时:其默认引号时数据的一部分,所获取的数据中带引号
遇到文件结束符再次循环
  • 遇到文件结束符再次循环:文件所有数据加载完之后,是否从头再次读取
  • True:表示继续循环,意思是继续循环取值(取文件中的值)
    • 代表文件中的内容从头到尾全部都获取一次之后,再次从头获取
    • 如果线程有100个,数据只有10个,值获取完之后,第11个重新获取第1个值
  • False:表示不在循环取值

遇到文件结束符停止线程

  • 遇到文件结束符停止线程:文件所有数据加载完成之后,是否停止当前运行线程
  • True:表示遇到文件结束符就停止线程,意思是Jmeter会停止运行
    • 如果线程有100个,数据只有10行(代表第10行后一个文件结束符),那么只能调用10次接口
  • False:表示遇到文件结束符不停止线程,意思是Jmeter还会继续跑
  • -如果线程有100个,数据只有10行(代表第10行后一个文件结束符),可以调用100次接口
  • 【注意】“遇到文件结束符再次循环”和“遇到文件结束符停止线程”必须不一样,一个为False,另外一个必须时True,否则有一个设置不起作用(因为冲突导致下面一个设置失效了)

文件共享模式

  • 线程共享模式:线程共享数据的模式
    • 所有线程共享:如果CSV数据文件设置在测试计划下,所有线程都能共享访问CSV读取出来的数据(包括跨线程组的线程),如果CSV数据文件设置在线程组下,相当于当前线程组生效
      • 在所有线程共享的模式下,如果是两个不同的线程组(每个线程组都只有1个请求),第一个线程组使用第一条数据后,第二个线程组的HTTP请求就使用第二条数
      • 多个线程组,内存中只有一份数据(如果CSV文件设置在测试计划下)
    • 当前线程组:当前线程组中的所有线程,共享访问CSV读取出来的数据;有几个线程组,内存中就有几份相同的数据(如果CSV文件设置在测试计划下)
      • 每个线程私有一份(如果CSV文件设置在测试计划下),有多少个线程就有多少份,线程的数量是多个线程组中线程的总量(即可以跨线程)
      • 运行时,线程只会取内存中属于自己的那份CSV问价,且都是从头开始读取
  • 编辑自定义功能,目前无法使用

设置下面的CSV设置项之后,要修改关联

Jmeter关联

正则表达式提取器

详情元素介绍

正则表达式

注意事项

模板匹配多组数据的使用

Xpath提取器

详情元素介绍

Xpath表达式

json提取器

详情元素介绍

  • Names of creat variable:保存的变量,后面接口要使用的变量名
  • JSON Path expreesion:JsonPath表达式,通过JSON表达式提取数据
  • Math No.(0 for Random):如果JSON表达式中提取了多组数据,那么按照数字选择某组数据
    • -1表示获取全部数值变量名称会自动加上下划线和一个数字,引用的时候需要注意,因为变量名称已经发生了变化
    • 正数,当正数数值小于返回数据的个数时,表示列表/元组索引,填写几就是第几个数据
    • 返回数组中只有一个值的时候,可以填写任意大于等于0的数值
  • Compute concatenation var(suffix_ALL):如果JSON表达式提取器提取了多组数据,并且勾选了Compute concatenation var(suffix_ALL),那么自动拼接所有数据,以逗号作为分隔符,然后保存到Name of creat variable设置的变量中
  • Default Values:默认值
  • 一个json提取器,可以写多个jsonpath提取方式,多个jsonpath提取式可以使用英文的分号隔开,这个时候就必须填写 Default Values

JsonPath语法

    • $表示提取根节点的数据
    • $.a表示从根节点开始,寻找根的字节点a,并提取a的数据
    • $.a.b表示从根节点开始,寻找根的字节点a,并返回b的数据
  • -$.a[条件].b如果一个字节点a是列表,那么可以这样写,代表提取a列表中,满足【表达式】筛选条件所有数据中,节点b的值
    在这里插入图片描述
  • 比较复杂的表达式:$.content[?(@.id)==31)].courseName,具体规则
  • 拿到json信息后,按照规则,将参数名写在具体位置
    在这里插入图片描述

边界提取器

  • 正则提取器很类似,也可以提取请求或者响应中的信息
  • 需要准确的写出左边界和右边界
  • 可以作为正则提取器无法熟练使用时的替代品
  • 添加方法:取样器——添加——后置处理器——边界提取器
    在这里插入图片描述

页面元素介绍

Jmeter断言——性能测试脚本中不建议写

性能测试中的断言

  • 断言:预期结果和实际结果,进行比较,一致,说明没有问题,不一致说明有bug
    • 受写断言的写法有关,如果脚本的断言有错误,本来请求是成功的,也会被认定为失败
    • 因此,就会导致jmeter在进行断言的时候,需要分配一定的资源给断言来进行执行,执行断言需要一定的时间,因此导致下一次发起的请求有一定的延迟
  • 因此在一定时间内,发起的请求数量减少了,也就造成了短时间内对服务器造成的总压力不足,对服务器进行的性能测试的结果指标误差就更大了
  • 因此,从这个角度来讲,不建议在性能测试脚本中写断言

再次强调

  • 在性能测试中,默认的成功与失败只和状态码有关,与响应结果内容的准确性无关
  • 默认成功的状态码:1XX、2XX、3XX
  • 默认失败的状态码:4XX、5XX
  • 如果加了断言,就是人为强制的讲响应结果的正确性与jmeter的成功和失败挂钩,也就人为的干预了测试结果
  • 因此也就人为的干预了性能测试的结果指标(成功率),那么性能测试的结果就出现了错误的判断
  • 从这个角度来讲,也不建议性能测试脚本中写断言

疑问:脚本中有断言,但是性能测试时禁用可以吗?

  • 禁用:类似代码中的注释,不执行脚本,这个脚本就不会被执行,只是增加了脚本的长度
  • 这种情况下是允许的

断言的介绍

  • Jmeter断言主要有三秒钟
    • 响应断言
    • Json断言
  • 一个小的知识点(补充),查看结果树中

响应断言

  • 添加方式:取样器——添加——断言——响应断言
    在这里插入图片描述
  • Apply to 选择对主请求和子请求生效
    • Main sample and sub-sample:断言对主请求和子请求生效
    • Main sample only:断言只对主请求生效
    • sub-sample only:断言只对子请求生效
    • jmeter Variable Name to use:断言只对jmeter内部的变量生效
  • 测试字段:窗口包括请求数据和响应数据,在这里可以根据选择,断言部分请求数据和响应数据,以及全部数据
    • 响应文本:断言响应体的内容(推荐)
    • 响应代码:断言响应状态吗(200)
    • 响应头:断言响应头
    • 请求头:断言请求头
    • URL样本:断言请求的URL
    • 文档文本):断言所有响应数据(状态行,响应头,响应体)
    • 忽略状态:不断言响应状态吗
    • 请求数据:断言所有请求数据
      • 包括:如果响应数据包括【测试模式】中指定正则表达式匹配的数据,那么断言通过
      • 匹配:如果整个文本完全匹配【测试模式】中指定正则表达式匹配的数据,那么断言通过
      • 相等:如果整个文本完全匹配【测试模式】中指输入的数据,那么断言通过(非正则表达式)
      • 字符串:如果整个文本匹配【测试模式】中指输入的数据,那么断言通过(非正则表达式)
      • 否:取反
      • 或:如果响应数据满足【测试模式】中任何一个指定的规则,则断言通过
    • 如果断言通过,查看结果树前面都是绿色的对号;如果断言失败,查看结果树中会显示红色的叉号,并且断言未通过的接口下会有一个字节点“响应断言”

加粗样式

JSON断言

  • 添加方法:取样器——添加——断言——json断言
  • 作用:和响应断言相比,json断言只能对json结构的数据进行断言
  • 当响应体是json结构的数据时,我们使用json断言比响应断言的性能更好
  • 断言规则:
    • 先判断断言的目标数据是不是json数据,如果不是,断言失败
    • 再判断断言的目标数据中,指定的json表达式是否有效,如果无效,断言失败
    • 最后判断断言的目标数据中,json表达式指定的数据与预期数据是否一致,如果不一致,断言失败
      在这里插入图片描述
  • 样例如下:
    在这里插入图片描述

Xpath断言

  • 主要针对XML数据或者HTML数据进行断言
  • 添加方法:取样器——添加——断言——Xpath断言在这里插入图片描述
  • 断言表达式中,等号左侧表示实际数据,右侧表示预期数据,详见下图
    在这里插入图片描述

jmeter生成测试报告

export ANT_GOME= ANT的解码路径
export PATH= $PATH:$ANT_HOME/bin
  • 验证ant安装成功的办法,在cmd或者终端总,输入ant -v,如果显示版本号就说明安装成功了
  • 安装成功后,还要进行:
    • 在jmeter的extras中,存在ant-jmeter-版本.jarjar包,将这个包放在antlib文件中
      • ant要运行的jmeter的脚本名称
      • ant运行jmeter脚本时,要依赖jar
      • ant生成html报告的内容
  • 使用jmeter生成HTML报告,需要以下步骤
    • 第一步:保存jmeter脚本(方式:文件——保存测试计划为),这个保存的就是最终要运行的脚本文
    • 第二步:保存jmeter脚本运行时,生成的文件数据(查看结果树中,直接在文件名中写入路径信息,就会将数据文件保存到相应的路径下)
      • 这一步保存的文件必须是xml文档,设置方式为点击查看结果树文件名后的【配置】, 然后在Sample Result Save Configuration弹框中,勾选Save As XML选项,路径和需要勾选的选项如下
        在这里插入图片描述
        在这里插入图片描述
  • 保存测试计划和数据文件时,最好与bulid.xml、jmeter-resultsdetail-report_21xsl放在一个路径下
  • 运行时,在cmd或者终端中,输入ant -f build.xml后,会生成html的测试报告
  • build.xml中,决定测试计划和数据文件名称的地方如下图示例,名称必须和配置文件保存一致
    在这里插入图片描述

Jmeter定时器——性能测试中不建议使用

性能测试中的定时器

  • jmeter中,如果在线程组中添加了定时器,会对所有的取样器都有效,添加之后,所有的取样器(例如HTTP请求,调试取样器等)都会等待定时器设置的时间之后再使用下一个下取样器
  • 定时器会延缓发送请求的频率,从而导致对服务器的请求阿里变小,这样就反应不了服务器额真是压力
  • 例如:原本1min可以调用1000次接口,加了定时器之后可能只能调用100个,因此对服务器造成的压力就不足了
  • 因此,性能测试过程中,不建议使用定时

性能测试过程中的集合点(同步定时器)

定时器的介绍

思考时间

同步定时器(集合点)

  • 在接口测试中,同步定时器主要用来进行幂等测试
  • 在接口的性能测试中,同步计时器主要作用是用来进行并发测试
  • 幂等测试:判断请求完全一模一样的服务器是否能够正常处理
    • 例如:同时发送一模一样的注册接口请求,验证服务器只能注册一个用户
  • 并发测试:同时发送多个请求,验证服务器的并发处理能力
  • 幂等测试是并发测试的一种,但是幂等测试更关注“完全相同”,而并发测试关注发送多个接口请求
  • 添加方法:线程组——定时器——同步定时器
    • 模拟用户组的数量和测试计划中的线程组数量必须一致
      在这里插入图片描述
      在这里插入图片描述

jmeter逻辑控制

性能测试中的逻辑控制

  • 首先,条件控制器,只有结果为真的情况下才会运行其子节点中的取样器
    • 如果在性能测试中,使用条件控制器,只会让我们的请求变得很混乱,杂乱无章
    • 使用条件控制的脚本并不是性能测试中的混合场景
  • 什么是混合场景:不同数量的人同时对不同的接口发起请求(当前了解)
    • 实现方式:多个线程组,每个线程组下有不同的接口,每个线程组有不同的线程数

逻辑控制器的介绍

  • 作用:控制父子节点和控制执行流程
    • 例如:在线程组下添加简单控制器,然后就可以再次添加HTTP请求、断言等,这样就实现作用域的控制
  • jmeter的逻辑控制器,主要包括循环控制器,if控制器和For each控制器3中
  • 三种控制器,分别用来进行循环控制,条件控制和跌倒控制
    • 循环控制器:相当于python中的for循环
    • if控制器:相当于python中的if条件循环
    • For each控制器,也是for循环,增加了适配jmeter变量的功能

循环控制器

  • 添加方式:线程组——逻辑控制器——循环控制器
  • 作用:使用同一个请求体,重复发起相同的请求
    • 当请求体中存在函数或者变量的时候,请求体的数值也会发生变化
      在这里插入图片描述
  • 如上设置完成之后,HTTP请求必须是逻辑控制器的子节点时,才可以完成循环
    在这里插入图片描述

条件控制器——性能测试中几乎不用

  • 条件控制器的添加方法:线程组——添加——逻辑控制器——if控制器
  • 必须使用groovy或者jexi3的函数文本框中的结果必须是True或者False
  • 使用场景:就是Expression文本框中的条件表达式结果为真或者为假,结果为真的情况下,if控制器中中的子节点取样器会被执行;为假的情况下就不会去运行其子节点中的取样器
    在这里插入图片描述
  • 如何通过jmeter实现测试环境开发环境切换
    • 在线程组下新建if控制器,并填写条件表达式
      在这里插入图片描述
  • 使用这个控制元件判断的是调用那这个HTTP请求,HTTP请求中的域名端口号,变量调用的话,实际上用的是测试计划中的变量
  • __jex13函数表达式,在函数助手中选择jex13,然后输入条件自动生成

For each控制器

  • 作用:每次使用不同的值重复的发请求,接口是同一个地址,但是请求体可以变
  • For each控制器是jmeter为了适配后置处理器中的XX提取器而设置的一个元件
    • 例如:当我们使用正则表达式提取器,提取网站某个培训网站的全部课程时,会获取多个课程,这些课程在jmeter中会以变量名_1、变量名_2、变量名_3的方式体现
  • 添加方法:线程组——添加——逻辑控制器——for each控制器
    在这里插入图片描述
    在这里插入图片描述
  • 这个控制器的用法举个例子:在一个接口中可以返回某用户的多个订单id,但是没有订单详情
    • 根据这个场景我们就可以将接口中的订单id提取出来,然后调用查看订单详情按钮,循环多次,获取所有订单的详情(一个个订单查询

仅一次控制器——性能测试中常用

  • 不论运行多少时间,每个线程只会运行一次(注意,不是每个线程组,是每个线程!线程!线程!即用户数
  • 添加方式:线程组——添加——逻辑控制器——仅一次控制器
  • 只需要添加名称和注释信息即可
    在这里插入图片描述

事务控制器

  • jmeter中,默认一个取样器的1次完整的请求就是一个事务
  • 事务控制器的作用:将多个取样器的完整的请求,当做一个事务;一般用于测试工作流程或者业务场景的性能
  • 使用事务控制器的时候,性能测试中,要勾选第一个复选框合并样本(Generate parent sample)
  • 性能测试中,是先做单接口(用不到事务控制器);然后再使用事务控制器合并多个接口测试多接口/工作流程/业务的性能
    在这里插入图片描述
  • 单接口的性能测试,一般情况下是一个线程组下只启用一个接口
    • 但是需要关联的接口,例如下单,因为要先登录才能进行下一步,这样的话就会出现一个线程组下有至少两个启用的接口
  • 上面的场景中**,如果要对下单的接口进行性能测试,就需要将前面的接口(登录)放在一个仅一次控制器中**

聚合报告

  • 添加方式:线程组——添加——监听器——聚合报告
    在这里插入图片描述
  • 聚合报告中的样本值:是一段时间内发起的总请求量
  • 响应时间相关的数值,单位是毫秒
  • 90%,95%,99%指的是:将响应时间从低到高排序,总序列个数的90%、95%、99%次的响应时间是XX毫秒
    • 例如一共1000次请求,90%指的是第900次,95%指的是第950次
  • 接受和发送,指的是每秒发出/接收到多少请求
  • 列表中行:每一行指的是一种事务

原文地址:https://blog.csdn.net/weixin_43754879/article/details/134494513

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_7805.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注