Jmeter之Python支持

一、使用教程

1、环境准备,下载Jython jar包:
https://www.jython.org/download
https://central.sonatype.com/artifact/org.python/jython-standalone/2.7.2/versions
备注:最新jar如果和使用Jmeter版本不兼容,请更换jar包版本

在这里插入图片描述

2、把下载的Jython 的jar包放到 jmeter的lib\ext文件夹。重启jmeter。

3、线程组中添加 JSR223 Sampler。

在这里插入图片描述

4、设置JSR223 Sampler,选择python语言或者jython。

在这里插入图片描述

在这里插入图片描述

5、在脚本当中编写python代码,并转为Jmeter内置变量供Jmeter使用,如:随机获取0到100之间的整数data,并转为Jmeter内置变量orderNo,Jmeter可以直接使用此变量,不用使用后置处理器提取。

在这里插入图片描述

二、常用函数及注意事项

(1)vars.get() 变量输入

python脚本中,param =vars.get('orderNo') #表示通过vars.get()方法获取jmeter内置变量orderNo的值然后赋给python变量param

注意事项:

  1. JSR223python脚本中jmeter内置变量需要使用引号才能识别,单引号或者双引号都可以,python变量不需要。
  2. 使用vars.get(),将Jmeter内置空间变量赋值给python变量,变量类型是字符串,如要进行其它类型的计算,需要先进行类型转换
  3. 在python脚本中,如果vars.get()中的变量为字符串和python变量(字符串类型)拼接成的jmeter变量,则需要使用连接符+,不同于Jmeter脚本中字符串和变量直接拼接,不用使用拼接符号,也即Python中字符串拼接要使用拼接符号+,如:

avars.get()中的jmeter变量为字符串和python变量拼接而成,使用+

for i in range(0,n):
    t = vars.get('SUF'+str(i+1))  #如果python变量不是字符串类型,需要先进行类型转换

bvars.get()中的jmeter变量为字符串和另一个jmeter变量的值拼而成,不使用+(Jmeter变量/字符串拼接不需要拼接符号),因为另一个jmeter变量是取其值,然后去拼接字符串组成另一个vars.get()的Jmeter变量,因此另一个变量要使用变量符号${},vars.get()获取的jmeter变量不用变量符号。

a = vars.get("planNum_${counter}") #planNum为字符串,_为字符串,counter为jmeter变量,此处要获取其值,同planNum_组成另一个jmeter变量
a = int(float(a))
b = vars.get("t2")
b = int(b)
c = a*b
c = str(c)
vars.put("POZKorderQty1",c)

(2)vars.put() 变量输出

vars.put("taskId",newtaskId) #将python变量newtaskId值赋给jmeter内置变量taskId,只有将变量转为jmeter内置变量,才能在jmeter中使用。

注意事项:

  1. 使用vars.put()将python变量转为Jmeter内置空间变量,如果python变量为非字符串类型,需要先将变量转换为字符串类型
  2. JSR223 python脚本中jmeter内置变量需要使用引号,单引号或者双引号都可以。
  3. 转为Jmeter内置变量后,可以在Jmeter中直接使用这个变量,无需再通过后置表达式中的提取器提取数据。

(3)SampleResult.setResponseXXX 自定义响应内容

SampleResult.setResponseData("{}".format(data)) -----自定义返回内容,可以作为响应断言;如果返回值是变量,可以用"{}".format()进行传输,

注意事项:

1、变量data必须为字符串类型,且变量为python变量;如果返回值为字符串,则直接添加字符串如SampleResult.setResponseData("success")

(4)SampleResult.setResponseXXX 自定义响应状态码

SampleResult.setResponseCode("200") -----设置http响应状态码,如200、500

(5)编码方式、乱码

import sys
sys.setdefaultencoding('utf8') #保证结果树的响应数据中的中文不为乱码,否则会提示错误信息:jmeter python Cannot create PyString with non-byte value

特别注意:在python代码中如果添加编码注释#coding=utf-8(试了一下,大部分不添加编码方式注释能够正常运行),将python代码放到Jmeter JSR223中时候,应该改为:#coding='utf-8',添加引号,否则会报错:org.python.antlr.ParseException: encoding declaration in Unicode string

三、python脚本相对路径的定义与使用:相对路径的当前目录为jemter执行文件的目录,即bin目录
路径用法:

import os

print os.getcwd()  #获取当前目录,在jmeter中即为类似:D:\apache-jmeter-4.0\bin
print os.path.abspath(os.path.dirname(os.getcwd())) #获取上级目录
print os.path.abspath(os.path.join(os.getcwd(), ".."))  #获取上级目录
print os.path.abspath(os.path.join(os.getcwd(), "../..")) #获取上上级目录
path = os.path.join(base_dir, '123.txt') #拼接文件路径
lastpath = os.path.join(firstpath, r'data/orderNo.txt') #拼接文件路径

四、Jmeter python脚本调试

在Jmeter中执行python脚本,使用print()打印调试,打印的内容在Jmeter Console中是看不到,但是在cmd命令行窗口可以看到。

在这里插入图片描述

五、JSR223的元件汇总

  1. JSR223 PreProcessor
  2. JSR223 Timer
  3. JSR223 Sampler
  4. JSR223 PostProcessor
  5. JSR223 Assertion
  6. JSR223 Listener
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值