首页 » Web前端 » php提取span技巧_JMeter接洽关系之正则表达式提取器

php提取span技巧_JMeter接洽关系之正则表达式提取器

duote123 2024-12-07 0

扫一扫用手机浏览

文章目录 [+]

在客户端与做事器通信过程中,多个要求/相应间的数据会有相互依赖的关系。
比如上一个要求返回的某些相应数据在后续的要求中须要用到。

下面是一些范例的例子:

php提取span技巧_JMeter接洽关系之正则表达式提取器

1)比如第一次访问网站获取的session id在后续的要求都会将其传给网站;

php提取span技巧_JMeter接洽关系之正则表达式提取器
(图片来自网络侵删)

2)做事器天生token返回给用户,在后续的要求中要带上token;

3)根据条件查询某记录,在查询结果集中选择记录进行操作(比如删除)

...

但是有些通信协议是无状态的,不存在高下文干系性。
多个要求/相应之间的数据不能直接进行通报;并且每次做事器返回的数据不是一成不变的,通报的数据不能通过硬编码(写去世)保存来办理。

比如上面三种情形都会产生动态变革的数据:

1)session id的生命周期一样平常在关闭浏览器时就结束了,每次打开浏览器访问返回的session id并不相同;

2)token也有生命周期,一样平常也是随机,无状态的;

3)若查询条件参数化了或做事器返回的查询结果集改变了,后续的操作可能会失落败。
在这些情形下,可以考虑将做事器返回的动态变革的数据保存到某个参数中,须要时再从中取出。

关联事理

举个例子,看电影,看电影过程有如下步骤:

1.购票

2.验票

3.不雅观影

每个步骤可以看做一个要求/相应。
不雅观众相称于客户端,影院方相称于做事器。

过程如下图所示:

不雅观众购买的电影票可以算作做事器返回的相应数据,要验票通过才能入场不雅观影。

不雅观众购票相称于一个要求,验票是下一个要求,这须要将上一个要求返回的相应数据(电影票)放不才一个要求中发送给做事器处理。

假设这部电影非常精彩,想重新再看一次,由于电影票只能利用一次,不雅观众必须重新购票,才能验票通过入场;利用第一次购买的电影票入场肯定会被拒之门外。

为理解决这个问题,可以考虑做如下假设:

每次将购买的电影票放入随身携带的LV钱包,并且在放入之前将利用过的票丢弃,以防止入场时掏错票;入场的时候,从钱包中取出票来验票,这样就万无一失了。

将电影票放入钱包中,相称于将做事器返回的数据保存起来了,这里钱包便是保存关联数据的参数。

关联的定义

将做事器返回的数据包中知足条件的数据保存到一个参数中的过程。

若何将做事器返回的数据保存起啦,JMeter中可以利用后置处理器来处理关联数据,常见的方法有:

1.正则表达式提取器

2.JSON提取器

须要关联数据的特色

若何确定哪些数据是须要做关联的,可以从关联数据的特色来识别出这些数据。
关联数据有如下三个特色:

1.做事器返回

须要关联的数据一定是从做事器返回的。

客户端输入的数据不须要进行关联,比如输入的用户名与密码。
此特色是必选的。

2.数据会再次发送给做事器处理

保存上一个要求相应的数据,其目的是为了将其用于下一个要求中,否则保存起来没故意义。
此特色是可选特色,也便是说不再次发送也是可以保存数据进行关联的。

3.数据动态变革

上一个要求相应的数据若不会动态变革,完备可以写去世在脚本中,不须要花力气额外保存再次取出。
正是由于每次返回的数据动态变革,我们须要根据某种规则将这些动态变革的数据找出来保存,然后会取出实际返回的数据。
但此特色也是可选的。
不动态变革一样可以保存进行关联,但意义不大。

二、正则表达式先容

JMeter通过内嵌的Apache Jakarta ORO软件来解析处理正则表达式。

Jakarta-ORO是用于处理文本的一组Java类,是目前功能最全性能最好的正则表达式API之一,它供应兼容Perl5类型的正则表达式。

单行模式与多行模式

元字符

扩展正则表达式

四、 正则表达式提取器

配置项

Apply to:

与相应断言中用法同等,不再赘述。

Field to check:

○ Body

