jmeter脚本添加断言、预处理(脚本处理数据参数化)

前言:
1.通过脚本添加断言(命令生成html报告,会记录日志),与提取的响应数据进行对比
    正则表达提取数据
    JSR223断言:python脚本断言(需下载jython 2.7,将插件放在lib文件夹下)
    JSR223断言:groovy脚本断言
2.预处理程序(通过脚本处理数据,这里说明的是处理数据,使其可以参数化并循环调用)
    计数器
    JSR223预处理程序:python脚本处理(需下载jython 2.7,将插件放在lib文件夹下)
    JSR223预处理程序:groovy脚本处理
    BeanShell预处理程序:BeanShell处理

备注:脚本选项“脚本编译缓存”去掉勾选,使参数可循环调用

开始设置:

1.整体样式:

 

2.正则提取数据

 

3.JSR223断言:groovy脚本断言

import groovy.json.*
import java.text.SimpleDateFormat;
String Str = "200";
String Str1= "410034"
def end_time = prev.getEndTime()
def start_time = prev.getStartTime()
//log.info("开始时间:" + (new Date(start_time).toString()))
//log.info("结束时间:" + (new Date(end_time).toString()))
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//时间格式
String startDate = sf.format(start_time);
String endDate = sf.format(end_time);
String ResponseCode=prev.getResponseCode()
//获取请求信息
String sampleresult ="开始时间: " + startDate + "\n" + "结束时间: " + endDate + "\n" + "请求时长: " + prev.getTime().toString()+"ms"  + "\n" + "连接时长: " + prev.getConnectTime().toString()+"ms"  + "\n" + "等待时长: " + prev.getLatency().toString()+"ms" + "\n" + "响应大小(byte): " + prev.getBytesAsLong().toString() + "\n" + "请求url: " + prev.getURL() + "\n" + "测试结果: " + prev.isSuccessful().toString()

//log.info("http请求名称: "+prev.getRequestHeaders())

def Headers =prev.getResponseHeaders()
def response = prev.getResponseDataAsString()
//log.info("响应内容是:\n"  +response)
def json = new JsonSlurper().parseText(response)

//assert 100 == json.code
if(response == "" ){ 	//如果返回的报文为空
	AssertionResult.setFailure(true);
	String FailureMessage  = "系统无响应,获取不到响应数据";
	AssertionResult.setFailureMessage(FailureMessage)
}
else if(!"${code}".equals(Str)){
//else if("codess" =="200"){
	AssertionResult.setFailure(true);
	String Msg = "\n响应结果与预期结果不一致,请排查是性能问题,还是程序代码问题";
	String FailureMessage = "########## Expected Result ########  \n" + "Expected code="+Str + "\r\n"+"########Test results ######## \n" + "ResponseHeaders:\n"+ Headers+ "ResponseCode=" + json.code
	String json1 = new String( FailureMessage.getBytes("UTF-8"),"gbk")
	AssertionResult.setFailureMessage(json1)
	log.info("线程组名字 " + prev.getThreadName())
	log.info("请求响应code: " + prev.getResponseCode().toString())
	log.info("响应头响应信息 " +"\n"+ Headers)
	log.info("响应\"code\":" + json.code)

	//	AssertionResult.setFailureMessage(FailureMessage)

}

  JSR223断言:python脚本断言

import json
import time
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

status="200"
status1="410053"

start_time=prev.getStartTime()
end_time=prev.getEndTime()

#时间格式转换
start_time=time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(start_time/1000))
end_time=time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(end_time/1000))

#url请求返回code
ResponseCode=prev.getResponseCode()
#print(ResponseCode)

#获取请求内容
Request=prev.getSamplerData()
Request=Request.replace('\n',' ')
Request=Request.replace('\r','')
#print(Request)

#获取响应内容
Response=prev.getResponseDataAsString()
#print(Response)

#获取响应headers
header=prev.getResponseHeaders()
header=header.replace('\n',' ')
#print(header)

if Response=="":
   AssertionResult.setFailure(True)
   message="系统无响应,未获取到数据"
   msg="Request header data: "+header+" msg: "+message
   AssertionResult.setFailureMessage(msg)#生成html报告中添加日志
#   log.info(msg)

elif "${code}"!=status:# and "${code}"!=status1: 
   AssertionResult.setFailure(True)
   msg="\n请求headers信息: "+header+"\n请求数据: "+Request+"\n响应内容: "+Response
   msgs="Request header data: "+header+" Request data: "+Request+" Response data: "+Response
   AssertionResult.setFailureMessage(msgs)#生成html报告中添加日志
   log.info(msg)

#else:
#   log.info(u"\n响应内容:"+Response)

4.添加计数器  引用参数

5.JSR223预处理程序:groovy脚本处理

String[] coupon_no=["13159437465474054379","13159437465473854377","13159437465474554380"]
a=(${coupon})%(coupon_no.length);
//int a=${coupon};
vars.put("coupon_detail",coupon_no[a]);
println(a)

 JSR223预处理程序:python脚本处理

coupon_no=["1315943746547405437912","13159437465473854377","13159437465474554380","13159437465474754382"]
i =(${coupon})%(len(coupon_no))
vars.put("coupon_detail",coupon_no[i])

BeanShell预处理程序

String[] coupon_no={"13159437465474054379","13159437465473854377","13159437465474554380"};
i =(${coupon})%(coupon_no.length);
vars.put("coupon_detail",coupon_no[i]);

groovy(直接从数据库获取数据)

import java.sql.*;
import groovy.sql.Sql

def sql=Sql.newInstance('jdbc:mysql://ip:3306/shujuku','shujuku','mima','com.mysql.jdbc.Driver')
sql.connection.autoCommit = false

def result=[]
sql.eachRow("SELECT a.coupon_no,b.merchant_code FROM `coupon_record` a JOIN coupon_merchant b on a.coupon_template_code=b.coupon_template_code WHERE b.merchant_code in('526') and  a.`status`='0'"){
	res->result.add([res.coupon_no,res.merchant_code])
}
//println(result)
//println(result.size())
sql.close()

i=(${coupon})%(result.size())
//println(result[i][0])

vars.put("coupon_detail",result[i][0])

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值