操作文件 BeanShell Assertion
import java.io.*;
import java.io.IOException;
import org.apache.commons.io.*;
//源文件和目标文件路径
File source = new File("\\\\scmisrma02/Shipping/Web/ShippingExternal/LogisticsShippingLabel/V2/Config_bak.json");
File dest = new File("\\\\scmisrma02/Shipping/Web/ShippingExternal/LogisticsShippingLabel/V2/Config.json");
//判断源文件存在则复制文件,若目标文件已存在,会强制覆盖目标文件
if (source.exists())
{
FileUtils.copyFile(source, dest);
}
else
{
Failure = true;
FailureMessage = "源文件Config_bak.json不存在";
return;
}
后置处理器 BeanShell PostProcessor
//导入需要的程序包
import org.json.*;
//将Response取出为String类型
String response_string = prev.getResponseDataAsString();
//将String类型的Response构造成JSONObject对象
JSONObject response_obj = new JSONObject(response_string);
//将LabelInformations节点下数据取出构造为数组对象
JSONArray labelInformations = response_obj.getJSONArray("LabelInformations");
int len = labelInformations.length();
//创建一个HashMap,以LabelNumber为Key,单个包裹数据为Value,构造成键值对Map
Map packages = new HashMap();
for(int i = 0; i < len; i++)
{
JSONObject packages_temp = (JSONObject)labelInformations.getJSONObject(i);//获取数组对象
String labelNumber_str = packages_temp.get("LabelNumber").toString();;
int labelNumber = Integer.valueOf(labelNumber_str).intValue();
packages.put(labelNumber,packages_temp);
}
//将Response对象和LabelInformations键值对赋值给变量,在BeanShell断言中调用
props.put("${__RandomString(10,abcdefghijklmn,packages)}",packages);
props.put("${__RandomString(10,asdfghnjvkclm,response_obj)}",response_obj);
断言 BeanShell Assertion
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.regex.*;
import org.json.*;
//获取BeanShell后置处理程序中定义的变量
HashMap packages_new = props.get("${packages}");
JSONObject response_obj_new = props.get("${response_obj}");
//数据库查询到的总条数和接口返回的总条数
int dbcount = vars.getObject("sqlresult").size();
int res_count = packages_new.size();
//获取响应中校验的字段值
String res_ActualShippingMethod = response_obj_new.get("ActualShippingMethod").toString();
String res_AddressType = response_obj_new.get("AddressType").toString();
//获取从excel中得到的字段的值
req_DeclaredValue = vars.get("DeclaredValue");
req_DeclaredValueRequired = vars.get("DeclaredValueRequired");
req_SignatureRequired = vars.get("SignatureRequired");
req_ShipviaCode = vars.get("ShipviaCode");
req_STState = vars.get("STState");
//ActualShippingMethod校验
if(!res_ActualShippingMethod.equals("RRTRTT"))
{
Failure = true;
FailureMessage = "ActualShippingMethod校验失败";
return;
}
//判断数据库查询的结果总数与响应中的结果总数是否一样,一样再继续后续步骤
if(dbcount != res_count || res_count != 1)
{
Failure=true;
FailureMessage="接口结果数量:"+res_count+"和数据库结果数量:"+dbcount+"不一致";
return;
}
//Shipvia in ('038','039')&PR时,ShippingLabelPath校验逻辑
if((req_ShipviaCode.equals("038") || req_ShipviaCode.equals("039")) && req_STState.equals("PR"))
{
//判断返回的ShippingLabelPath路径正确
String res_ShippingLabelPath = response_obj_new.get("ShippingLabelPath").toString();
String pattern = "^http\\\\S+${ShippingLabelPath}\\\\S+pdf$";
if(!Pattern.matches(pattern, res_ShippingLabelPath))
{
Failure = true;
FailureMessage = "ShippingLabelPath校验失败";
return;
}
//判断LabelInformations节点下的ShippingLabelPath为''
for(int i = 1; i <= res_count; i++)
{
//获取LabelInformations中ShippingLabelPath值
JSONObject packages_new_temp = (JSONObject)packages_new.get(i);
String res_ShippingLabelPath = packages_new_temp.get("ShippingLabelPath").toString();
//ShippingLabelPath为空判断
if(!res_ShippingLabelPath.equals(""))
{
Failure = true;
FailureMessage = "LabelInformations下ShippingLabelPath校验失败";
break;
}
}
}
else //非038,039 PR校验逻辑
{
//ShippingLabelPath校验
for(int i = 1; i <= res_count; i++)
{
//获取LabelInformations中ShippingLabelPath值
JSONObject packages_new_temp = (JSONObject)packages_new.get(i);
String res_ShippingLabelPath = packages_new_temp.get("ShippingLabelPath").toString();
//定义正则表达式进行匹配
String pattern = "^http\\\\S+${ShippingLabelPath}\\\\S+pdf$";
if(!Pattern.matches(pattern, res_ShippingLabelPath))
{
Failure = true;
FailureMessage = "ShippingLabelPath校验失败";
break;
}
}
}
//逐项对比
for(int i = 0; i < dbcount; i++)
{
//获取数据库中数据对应的值
db_TrackingNumber = vars.getObject("sqlresult").get(i).get("TrackingNumber").toString().trim();
db_DeclaredValue = vars.getObject("sqlresult").get(i).get("DeclaredValue").toString().trim();
db_Coverage = vars.getObject("sqlresult").get(i).get("Coverage").toString().trim();
db_AdditionalMark = vars.getObject("sqlresult").get(i).get("AdditionalMark").toString().trim();
db_AddressType = vars.getObject("sqlresult").get(i).get("AddressType").toString().trim();
//获取LabelInformations中对应字段值
JSONObject packages_new_temp = (JSONObject)packages_new.get(i+1);
String res_TrackingNumber = packages_new_temp.get("TrackingNumber").toString();
String res_SignatureRequired = packages_new_temp.get("SignatureRequired").toString();
String res_DeclaredValueRequired = packages_new_temp.get("DeclaredValueRequired").toString();
//TrackingNumber判断
if(!db_TrackingNumber.equals(res_TrackingNumber))//当校验数据不相等,则校验失败
{
Failure = true;
FailureMessage = "接口TrackingNumber:"+ResTrackingNumber+"和数据库结果:"+db_TrackingNumber+"不一致";
break;
}
//响应与输入SignatureRequired与存储AdditionalMark判断
if(!res_SignatureRequired.equals(db_AdditionalMark) || !res_SignatureRequired.equals(req_SignatureRequired))
{
Failure = true;
FailureMessage = "SignatureRequired校验失败";
break;
}
//DeclaredValueRequired判断
if(!res_DeclaredValueRequired.equals(req_DeclaredValueRequired))
{
Failure = true;
FailureMessage = "DeclaredValueRequired校验失败";
break;
}
//DeclaredValue与Coverage判断
if(!db_DeclaredValue.equals(req_DeclaredValue) || !db_Coverage.equals(req_DeclaredValue))
{
Failure = true;
FailureMessage = "DeclaredValue校验失败";
break;
}
//AddressType判断
if(!db_AddressType.equals(res_AddressType))
{
Failure = true;
FailureMessage = "AddressType校验失败";
break;
}
}
JSON Extractor
int dbcount = vars.getObject("sqlresult").size();//数据库查询到的总条数
if(dbcount==1)//判断数据库查询的条数是否为1,为1在进行对比
{
Failure=false;
}
else
{
Failure=true;
FailureMessage="数据库校验失败";
}