当前位置:萝卜系统 > 硬件软件教程 > 详细页面

性能测试工具: jmeter正则表达式,您也许只知道一个

性能测试工具: jmeter正则表达式,您也许只知道一个

更新时间:2023-06-21 文章作者:未知 信息来源:网络 阅读次数:

根据运行的环境,操作系统可以分为桌面操作系统,手机操作系统,服务器操作系统,嵌入式操作系统等。

常用正则表达式大全_jmeter中正则表达式大全_php 正则表达式大全

1. 背景

为了让大家更多地了解Jmeter并轻松使用它,稍后将添加性能章节.

1,调试采样器和虚拟采样器

首先介绍用于Jmeter调试Debug Sampler和Dummy Sampler的强大工具

Debug Sampler将在响应数据中输出我们自定义的变量,这便于我们在调试时使用. 正式执行脚本后,需要删除Debug Sampler.

Dummy Sampler可以更方便地模拟测试场景并自定义请求数据和响应数据,这在学习测试脚本编写的过程中非常有用. 当然,撰写文章时您无法公开公司的界面. 输入太多代码不舒服. 虚拟采样器现在也非常舒适.

2,查看结果树和日志查看器

使用侦听器->查看结果树以轻松查看接口的详细信息

打开选项->“日志查看器”以方便调试bean脚本

二,json数据提取

json数据:

{ "resultCode": "1000", "resultMsg": "success", "userdic": { "Ali": "Moubao" }, "userlist": [ { "firstName": "Jiezai", "lastName": "Grizz", "id": 6 }, { "firstName": "Ben", "lastName": "Rose", "id": 8 } ]}

将虚拟采样器的请求数据和响应数据配置为上述json字符串

让我们演示如何提取用户列表的第一个firstName的jiezai值,提取用户列表的第二个firstName的Ben值,以及提取userlist [“ Jiezai”,“ Ben”]的firstName的所有值

在演示之前,我们将讨论我们将使用的JSON Path Extractor(也是Jmeter扩展的第三方插件)的语法.

$代表整个对象. 代表绝对路径,..代表相对路径,[0]代表列表的第一个值,[0,1]和[: 2]都代表列表的前两个元素

$. userlist

$. userlist [*]

$. userlist [-1: ]

$ .. userlist [?(@. id> 7)]

$ .. firstName

五个表达式的输出如下:

jmeter中正则表达式大全_常用正则表达式大全_php 正则表达式大全

》》》 [{“” FirstName“: ” Jiezai“,” lastName“: ” Grizz“,” id“: 6},{” firstName“: ” Ben“,” lastName“: ” Rose“,” id“ : 8}]

》》》 [{“” FirstName“: ” Jiezai“,” lastName“: ” Grizz“,” id“: 6},{” firstName“: ” Ben“,” lastName“: ” Rose“,” id“ : 8}]

》》》 [{“ firstName”: “ Ben”,“ lastName”: “ Rose”,“ id”: 8}]

》》》 [{“ firstName”: “ Ben”jmeter中正则表达式大全,“ lastName”: “ Rose”,“ id”: 8}]

》》 [[Jiezai],“ Ben”]

PS:

1. 正则表达式提取器-“ value =”(. +?)“-”模板$ 1 $

(): 封装要返回的匹配字符串. . : 匹配任何单个字符串.

+: 一次或多次. ?: 找到第一个匹配项后停止.

2. JSON路径提取器的使用-“,请参阅:

阅读它之后,我知道它几乎是无所不能的,因为它具有自己的语法,例如Xpath.

1. 提取用户列表中第一个名字的值jiezai

每个人都应该非常擅长此事. 使用Jmeter提取json数据的任何人都知道

使用正则表达式提取器: “ firstName”: “(. +?)”

在Debug Sampler test3 = Jiezai中提取结果

使用JSON路径提取器

JsonPath表达式: $ .. userlist.firstName [0]

在Debug Sampler test3 = Jiezai中提取结果

2,提取用户列表Ben的第二个firstName的值

使用正则表达式提取器: “ firstName”: “(. +?)”

或使用正则表达式提取器: “ firstName”: “(. +?)” *“ firstName”: “(. +?)”

php 正则表达式大全_jmeter中正则表达式大全_常用正则表达式大全

说明,模板代表正则表达式的数字“(. +?)”.

JsonPath表达式: $ .. userlist.firstName [1],该图被省略.

