前言:
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])