Response Body,比如HTTP相应报文的实体主体,不包含状态行与首部。

○ Body(unescaped)

Response Body(转换了转义字符),对HTTP相应报文的实体主体中的所有HTML转义字符进行了转义处理。
由于转义时没有参照高下文,在处理时可能会出错,并且开启此选项会严重影响性能,故不建议利用。

○Body as a Document

通过Apache Tika从各种类型的文档中提取文本。
此选项开启也会严重影响性能,谨慎利用。

○Response Headers

一样平常用于HTTP要求,HTTP相应报文中的首部。

○Request Headers

一样平常用于HTTP要求,HTTP要求报文中的首部。

○URL

一样平常用于HTTP要求。
HTTP要求报文中的要求URL地址(未开启重定向功能);若开启了重定向功能,则包含原始要求中的要求URL地址与重定向后的URL地址。

比如前面访问新浪的例子,开启了重定向后,则包括:http://www.sina.com/,http://www.sina.com.cn/和https://www.sina.com.cn/三个URL地址。

○Response code

一样平常用于HTTP协议,指的是HTTP相应报文中的状态码,比如200、301、404等。

○Response Message

一样平常用于HTTP协议,指的是HTTP相应报文中的缘故原由短语,比如OK、Moved Permanently、Not Found等。

Name of created variable:

用于存储结果的JMeter变量的名称。

Regular Expression:

用于解析相应数据的正则表达式。
利用正则表达式中的()来捕获相应字符串。

Template($i$ where i is capturing group number,starts at 1):

设置捕获到的字符串以若何的格式保存到存储结果的JMeter变量中。

在此项中,可以用$1$表示引用捕获组1中的内容,$2$表示引用捕获组2中的内容,... ,$n$表示引用捕获 组n中的内容, $0$表示引用正则表达式匹配后的全体字符串。

把稳除了利用$n$引用捕获组的内容外,还可以加入须要的字符,将匹配的内容按照某种格式保存。

Match No.(0 for Random):

匹配序号。
从匹配的结果中若何挑选匹配项。

若正则表达式每个捕获组有多个匹配项。

则1表示第一个匹配项,2表示第二个匹配项,... ,依次类推;0表示从多个匹配项中随机选择一个;-i(i=1,2,3,... ,N,-i即负整数)表示引用所有的匹配项。

Default Value:

如果正则表达式没有匹配到内容,则保存结果的JMeter变量将设置为默认值,这样会对调试JMeter测试带来便利。
如果没有供应默认值,则很难判断正则表达式是否匹配失落败,或者RE元素是否未处理或者是否利用了缺点的变量。

但是,如果您有多个设置相同变量的测试元素,那么如果表达式不匹配,您可能希望保持变量不变。
在这种情形下,请在调试完成后删除默认值。

Use empty default value:

如果选中该复选框则默认值为空,则JMeter会将保存结果的JMeter变量设置为空字符串。

四、运用案例

案例解释

业务操作步骤:

1.登录ECshop后台管理系统;

2.设置查询条件(比如按商品品牌)搜索商品;

3.在返回的查询结果集中选择第一个商品删除。

这里每一步骤对应一个HTTP要求,在第二个要求中每次返回的查询结果集不一样(由于每实行一次会删除一个商品),故向第三个要求通报的商品编号参数不能写去世,须要从第二个要求对应的相应数据中提取出来。

操作步骤

这里对第二个步骤一些细节进行解释:

在第二个要求返回的相应数据中不雅观察:

...23)\">8<\/span><\/td>\r\n \r\nhref=\"..\/goods.php?id=23\" target=\"_blank\" title=\"\u67e5\u770b\">src=\"images\/icon_view.gif\" width=\"16\" height=\"16\" border=\"0\"...

创造返回的goods_id的左边界为goods.php?id=,右边界为\",但考虑到.与?以及\为元字符,故须要转义,则正则表达式可以设置为:

goods\.php\?id=(\d+)\\"

在删除商品要求中将提取的商品编号更换写去世的数据:

标签:

相关文章

php继续封装技巧_PHP封装与持续实例

public:方法或者属性在任何浸染域下都可以访问到,而且是默认的,如果没有为一个属性或方法指定访问润色符,它将是public。p...

Web前端 2024-12-09 阅读0 评论0