整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

jmeter(十五)-正则表达式提取器

jmeter(十五)-正则表达式提取器

则表达式提取器(Regular Expression Extractor)

sampler请求的服务器响应结果中通过正则表达式提取值所需值,生成模板字符串,并将结果存储到给定的变量名中。

界面如下:

正则表达式提取器界面

  • Apply to:作用范围(返回内容的断言范围)

1)Main sample and sub-samples:作用于主节点的取样器及对应子节点的取样器

2)Main sample only:仅作用于主节点的取样器

3)Sub-samples only:仅作用于子节点的取样器

4)JMeter Variable:作用于jmeter变量(输入框内可输入jmeter的变量名称),从指定变量值中提取需要的值。

  • Field to check:要检查的响应报文的范围

1)主体:响应报文的主体,最常用

2)Body(unescaped):主体,是替换了所有的html转义符的响应主体内容,注意html转义符处理时不考虑上下文,因此可能有不正确的转换,不建议使用

3)Body as a Document:从不同类型的文件中提取文本,注意这个选项比较影响性能

4)Response Headers(信息头):响应信息头(

5)Request Headers:请求信息头

6)URL:请求url

7)Response Code(响应代码):响应状态码,比如200、404等

8)Response Message(响应信息):响应信息

  • 引用名称(Names of created variables):

Jmeter变量的名称,存储提取的结果;即下个请求需要引用方法是${变量名}。

  • 正则表达式(Regular Expression):

使用正则表达式解析响应结果,()括号表示提取字符串中的部分值,前后是提取的边界内容。

常用正则表达式:(.*?)表示匹配任意长度的任意字符,是最常用的正则表达式,基本能满足80%场景要求

  • 模板(Template):

正则表达式的提取模式。如果正则表达式有多个提取结果,则结果是数组形式,模板$,$等等,表示把解析到的第几个值赋给变量;从1开始匹配,以此类推。

若只有一个结果,则只能是$;有多个结果,可以使用$$方式取2个值。

  • 匹配数字(Match No.(0 for Random)):

正则表达式匹配数据的结果可以看作一个数组,表示如何取值:

1)0代表随机取值,默认

2)正数n表示取第n个值,(1:第一个值

3)负数表示提取所有符合条件的值,(-1:所有

  • 缺省值(Default Value):

匹配不到值的时,取该值;

  • 使用空默认值(Use empty default value):

勾选后,提取不到值时,则返回空字符串。

Field to check 详细样例

1)主体(body)

2)Response Headers(信息头)

3)Request Headers:请求信息头

4)URL

5)Response Code(响应代码)和Response Message(响应信息)

提取某个特定的值的例子

正则表达式提取器如下:

测试结果:

调试取样器

使用变量,也可以通过变量名_g直接进行提取,如下:

一条正则表达式匹配多个值

正则表达式提取器

测试结果:

1.1.1.4. 一条正则表达式有多个匹配值

正式表达式:

备注:多个模板( $$ )的时候,可以用空格、,.- 连接模板

测试结果:

备注:在调试过程中可结果察看结果树和Debug sample来帮助分析结果。

《大数据和人工智能交流》头条号向广大初学者新增C 、Java 、Python 、Scala、javascript 等目前流行的计算机、大数据编程语言,希望大家以后关注本头条号更多的内容。

数据溢出、转义符、char和数字运算等总结

1.有关数据溢出的问题

public class add

{

public static void main(String args[])

{

byte b1=(byte) 1;

byte b2=(byte) 127;

byte b3=(byte) (b1 + b2);

System.out.println("result="+ b3);

}

}

2.有关数字的补码问题


-128,byte只有八位,只能表示-128--127计算机中负数的存储方式是补码。对负数的绝对值的二进制值取反,再加一,即为负数的二进制码。

如:-1的绝对值1的二进制码为00000001,取反得到11111110,再加一为11111111。-128的绝对值128的二进制码为10000000,

取反得到01111111,再加一为10000000,正好是Byte的最大表示范围。第一位为符号位,0表示为正数,1为负数.例如00000001表示为1,

而10000001表示为-127(记录符号位为-,取后面七位取反加一,再加上符号位),128(100000000)符号位为1,是负数,取后面0000000

取反为1111111,加一即为128,加上负号,即为-128


3.有关数据过长的问题

public class DataDemo01{

public static void main(String args[]){

int num=9999999999999999999999999999999 ;

}

};

4.有关字符和数字运算问题

public class DataDemo04{

public static void main(String args[]){

char ch1='a' ; // 字符是使用"'"括起来的数据

char ch2=97 ; // 通过数字定义字符变量

System.out.println("ch1=" + ch1) ;

System.out.println("ch2=" + ch2) ;

}

}


5.有关转义符的问题

public class DataDemo05{

public static void main(String args[]){

char ch1='\"' ; // 表示的是一个"

char ch2='\' ; // 表示的是一个\

System.out.println("ch1=" + ch1) ;

System.out.println("ch2=" + ch2) ;

System.out.println("\"Hello World!\"") ;

}

};

6.程序的执行过程


(1) 找到main方法加载到内存区 (2)

硬盘(装有程序)---------------------------->内存代码包括操作系统代码和应用程序代码


(3)

---------------------------->执行过程中的内存管理:包括heap、stack、data segment、code segment


heap堆: new出来的东西放在堆里面

stack栈:局部变量

data segment:静态变量、字符串常量

code segment:存放代码


7.java语言整型常量的三种表现形式:

(1)十进制

