jmeter提取json数据进行接口参数关联

jmeter提取json数据进行接口参数关联,第1张

案例场景:在测试创建订单使用系统的企业支付时,需要获取到创建订单后的订单编号才能支付,在jmeter里面可以直接提取上一个接口json里面的值(sysno)作为下一个支付接口的入参。我现在有一个创建订单接口A,创建成功后会返回一个sysno值。企业支付请求接口B必须要获取到接口A返回订单编号才能支付。这里介绍一下jmeter使用后置处理器json extractor获取你想要得到的值,根据上一个接口具体返回的json格式去自定义json path expressionsjson路径表达式。

A接口创建订单接口文档基本信息

请求类型:POST

请求头部:application/json

请求参数:[{"soType":0,"distributorSysNo":100001,"receiverInfo":{"receiveAddress":"收货地址","receiveAreaSysNo":2620,"receiveContact":"联系人","receivePhone":"15878788784"},"products":[{"productSysNo":42753,"quantity":2,"memo":null,"expectDeliveryDate":null},{"productSysNo":41681,"quantity":1,"memo":null,"expectDeliveryDate":null},],"customerMemo":客户备注信息,"deliveyType":54}]

A接口的请求和返回的报文信息如下

B接口企业支付的接口文档基本信息

请求类型:POST

请求头部:application/json

请求参数:{"orderSysNos":["${ordersysno}"],"soSysNo":"${ordersysno}","payTypeId":"balancepay","orderType":0,"balancePwd":"123456"}

创建订单请求

JSON提取器

注意:添加后置提取器时一定要放在>

在 expect 中可以通过调用 Tcl 内置的 clock 模块来获取当前时间。具体可以使用以下命令来获取当前时间并输出到终端:

set now [clock format [clock seconds] -format "%Y-%m-%d %H:%M:%S"]

puts "当前时间为: $now"

上述代码中,首先使用 clock seconds 命令获取当前时间戳,然后通过 clock format 命令将时间戳格式化为指定的日期时间字符串。其中,-format 参数用于指定日期时间字符串的格式,例如 %Y-%m-%d %H:%M:%S 表示年月日时分秒。最后使用 puts 命令将当前时间字符串输出到终端。

log 是shell中的用法,

scp或者其他命令本身并不直接将 替换成匹配的多个文件名。

建议你将 expect 脚本做成一次只上传一个文件,这个文件名由输入参数来决定

scp [lindex $argv 0] root@192xxxxxx:/home

expect "password:" {send "1111111\n"}

interact

然后再写一个bash脚本,脚本调用上面的expect脚本来上传所有的文件,如:

for f in `ls /log/log`

do

expect_script /log/$f

done

即可。

另,像这种备份文件,用 rsync 更方便,供参考。

expect:expect是Unix系统中用来进行自动化控制和测试的脚本工具,常用于实现交互式任务的自动化。使用命令”dnf install expect -y”进行安装。脚本文件声明为”#!/usr/bin/expect”。

expect常用命令如下:

1spawn+交互命令(如spawn ssh root@19216811):”spawn”是expect的初始命令,用于启动一个新的交互进程,之后所有的 *** 作都会在这个进程中进行。

2set:定义变量/为变量赋值。使用语法:set 变量名 值。

3puts:将变量值/字符串定向到本地标准输出文件(即定位到屏幕)。使用语法:puts “字符串/$变量名”

4send_user:作用和使用方法类似于”puts”,区别在于”puts”会在输出内容的结尾自动追加一个换行符,而”send_user”不会。

5send:向交互进程发送信息/命令(字符串和一些特殊符号,\r—回车,\n—换行,\t—制表符)。使用语法:send “信息/命令[\r]”。

6[lindex $argv 数字]:表示外部传递参数的值,数字是n,就表示第n-1个参数。注:$argc表示外部传递参数的个数,也是一个值。

7expect+字符串+{ 命令 }:将字符串与交换进程接收到的信息进行匹配。如果匹配成功(字符串是交换进程接收到的信息的一部分),执行包含在”{}”中的命令;如果匹配失败,不执行包含在”{}”中的命令。该命令有三种使用方法:

第一种:单分支模式

①expect 字符串 { 命令 }

解释:如果字符串与交换进程接收到的信息匹配成功,执行包含在”{}”中的命令,并结束该expect命令;如果字符串与交换进程接收到的信息匹配失败,timeout秒后结束该expect命令。(注:脚本执行到expect命令时,计时器就开始计时,并会在计时器超时前不断对交换进程接收到的信息进行扫描,尝试字符串与信息的匹配。)

②expect {

字符串{ 命令 }

timeout { 命令 }

}

解释:如果字符串与交换进程接收到的信息匹配成功,执行包含在”{}”中的命令,并结束该expect命令;如果字符串与交换进程接收到的信息匹配失败,timeout秒后执行包含在”{}”中的命令,之后结束该expect命令。(注:脚本执行到expect命令时,计时器就开始计时,并会在计时器超时前不断对交换进程接收到的信息进行扫描,尝试字符串与信息的匹配。)

