项目测试需要对比处理后的数据是否正确,思考利用jmeter的JSR223组件来自动实现
思路:
1、首先通过JDBC请求查询到原始数据sourceData和目标数据targetData
2、利用JSR223组件,对sourceData进行相应的处理,并结合处理后的数据特征、sourceData、targetData进行判断,代码如下:
代码示例1:
import org.apache.jmeter.samplers.SampleResult
sourceData = '${sourceDataName_1}'.decode('utf-8')
targetData = '${targetDataName_1}'.decode('utf-8')
maskingData = '*' + sourceData[1:-1] + sourceData[-1]
#vars.put("maskingData",maskingData)
if maskingData == targetData:
SampleResult.setSuccessful(True)
else:
SampleResult.setSuccessful(False)
代码示例2:
import org.apache.jmeter.samplers.SampleResult
import re
sourceData = '${sourceDataName_1}'.decode('utf-8')
#vars.put("sourceData",sourceData)
targetData = '${targetDataName_1}'.decode('utf-8')
#vars.put("targetData",targetData)
nameRegex = ur'''[\u4e00-\u9fa5]{%s}''' % len(sourceData)
#vars.put("nameRegex",nameRegex)
res = re.match(nameRegex,sourceData)
#vars.put("res",res)
if (sourceData != targetData or len(targetData) != 0 or len(targetData.encode('utf-8')) == len(sourceData.encode('utf-8')) and res != None):
SampleResult.setSuccessful(True)
else:
SampleResult.setSuccessful(False)
SampleResult简单使用
用法:SampleResult帮助获取/设置运行后样本的值,例如:ResponseCode、ResponseMessage、StartTime、SampleLabel等。
注意:如果脚本中直接使用SampleResult类型,需要先导入 org.apache.jmeter.samplers.SampleResult类。
方法:主要包括get和put方法:
SampleResult.getSampleLabel();
SampleResult.getStartTime();
SampleResult.getResponseCode()
SampleResult.getResponseMessage()
SampleResult.getPreviousResult() ·返回值:SampleResult,即取样器结果.作用:获取前一个取样器的结果
SampleResult.setResponseData("{}".format(data)) -----设置返回数据,必须是“xxx”,所以可以用"{}".format(数据)进行传输
SampleResult.setResponseCode("200") -----设置http状态码,比较常用
SampleResult.setSuccessful(True/False) -----设置请求成功或者失败,比较常用
注意事项:
JSR223中只能用python2,且不能指定编码,脚本中涉及到处理中文会存在乱码,例如代码示例2中就遇到了中文乱码,可以通过u'XXX'或'XXX'.decode('utf-8'解决,另外re.match匹配结果始终为None,但是相同的代码在pycharm就不是None,所以考虑编码问题,在nameRegex赋值时指定编码,加“ur”