(2)八进制:要求以0开头,例如 012

(3)十六进制:要求以0X开头,例如0x12

8.浮点型误差的问题

浮点型在计算机中是有误差的,比如0.1可能用0.9999999999999999来模拟,在第几位产生误差叫作

浮点数的精度float的精度应该在7位,小数点7位以后数就不精确了;double应该在小数点以后15位

浮点数在计算机中表述一定是离散的,而现实中的浮点数是连续的

所以

float f=1.23f;

if( f==1.23f)//错

{

}

8.变量举例

public class TestVar2 {

public static void main(String[] args) {

boolean b=true;

int x, y=9;

double d=3.1415;

char c1, c2;

c1='\u534e';

c2='c';

x=12;

System.out.println("b=" + b);

System.out.println ("x=" + x + ",y=" + y);

System.out.println("d=" + d);

System.out.println("c1=" + c1);

System.out.println("c2=" + c2);

}

}

9. 利用char和数字之间的混合运算编写个加密程序

提示 char ch='a' 加密后 char ch1=(char)('a'+6)


《大数据和人工智能交流》的宗旨

1、将大数据和人工智能的专业数学:概率数理统计、线性代数、决策论、优化论、博弈论等数学模型变得通俗易懂。

2、将大数据和人工智能的专业涉及到的数据结构和算法:分类、聚类 、回归算法、概率等算法变得通俗易懂。

3、最新的高科技动态:数据采集方面的智能传感器技术;医疗大数据智能决策分析;物联网智慧城市等等。

根据初学者需要会有C语言、Java语言、Python语言、Scala函数式等目前主流计算机语言。

根据读者的需要有和人工智能相关的计算机科学与技术、电子技术、芯片技术等基础学科通俗易懂的文章。

假如有这样一个需求:要求将给定的一个文件路径 D:\bianchengsanmei\blogs\categories\JavaScript 在页面展示出来。

最基本的实现方法可能是下面这个:

<body>
    <div id="container"></div>
</body>
const filePath="D:\bianchengsanmei\blogs\categories\JavaScript";
document.querySelector("#container").innerText=filePath;

如果真能这么简单就实现的话,那我这篇文章到这里就结束了,这是要写个寂寞吗?

结束是不可能结束的,不信,你看看输出结果:

显然,我们很多时候会忘记有转义符这回事。

因为在 HTML 网页里,像 >、<、 等字符是有特殊含义的,再加上有些字符在 ASCII 字符集中没有定义,因此需要使用转义字符串来表示。

要想正确显示,应该这么写:

const filePath="D:\\bianchengsanmei\\blogs\\categories\\JavaScript";
document.querySelector("#container").innerText=filePath;

转义符 + "\" 表示的是字符串 \。

我今天写这篇文章的意思呢,就是推荐给大家另外一种实现方法。

String.raw 简介

String.raw() 是一个模板字符串的标签函数,用来获取一个模板字符串的原始字符串的,比如说,占位符(例如 ${foo})会被处理为它所代表的其他字符串,而转义字符(例如 \n)不会。

语法

String.raw(callSite, ...substitutions)
String.raw`templateString`

参数

  • callSite 一个模板字符串的“调用点对象”。类似{ raw: ['foo', 'bar', 'baz'] }。
  • ...substitutions 任意个可选的参数,表示任意个内插表达式对应的值。
  • templateString 模板字符串,可包含占位符(${...})。

返回值

给定模板字符串的原始字符串。

使用示例

以下是一些关于 String.raw 的使用示例:

String.raw`Hi\n${2+3}!`;
// 'Hi\\n5!',Hi 后面的字符不是换行符,\ 和 n 是两个不同的字符

String.raw `Hi\u000A!`;
// "Hi\\u000A!",同上,这里得到的会是 \、u、0、0、0、A 6个字符,
// 任何类型的转义形式都会失效,保留原样输出,不信你试试.length

let name="Bob";
String.raw `Hi\n${name}!`;
// "Hi\\nBob!",内插表达式还可以正常运行


// 正常情况下,你也许不需要将 String.raw() 当作函数调用。
// 但是为了模拟 `t${0}e${1}s${2}t` 你可以这样做:
String.raw({ raw: 'test' }, 0, 1, 2); // 't0e1s2t'
// 注意这个测试, 传入一个 string, 和一个类似数组的对象
// 下面这个函数和 `foo${2 + 3}bar${'Java' + 'Script'}baz` 是相等的.
String.raw({
  raw: ['foo', 'bar', 'baz']
}, 2 + 3, 'Java' + 'Script'); // 'foo5barJavaScriptbaz'

实现需求

我们使用 String.raw 来实现以下文章开头的需求:

const filePath=String.raw`D:\bianchengsanmei\blogs\categories\JavaScript`;
document.querySelector("#container").innerText=filePath;

正确显示:

可以看到,使用 String.raw 可以原汁原味的输出期望结果,再也不会因为转义字符的原因导致各种预期之外的结果。

总结

我们可以使用 String.raw 来保证模板字符的输出结果是原始值。

~

~本文完,感谢阅读!

~

学习有趣的知识,结识有趣的朋友,塑造有趣的灵魂!

大家好,我是〖编程三昧〗的作者 隐逸王,我的公众号是『编程三昧』,欢迎关注,希望大家多多指教!

你来,怀揣期望,我有墨香相迎! 你归,无论得失,唯以余韵相赠!

知识与技能并重,内力和外功兼修,理论和实践两手都要抓、两手都要硬!