Jmeter脚本参数化和正则匹配

  我们在做接口测试过程中,往往会遇到以下几种情况

  • 每次发送请求,都需要更改参数值为未使用的参数值,比如手机号注册、动态时间等
  • 上一个接口的请求体参数用于下一个接口的请求体参数
  • 上一个接口的响应体参数用于下一个接口的请求体参数,比如:sessionId、token
  • 上一个接口的响应体参数用于下一个接口的url接口地址中
  • 上一个接口的响应头参数用于下一个接口的请求体参数,比如:token
  • ......

  针对以上种种情况,我们都可以通过参数化和正则提取的方式来解决

一、参数化

  举例演示,提供一个注册和登录的接口,请求体需要手机号和密码进行注册登录,并且注册过的账号再次注册会提示已注册,因为不管是未注册还是已注册的手机号去注册接口都会调用成功,所以我会在注册接口上添加一个断言

注册接口:

登录接口:

断言:

我们再次注册时,就会断言失败

1.用户定义的变量

  上面的示例看到,每次去调用接口都要手动修改手机号码,并且注册和登录接口都要同步修改,这样操作相当繁琐,针对这个问题我们使用用户定义的变量的工具进行优化

  在线程组上:右键—>添加—>配置元件—>用户定义的变量

  我们把注册和登录的手机号和密码都提取出来放到这里

  定义了之后,我们需要调用该参数,调用方式是在对应的取样器里,使用${key}的格式替换取样器请求体里的值,这样我们就可以每次只修改一次就可以在所有的接口上通用了

  虽然在此基础上已经得到了相应的优化,我们能不能做到每次运行的时候都不用去修改用户定义的变量里面的值呢?答案是可以的,这时候我们要使用到函数助手,构造相应的随机函数

  对于函数的各种用法,这里不做说明,可以通过函数助手的帮助去查看各个函数的使用方法

  我们通过函数助手来构造一个生成随机手机号的方法来替换用户定义的变量的值

2.CSV数据文件设置

  该方法也是参数化的一种场景,我们可以提前使用csv文件或者其它文本文件(txt、log、xml、json...)构造大量数据,然后再读取文件里面的内容引用到对应的接口当中去,这里要注意的是在国内csv我们使用excel编辑器保存后遇到中文会出现乱码的情况,因此需要进行转码后才能正常使用!

  在线程组上:右键—>添加—>配置元件—>CSV 数据文件设置

  我们先构造测试数据

  然后配置CSV数据文件设置:

  此时我们可以直接替换接口参数的值为该变量名称,但是不可以替换用户定义的变量的值,会引用不到

  执行结果如下:

  我们如果设置并发量为5,则会依次读取每一行数据

3.用户参数

  在用户定义的变量中使用随机生成手机号的方式执行,它的执行原理是在整个线程组执行会话之前创建一次后,执行过程中的所有线程都会去使用这个值,并不是每个线程组使用时都会随机生成不一样的值,所以在并发测试中,遇到这种情况就不行了,因此我们可以用户参数的工具来使得每个线程组调用的时候都能随机生成一个随机数

  在线程组上:右键—>添加—>前置处理器—>用户参数

  我们可以将上面用户定义的变量中由函数助手生成的函数拿到用即可

  我们将接口参数化替换

  设置并发为10,查看结果:

二、正则提取

  上面我们处理的是随机数,这里我们则要通过一些方法将下个接口要使用的参数用上个接口的请求体、响应头或者响应体中提取出来,以此来处理接口依赖的问题,因为暂时没有好的实例,这里只讲使用方法

1.JSON提取器

  在指定的接口取样器上:右键—添加—后置处理器—JSON提取器

  

  我们在查看结果树里面将JSON Path Tester调出来,可以进行编写表达式进行测试验证表达式是否正确,注意该提取器只适用于接口的json响应体

  JSON提取器的表达式语法格式为:$.key的格式

  如果响应体遇到嵌套列表的形式,如:

{"domain":
    [
     {"id": "sdfhhsdfafvgg"},
     {"name": "Tom"}
    ]
}

  如果要提取name的值,表达式为:$.domain[1].name

{
    "tenant": "admin",
    "domain": [
         {"id": "sdfhhsdfafvgg", "name": "Tom"},
         {"id": "234gdgdh45h", "name": "Jerry"}
         ]
    }    

如果要提取所有name的值,表达式为:$..name  返回结果为一个列表

我们将正确的表达式填入到JSON提取器的配置当中,后面的接口就可以通过${变量名称}的方式调用该参数

2.正则表达式提取器

  在指定的接口取样器上:右键—添加—后置处理器—正则表达式提取器

  正则表达式的格式:左边界(.*?)右边界  以code为例:

  我们执行一次查看提取结果:

  更多关于正则表达式的语句请跳转到此博客地址:https://www.cnblogs.com/xiaogongjin/p/11986493.html

原文地址:https://www.cnblogs.com/xiaogongjin/p/11986688.html

时间: 2024-11-09 15:24:08

Jmeter脚本参数化和正则匹配的相关文章

JMeter脚本参数化 的方法用

