一、BeanShell Sampler使用JS函数生成的日期月份小于10时是个位数
开始用的是:
"baseDate": "${__javaScript((new Date()).getFullYear()+'-'+ ((new Date()).getMonth()+1) + '-' + (new Date()).getDate(),)}"
生成的月份和日期小于10时都是个位数,比如2018-9-8
如果接口文档预期返回的格式是2018-09-08,则不匹配
- 一个办法是,用java.util.Calendar类
import java.text.SimpleDateFormat;
import java.util.Calendar;
public String myDate(){
String res;
Calendar cal = Calendar.getInstance();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
res = simpleDateFormat.format(cal.getTime());
return res;
}
vars.put("baseDate",myDate());
- 一个办法是,用java.util.Date类
需注意 new Date(myYear-1900,month,day) 实际生成的月份是 month+1
需注意日期转换
SimpleDateFormat("yyyy-MM-dd") 生成的结果日月个位时会在个位数前加0
SimpleDateFormat("yyyy-M-d") 生成的结果日月个位时就是个位数
二、下游接口M发送请求和接口N返回值都用到同一字段A,BeanShell Sampler事先设置好字段A
举一反三,只要某字段是唯一固定的,后面有很多地方用到,就可以事先把它设置好(通过获取/新建),之后 ${name} 引用即可.
三、调用格式转换函数,注意函数参数的格式和传参value值原来的格式
这个问题也是在生成日期进行格式转换时遇到的,当时接口返回的createTime是个时间戳一串数字
时间戳转换成年月日时分秒的函数如下:
import java.text.SimpleDateFormat;
import java.util.Date;
public String stampToDate(String s){
String res;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
long lt = new Long(s);
Date date = new Date(lt);
res = simpleDateFormat.format(date);
return res;
}
重点来了,如果用以下这行代码不能成功转换,猜猜是为什么?
vars.put("createDateAndTime", stampToDate(String.valueOf(${createTime})));
1
2
3
想到了吗?
因为 ${createTime}
获取到的是一串数字,此处传参需要是个字符串~
解决方法很简单 加上双引号 变成字符串~即
vars.put("createDateAndTime", stampToDate(String.valueOf("${createTime}")));
四、需求明确返回内容不能包含某字段,校验是否没返回该字段,需事先特别设置
事例接口是获取患者列表,有很多个患者(对象)。截图只截了一部分如下:
接口运行是通的,没有报错。
因为默认情况下,预期返回内容"obj":[{a}],实际返回内容"obj":[{a},{b},{c}],后面多出的内容不会去校验。
注意a必须是第一个,如果预期返回内容"obj":[{c},{b}],实际返回内容"obj":[{a},{b},{c}],则跑不通过。此时排序不确定只需要校验是否包含在返回值内的话,则可以预期结果勾选“只检查数组中数据是否包含在预期结果中”
如果需求明确是返回内容不能包含某字段,需校验确实没返回该字段,需事先设置。