在Debug Sampler test4 = Ben中提取结果

3. 提取userlist [“ Jiezai”,“ Ben”]的所有firstName值

似乎不可能只使用一次正则表达式,但是您可以使用JSON Path Extractor

JsonPath表达式: $ .. userlist.firstName

在Debug Sampler中提取结果test1 = [“ Jiezai”,“ Ben”]

4,比较正则表达式提取器和JSON路径提取器

正则表达式可以提取非json数据,JSON路径提取器只能提取json数据(),但是我们通常以json格式返回HTTP请求,因为它简单直观.

当json数据的返回值为{“ firstName”: “ Jiezai”}时,正则表达式为“ firstName”: “(. +?)”,如果: (当以下位置时: 冒号),实际上是json数据,然后还需要添加正则表达式,但是不管冒号左右两侧是否有空格,JSON Path Extractor表达式都是$ .. firstName

1. 使用BeanShell和JavaScript

由于公司从事保险业务,因此保险期和犹豫期将使用时间偏移.

例如jmeter中正则表达式大全,如果我购买保险,保险期为一年,保险开始日期为当前日期2018-4-11,结束日期为一年之后的当前日期2019-4-11

. 开始日期,我们可以使用BeanShell表达式

$ {__ BeanShell($ {__ time(yyyy)})}-$ {__ BeanShell($ {__ time(MM)},)}-$ {__ BeanShell($ {__ time(dd,)}))->输出当前日期为2018-4-11或JavaScript表达式

$ {__ javaScript((new Date(). getFullYear())+'-'+(new Date(). getMonth())+'-'+(new Date(). getDate()))) ->输出当前日期2018-4-11. 如果再加一年零两个月零三天怎么办?

BeanShell表达式

$ {__ BeanShell($ {__ time(yyyy)} + 1,)}-$ {__ BeanShell($ {__ time(MM,)} + 2,)}-$ {__ BeanShell($ {__ time(dd,)} +3,)}

JavaScript表达式

$ {__ javaScript((new Date(). getFullYear()+ 1)+'-'+(new Date(). getMonth()+ 2)+'-'+(new Date(). getDate() +3),)}

输出全部为2018-5-14

似乎没有问题,但除此之外,因为今天是2018年12月30日

常用正则表达式大全_php 正则表达式大全_jmeter中正则表达式大全

,上面表达式的结果是2019-14-33,哈哈哈,这个表达式不知道一年中有多少个月,一个月中有多少天,它只会累加起来. 但是,如果仅是年份偏移量,则仍可以使用上面的表达式. 如果有月或日的偏移量,我们可以使用BeanShell Sampler,它实际上是用来执行Java代码的.

2,使用BeanShell脚本

如果要执行BeanShell脚本,则可以使用BeanShell PreProcessor,BeanShell Sampler或BeanShell PostProcessor

执行顺序: BeanShell PreProcessor> BeanShell Sampler> BeanShell PostProcessor

BeanShell PreProcessor是一个预处理器,在调用接口之前执行. 我在这里用这个

BeanShell Sampler是一个接口请求,它将反映在结果树中并写入接口执行报告中,但不建议像执行Java代码一样使用它来计算时间偏移.

BeanShell PostProcessor是一个后处理器,在调用接口之后执行.

例如:

只要BeanShell PreProcessor和BeanShell PostProcessor在BeanShell Sampler的范围之内,就必须首先运行BeanShell PreProcessor,然后运行BeanShell Sampler,然后运行BeanShell PostProcessor.

BeanShell PreProcessor的Java源代码:

import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;log.info(Label); //输出原件的名称try{ log.info("*****时间偏移*****"); //输出日志 Date date =new Date(); //获取当前时间 SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd"); String nowDate = sf.format(date); Calendar cal = Calendar.getInstance(); cal.setTime(sf.parse(nowDate));//初始化为当前时间 cal.add(Calendar.DAY_OF_YEAR,+1); //后一天 String orderDate = sf.format(cal.getTime()); cal.setTime(sf.parse(nowDate)); cal.add(Calendar.DAY_OF_YEAR,+365); //后365天,即一年 String mouthDate = sf.format(cal.getTime()); vars.put("dayDate",orderDate);//把beanshell的变量传给Jmeter vars.put("yearDate",mouthDate); log.info("输出计算后的两个时间"); log.info("dayDate="+orderDate); log.info("yearDate="+mouthDate);}catch(Exception e){}

