美文网首页IT语言工具集
JMeter 编写接口测试用例遇到的问题及解决

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

作者: Mikasa___ | 来源:发表于2018-09-13 17:35 被阅读0次

    一、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 编写接口测试用例遇到的问题及解决

        本文链接:https://www.haomeiwen.com/subject/atxbgftx.html