JMeter 编写接口测试用例遇到的问题及解决

一、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") 生成的结果日月个位时就是个位数

日月是个位数生成的是两位.png
日月是个位数生成的是一位.png
日月是两位数生成的是两位.png

二、下游接口M发送请求和接口N返回值都用到同一字段A,BeanShell Sampler事先设置好字段A

提前生成需要用的字段A.png

之后接口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}],则跑不通过。此时排序不确定只需要校验是否包含在返回值内的话,则可以预期结果勾选“只检查数组中数据是否包含在预期结果中”

如果需求明确是返回内容不能包含某字段,需校验确实没返回该字段,需事先设置。

断言里面设置好预期不存在的字段

你可能感兴趣的:(JMeter 编写接口测试用例遇到的问题及解决)