时移的执行结果图:

我们打开Jmeter的选项“检查日志查看器,检查Jmeter运行日志并执行上面的beanshell源代码以获取

dayDate = 2018-04-12,yearDate = 2019-04-11.

在beanshell中,log.info()可用于打印调试bean脚本的日志

说到beanshell,我不得不说我们使用beanshell脚本来加密和解密密码,因为出于安全原因,登录或付款期间的密码将被加密和解密. 这里以加密为例:

首先,您需要开发同学的帮助,将添加的Java代码键入password.jar包(以您自己命名)中,然后将password.jar包添加到Jmeter的测试计划页面,以便您可以在beanshell Java类中执行Java时导入加密. 如图所示:

Jar包的密钥代码,调用FrameDemo.java的generateKey方法:

例如,我们要加密登录密码qq1111并参考Jmeter中的步骤

php 正则表达式大全_jmeter中正则表达式大全_常用正则表达式大全

1,Jmeter添加jar包

2,在Beanshell中导入FrameDemo.java

3. 调用FrameDemo.java的generateKey方法执行加密操作. GenerateKey具有3个输入参数. 前两个是加密密钥,第三个是要加密的密码. 我们的密钥是固定的,需要加密. 密码是qq1111,我们可以在beanshell中编写要加密的密码,也可以从Jmeter传递它. 然后,我们将选择从Jmeter中传递,这更加灵活.

4. Beanshell将加密的字符串发送到Jmeter,以供Jmeter引用.

BeanShell PreProcessor的Java源代码:

//在测试计划页面先添加加密jar包import com.forth.FrameDemo;//加密log.info("*****加密*****"); //输出日志String password = vars.get("login_pw");//输入登录密码-这样写会取Jmeter变量login_pw的值log.info("jmeter-loginpw="+password);String password = "qq1111"; //输入登录密码String tpk = "30818902818100ccd601e07aeffc7f5f6d20d…";String kek = "308189028181009fa6334baf70c336163222…";String loginpw = FrameDemo.generateKey(tpk,kek,password); //调用工具类中的方法进行加密vars.put("loginpw",loginpw); //把值保存到jmeter变量loginpw中log.info("loginpw="+loginpw);

PS:

Beanshell内置对象vars访问Jmeter变量

vars.get(“ login_pw”)//从Jmeter获取变量login_pw的值

vars.put(“ loginpw”,loginpw); //将bean中的loginpw值存储到Jmeter变量loginpw

当我们使用Jmeter进行接口测试时,每个接口都需要输入IP和端口. 如果将采样器中的IP和端口写为172.20.128.188和8077. 因此,一旦迁移了测试环境,就需要在批处理脚本中修改批处理接口的IP和端口. 修改数量=脚本数量X脚本接口数量. 那是一件非常令人恐惧的事情,没有技术含量. . 聪明,我们知道,我们必须先在Jmeter中定义IP和端口,这样修改量才会大大减少. 如图所示:

但是,通过这种方式,我们的IP和端口已更改. 我们仍然必须一个一个地打开和修改每个脚本. 修改数量=脚本数量,这仍然有些麻烦. 我们可以尝试在同一位置将Jmeter脚本中的IP和端口引用为相同的值. 实际上,它是为脚本定义一个全局变量. 然后了解jmeter属性变量,如图所示:

修改数量= 1,完美,

Jmeter的bin目录中的jmeter.properties文件可以定义jmeter属性变量

打开jmeter.properties文件并插入两行

IP=172.20.128.188PORT=8077

在Jmx脚本中引用为$ {__ P(IP,)},$ {__ P(PORT,)},修改jmeter.properties后,需要重新启动jmeter才能生效.

bin下的User.properties也可以定义jmeter属性值,那么问题是,user.properties和jmeter.properties同时定义了PORT的值,一个是8077,另一个是8078,最后是$ { __P(PORT,)}参考时值是多少?好奇的朋友可以尝试一下并发表评论,并通过其他方式讨论Jmeter的其他知识. Git尚未完成. 完成后,将代码和相关脚本放在一起.

我觉得我的排版和描述可以优化,尤其是代码和英文排版. 我希望能看到它的人能够提及它. 感谢您的阅读.

作者: 西边的人


本文来自本站,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-286368-1.html



温馨提示:喜欢本站的话,请收藏一下本站!

本类教程下载

系统下载排行

网站地图xml | 网站地图html