第二种:多分支模式

①expect {

字符串1 { 命令 }

字符串2 { 命令 }

}

解释:如果字符串1与交换进程接收到的信息匹配成功,执行执行包含在”{}”中的命令,并结束该expect命令;如果字符串1与交换进程接收到的信息匹配失败、字符串2与交换进程接收到的信息匹配成功,执行包含在”{}”中的命令,并结束该expect命令;如果字符串1、字符串2皆与交换进程接收到的信息匹配失败,timeout秒后结束该expect命令。(注:脚本执行到expect命令时,计时器就开始计时,并会在计时器超时前不断对交换进程接收到的信息进行扫描,尝试字符串与信息的匹配。)

②expect {

字符串1 { 命令 }

字符串2 { 命令 }

timeout { 命令 }

}

解释:如果字符串1与交换进程接收到的信息匹配成功,执行执行包含在”{}”中的命令,并结束该expect命令;如果字符串1与交换进程接收到的信息匹配失败、字符串2与交换进程接收到的信息匹配成功,执行执行包含在”{}”中的命令,并结束该expect命令;如果字符串1、字符串2皆与交换进程接收到的信息匹配失败,timeout秒后执行包含在”{}”中的命令,之后结束该expect命令。(注:脚本执行到expect命令时,计时器就开始计时,并会在计时器超时前不断对交换进程接收到的信息进行扫描,尝试字符串与信息的匹配。)

第三种:循环多分支模式(注:exp_continue命令只能出现在expect命令的匹配语句中,执行到exp_continue命令时,脚本会跳出当前expect命令,并重新执行该expect命令,直到expect命令通过不包含exp_continue命令的匹配语句结束、或expect命令匹配超时结束。)

①expect {

字符串1 { 命令; exp_continue }

字符串2 { 命令 }

}

解释:如果字符串1与交换进程接收到的信息匹配成功,执行执行包含在”{}”中的命令,并重新执行该expect命令;如果字符串1与交换进程接收到的信息匹配成功,执行执行包含在”{}”中的命令,并重新执行该expect命令;如果字符串1与交换进程接收到的信息匹配失败、字符串2与交换进程接收到的信息匹配成功,执行包含在”{}”中的命令,并结束该expect命令;如果字符串1、字符串2皆与交换进程接收到的信息匹配失败,timeout秒后结束该expect命令。(注:脚本执行到expect命令时,计时器就开始计时,并会在计时器超时前不断对交换进程接收到的信息进行扫描,尝试字符串与信息的匹配。)

②expect {

字符串1 { 命令; exp_continue }

字符串2 { 命令 }

timeout { 命令 }

}

解释:如果字符串1与交换进程接收到的信息匹配成功,执行执行包含在”{}”中的命令,并重新执行该expect命令;如果字符串1与交换进程接收到的信息匹配成功,执行执行包含在”{}”中的命令,并重新执行该expect命令;如果字符串1与交换进程接收到的信息匹配失败、字符串2与交换进程接收到的信息匹配成功,执行包含在”{}”中的命令,并结束该expect命令;如果字符串1、字符串2皆与交换进程接收到的信息匹配失败,timeout秒后执行包含在”{}”中的命令,之后结束该expect命令。(注:脚本执行到expect命令时,计时器就开始计时,并会在计时器超时前不断对交换进程接收到的信息进行扫描,尝试字符串与信息的匹配。)

8timeout:timeout是expect中的一个关键字变量,用于控制expect命令的超时时间。需要注意的是,这个超时时间针对于整个expect命令,而不是针对于expect命令中的某条匹配语句。也就是说,只有expect命令中所有匹配语句都匹配失败后,才会开始计算超时时间。timeout变量值缺省为10(秒),我们可以通过”set timeout=值”的方式为其重新赋值,作用范围:本次赋值到下一次赋值间的所有expect命令。注:如果需要为timeout变量重新赋值,应在expect命令之外进行。

9expect eof:该命令的作用是结束spawn交互进程,将命令行切回至运行脚本的主机(即从远端服务器登出)。

10interact:缺省情况下,expect脚本执行完毕后会自动从远端服务器登出(即便没有显式地执行”expect eof”命令)。使用interact命令后,expect脚本执行完毕会继续保持当前状态,并将控制权移交给用户。

11exit:结束该脚本。

expect中的if语句:

if { 条件表达式 } {

命令

}

if { 条件表达式 } {

命令

} else {

命令

}

expect中的while语句:

while { 条件表达式 } {

命令

}

expect中的for语句:

for { set i 1 } { $i <=10 } { incr i } {

命令

}

incr变量名 步长   ——变量自增

incr 变量名 -步长    ——变量自减

数学运算需使用let、expr等工具

以上就是关于jmeter提取json数据进行接口参数关联全部的内容,包括:jmeter提取json数据进行接口参数关联、shellexpect脚本能引入参数不、Linux系统里的expect里面怎么打印当前时间等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9560373.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存