一、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类
日月是个位数生成的是两位.png 日月是个位数生成的是一位.png 日月是两位数生成的是两位.png需注意 new Date(myYear-1900,month,day) 实际生成的月份是 month+1
需注意日期转换
SimpleDateFormat("yyyy-MM-dd") 生成的结果日月个位时会在个位数前加0
SimpleDateFormat("yyyy-M-d") 生成的结果日月个位时就是个位数
二、下游接口M发送请求和接口N返回值都用到同一字段A,BeanShell Sampler事先设置好字段A
之后接口M请求用到此字段A.png
接口N返回值断言用到字段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}],则跑不通过。此时排序不确定只需要校验是否包含在返回值内的话,则可以预期结果勾选“只检查数组中数据是否包含在预期结果中”
断言里面设置好预期不存在的字段如果需求明确是返回内容不能包含某字段,需校验确实没返回该字段,需事先设置。
网友评论