美文网首页
使用java代码生成部分js代码,完成接口测试

使用java代码生成部分js代码,完成接口测试

作者: 西西的博客 | 来源:发表于2019-04-19 16:01 被阅读0次
    图片来源网络

    一、写在前面

    最近公司项目进行服务拆分,需要将单体项目拆分为多个微服务。测试组需要对所有的接口进行测试。测试接口达到400之多,这个是后话了。

    服务拆分后,进行接口测试,又有哪些注意事项能?以下两点必须要关注到:

    • 1、正常参数下接口的联通性。接口返回状态码为200。并且服务端返回的状态码也是正常的,比如"code":"0000",这个状态码是根据后端接口定义的

    • 2、新服务端接口返回数据的字段要和老服务端接口的字段是一样的。比如老服务端接口返回的数据是一个json串:{“code”:“0000”, "username":"xixi"},那么新服务端接口返回的串也必须要有codeusername

    今天要说的是,如何使用java代码生成部分js代码,完成新老服务端接口字段(json数据,键)一致性的检查。提高工作效率

    二、字段一致性断言

    • 字段一致性思路:
      1、获取老服务端接口的返回值,查看返回的json数据包含了哪些键
      2、获取新服务端接口的返回值,将步骤1得到的键和当前获得的键比较,检查新接口是否有缺少键

    • 字段一致性断言
      现在有新老服务器接口http://old/getImagehttp://new/getImage。老服务端接口返回的json数据如下,

    {
      "requestId": "47d145b1d0164ac7b9bc2e82b0ae3d3b",
      "msg": "",
      "code": "0000",
      "data": {
        "result": [
          {
            "id": 513,
            "cover": "https://img.test/album/20180404/o_1522840084933.jpg",
            "name": "高能反转的烧脑神剧",
            "videoCount": 8,
            "type": "season",
            "seasonList": null,
            "brief": "高智商烧脑悬疑英美剧,让我们的脑细胞躁动起来吧~~"
          },
          {
            "id": 419,
            "cover": "https://img.test/album/20180108/o_1515392963542.jpg",
            "name": "2017年度最佳人气惊悚类",
            "videoCount": 5,
            "type": "season_toplist",
            "seasonList": null,
            "brief": "2017年度最佳人气惊悚类,排名基于惊悚类剧集在人人视频的播放量。"
          },
          {
            "id": 413,
            "cover": "https://img.test/album/20180108/o_1515391132388.jpg",
            "name": "2017年度冷门好剧",
            "videoCount": 5,
            "type": "season_toplist",
            "seasonList": null,
            "brief": "冷门好剧,一般人我不告诉他。"
          },
          {
            "id": 421,
            "cover": "https://img.test/album/20180108/o_1515393273366.jpg",
            "name": "2017年度最佳人气奇幻类",
            "videoCount": 5,
            "type": "season_toplist",
            "seasonList": null,
            "brief": "2017年度最佳人气奇幻类,排名基于奇幻类剧集在人人视频的播放量。"
          },
          {
            "id": 415,
            "cover": "https://img.test/album/20180108/o_1515391689541.jpg",
            "name": "2017年度最佳人气剧情类",
            "videoCount": 5,
            "type": "season_toplist",
            "seasonList": null,
            "brief": "2017年度最佳人气剧情类,排名基于剧情类剧集在人人视频的播放量。"
          }
        ],
        "total": 0,
        "isEnd": false
      }
    }
    

    新老接口字段一致性,js断言如下,函数checkValue对于所有的接口是不变的,唯一改变的是数组,以及数组里面的值。如果是几个接口,返回数据量少,可以通过肉眼,完成字段的检查。如果数据量大,并且接口多,还是得用代码。

    function checkValue(data, keys){
        var flag = true
        var lessKey;
        for (var i=0; i<keys.length; i++){
            if (!data.hasOwnProperty(keys[i]) ){
                flag = false;
                lessKey = keys[i]
                break;
            }
        }
    
        assert.deepEqual(flag, true,"缺少字段"+lessKey);
    }
    
    var bodyKey=["msg","code","data","requestId"]
    checkValue(body, bodyKey)
    
    var result=["cover","videoCount","brief","name","seasonList","id","type"]
    checkValue(body.data.result[0], result)
    
    var dataKey=["result","total","isEnd"]
    checkValue(body.data, dataKey)
    
    
    • java代码生成部分js
      每个接口的键一致性检查,检查函数是不变的,变的是检查的键,我们的代码需要完成的工作就是能过将我们的json解析成下面的数据
    var bodyKey=["msg","code","data","requestId"]
    checkValue(body, bodyKey)
    
    var result=["cover","videoCount","brief","name","seasonList","id","type"]
    checkValue(body.data.result[0], result)
    
    var dataKey=["result","total","isEnd"]
    checkValue(body.data, dataKey)
    

    三、java生成js代码

    以下是java代码。使用时,只需要将jsonStr值,替换成你电脑上需要解析的json文件的路径值。完整源码

    public class JsonCreateJs {
    
        public static void main(String[] args) {
    
            String jsonStr ="E:\\body.json";
            String jsonData = Common.readPostmanJson(jsonStr);
            
            
            
            //System.out.println("assert.equal(status, 200)\nassert.deepEqual(body.code, \"0000\")  \n"); 
            
            JSONObject jsonObject = JSONObject.parseObject(jsonData);
            Set<String> bodyKey = jsonObject.keySet();
            boolean n = true;
            String body = "var bodyKey=[\"";
            for (String key : bodyKey) {
                if (n){
                    body = body + key;
                    n = false;
                }else{
                    body = body +"\",\""+key;
                }
            }
            System.out.println(body+"\"]\ncheckValue(body, bodyKey)\n");
            
            JSONObject dataObject = jsonObject.getJSONObject("data");
            Set<String> dataKey= dataObject.keySet();
            body = "var dataKey=[\"";
            n = true;
            for (String key : dataKey) {
                if (n){
                    body = body + key;
                    n = false;
                }else{
                    body = body +"\",\""+key;
                }
                
               
                if (JSON.parse(dataObject.getString(key)) instanceof JSONObject){
                    System.out.print("var "+key+"=[");
                    PrintResult(dataObject.getJSONObject(key), key, false);
                     
                }
                else if(JSON.parse(dataObject.getString(key)) instanceof JSONArray){
                    
                    JSONArray dataArray = dataObject.getJSONArray(key);
                    if (dataArray.size()!=0){
                        System.out.print("var "+key+"=[");
                        PrintResult( dataArray.getJSONObject(0),key, true);
                    }
                    
                }
                
                
            }
            System.out.println(body+"\"]\ncheckValue(body.data, dataKey)");
        }
    
        public static void PrintResult(JSONObject dataObject, String key, boolean isArray){
            Set<String> key1 = dataObject.keySet();
            
            
            boolean flag = true;
            for (String keyi : key1){
                if (flag){
                    System.out.print("\""+keyi);
                    flag = false;
                }else{
                    System.out.print("\",\""+keyi);
                }
                
                
            }
            
           String str =  (isArray==true) ? "\"]\ncheckValue(body.data."+key+"[0], "+key+")\n":"\"]\ncheckValue(body.data."+key+", "+key+")\n";
           System.out.println(str);
        }
    }
    
    运行结果

    相关文章

      网友评论

          本文标题:使用java代码生成部分js代码,完成接口测试

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