一.什么叫参数化,参数化用来做什么? 参数化是干嘛的呢,咱们在调用接口的时候,有入参,那参数里面的值如果经常变化的话,就得每次去改了,很麻烦,这时候咱们就把需要经常变的值,改成可以变化的或者是咱们提前设置好的一些值,这样的话,调用的时候就不用每次都改它的值了. 用Jmeter测试时包含两种情况的参数 二.Jmeter参数化的方式有三种 ?1.用户定义的变量 ?这种就是为了方便管理参数,只能有一个值,比如说ip地址不经常变化的 ?2.函数生成器 ?函数生成器可以参照一定的规则生成数据,这样的比如说

利用HTTP代理录制Jmeter脚本

1 测试计划中添加一个线程组1 2在"工作台"-非测试元件-添加"HTTP代理服务器" 端口: 代理服务器的端口,默认8080,可自行修改,但不要与其它应用端口冲突 目标控制器:录制的脚本存放的位置,可选择项为测试计划中的线程组 分组: 对请求进行分组."分组"的概念是将一批请求汇总分组,可以把url请求理解为组. "不对样本分组":所有请求全部罗列 "在组间添加分隔":加入一个虚拟的以分割线命名的动作,运

PHP正则匹配与文件编码关系

虽然多数高手认为正则会影响程序效率,但是做数据采集的时候,却很难避免使用正则, 强大的正则表达式用起来很舒服,但是在匹配中文的时候,会出现,明明正则表达式没问题,字符数据里包含符合正则表达式的数据,可就是抓不到,这时候,就该停下来,看一下,你所匹配的数据编码,与你的PHP脚本文件编码格式是否一致. 这是因为我们的中文与编码上有多种方法,比如:gbk,utf-8,当你的PHP脚本文件是GBK,而读取的需要匹配的数据编码却是UTF-8的时候,它们就不会返回你想要的结果(不区配). PHP正则匹配与文

JMeter(四)--参数化

JMeter也有像LR中的参数化,本篇就来介绍下JMeter的参数化如何去实现. 参数化:录制脚本中有登录操作,需要输入用户名和密码,假如系统不允许相同的用户名和密码同时登录,或者想更好的模拟多个用户来登录系统. 这个时候就需要对用户名和密码进行参数化,使每个虚拟用户都使用不同的用户名和密码进行访问. 一.准备脚本,测试数据 1.录制一个脚本(可以用badboy工具录制),在jmeter中打开,找到有用户名和密码的页面.如下: 2.我们需要“参数化”的数据,用记事本写了五个用户名和密码,保存为.

性能测试基础之脚本参数化

(一) 在用性能测试工具准备测试脚本的过程中往往是脚本录制易,脚本调试不易.录制完脚本之后,我们的脚本通常并不能够马上运行出正确的结果来,譬如没有进行正确的关联.譬如某些图片或资源请求报错(一般对业务流程没有影响的.需要过滤掉的).譬如某些页面加载需要较长时间(响应超时).又譬如某些值是需要变化的等等. "某些值是需要变化的"是个什么鬼?好吧,这个鬼就是这篇小文主要想抛砖引玉一下的东东.举一个例子,某组织机构下各组织单位使用的人力资源管理系统,其中有个请假申请单的业务模块,脚本录制过程

正则匹配与替换 regexp & regsub

正则匹配是使用正则表达式匹配字符串的一种方法:在脚本编写过程中,经常需要处理一些文本,而这些文本中可能只有部分信息是有用的,我们需要从文本中提取出这些有用信息:这时候,就需要编写特定的正则表达式,将文本中符合正则表达式的字符串抓取出来,然后对其进行分解.组合.替换等处理,得到符合需求的处理结果. 正则表达式十分灵活,这也使其具有强大的匹配能力,熟练的编写正则表达式,几乎可以匹配任何形式的字符串.因此,在脚本设计中,熟练地使用正则表达式,是一种十分重要的技能,可以有效的提高脚本的运行效率. 使用正

Beanshell vs JSR223 vs Java JMeter脚本:性能关闭你一直在等待!

有几个选项可用于执行自定义JMeter脚本并扩展基线JMeter功能.查看最流行的扩展机制,比较性能并分析哪一个是最好的. 这是乐队之战,JMeter风格. Beanshell V. JSR223 V. Java Request Sampler 在我们之前的帖子中,   JMeter Performance和Tuning Tips  ( 由fantastik Philipe Mouwad编写) 我们建议使用JSR 223 + Groovy进行脚本编写.这是最好的选择,因为Groovy脚本可以编译

JMeter学习-参数化

JMeter也有像LR中的参数化,本篇就来介绍下JMeter的参数化如何去实现. 参数化:录制脚本中有登录操作,需要输入用户名和密码,假如系统不允许相同的用户名和密码同时登录,或者想更好的模拟多个用户来登录系统. 这个时候就需要对用户名和密码进行参数化,使每个虚拟用户都使用不同的用户名和密码进行访问. 一.准备脚本,测试数据 1.录制一个脚本(可以用badboy工具录制),在jmeter中打开,找到有用户名和密码的页面.如下: 2.我们需要“参数化”的数据,用记事本写了五个用户名和密码,保存为.

web爬虫,scrapy模块标签选择器下载图片,以及正则匹配标签

标签选择器对象 HtmlXPathSelector()创建标签选择器对象,参数接收response回调的html对象需要导入模块:from scrapy.selector import HtmlXPathSelector select()标签选择器方法,是HtmlXPathSelector里的一个方法,参数接收选择器规则,返回列表元素是一个标签对象 extract()获取到选择器过滤后的内容,返回列表元素是内容 选择器规则 //x 表示向下查找n层指定标签,如://div 表示查找所有div标签