zoukankan      html  css  js  c++  java
  • beanshell-接口返回结果与预期结果比较(预期结果为两个接口差集)-两个set集合的比较

    事情是这样的,现在在测试一个接口A,接口返回的数据字段x预期应该是另外两个接口的BC字段x的差集。现在要判断接口返回的数据与该差集是否一致。一致则符合预期结果通过,不符合则失败。

    思路:

    需要比较的X字段值在接口响应中不会重复

    1、获取接口B返回x字段,接口返回多条数据则遍历数据将获取的x字段放入set中

    2、获取接口C返回x字段,接口返回多条数据则遍历数据将获取的x字段放入set2中,c接口可能返回为空,则set2为空

    3、获取接口A返回x字段,接口返回多条数据则遍历数据将获取的x字段放入set1中

    4、接口A预期结果应该为set3=set.removeAll(set2)、接口A实际结果为set1

    5、判断set3和set1是否都为空,都为空则通;不为空则判断set3.size()和set1()是否相同,不相同则直接失败;如果相同判断set3.containsAll(set1),如果为true则通过,否则不通过

    6、现在存在一个问题接口BC获取的set如何通过jmeter, vars.put存放,现在不知道怎么解决???

    初步的想法是把set转换成string数组,但是vars.put方法只支持传入string,导致存入数据报错

     //把set转换成string并打印
    	        	String[] strs = set.toArray(new String[set.size()]);
    	          for (String kk :strs){
    		     log.info(kk);} 
                   vars.put("set", strs); 
    

     接着查资料,发现想要存入对象,可以使用vars.putObject("setall", set)方式,那么保存的问题解决了。

    现在A接口需要获取B接口的setall对象,则使用Object  obj=vars.getObject("setall");set=(Set)obj;或者set=vars.getObject("setall");问题得解决。

    7、

    具体代码实现如下(在接口A中加入一个beanshell断言,test)

    import com.alibaba.fastjson.JSONObject;
    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSON;
    Set set = new HashSet();
    Set set1 = new HashSet();
    Set set2 = new HashSet();
    //获取所有证券集合set
    set.add("000762");
    set.add("000002");
    set.add("000651");
    set.add("600019");
    set.add("000001");
    set.add("002415");
    set.add("600570");
    set.add("000858");
    set.add("600010");
    set.add("600000");
    set.add("000008");
    set.add("600004");
    //获取存在本证券融资合约的证券set2
    set2.add("600010");
    set2.add("000762");
    set2.add("000002");
    set2.add("000651");
    //预期去除融资合约证券的证券,求set set2的差集
     set.removeAll(set2);
    //	     for (Object o : set) {
    //	         log.info(o.toString());
    //	     }
    //获取请求的返回值
    String response_data = prev.getResponseDataAsString();
    log.info(response_data);
    Object json = JSON.parse(response_data);
    //判断返回数据是json对象(一条数据)还是数据(多条数据),数组判断是否有数据有数据则通过,无数据则不通过,json对象则判断是否有数据
            if(json instanceof JSONObject){
               log.info("对象");
               JSONObject data_obj= JSON.parseObject(response_data);
               String stock_account=data_obj.get("stock_code");
               if (stock_account.length() != 0)
                {
                  set1.add(stock_code);      
                } else {
                 log.info("持仓证券的数量为空");
                }
            }
            if(json instanceof JSONArray){
               //log.info("数组");
               JSONArray jsonArray = JSON.parseArray(response_data);
            log.info("接口返回的数据条数为");
            int a=jsonArray.size();
            log.info(String.valueOf(a));
            //log.info(jsonArray.toString());
            if (jsonArray.size() != 0)
                {
    	              for (int i=0;i<jsonArray.size();i++)
    	              {
    	              	JSONObject dataObj1 = jsonArray.get(i);
    	              	String stock_code=dataObj1.get("stock_code");
    	              	set1.add(stock_code); 
    	        }
    	        //把set转换成string并打印
    	        //String[] strs = set.toArray(new String[set.size()]);
    	          //for (String kk :strs){
    		     //log.info(kk);}  
               //拿接口查询结果与预期结果做比较,判断两个set集合是否一致
               if(set == null || set1 ==null){
    	    	 System.out.println("两个集合都为空");
    	        }
    	     else{
    	        if(set.size()!=set1.size()){
    	        	log.info("两个集合大小不相等");
    	        	//int a =set.size();
    	        	//log.info(Integer.toString(a));
    	        	//int b =set1.size();
    	        	//log.info(Integer.toString(b));
    	        }
    	        else{
    	        	if(set.containsAll(set1)) {
    	        		log.info("两个集合相等");	
    	        	}
    	        	else{
    	        		log.info("两个集合个数相同但是元素不相等");
    	        		//从预期结果中去除实际结果中相同的元素,找出有哪些元素不符合预期
    	        		set.removeAll(set1);
    	       	     	for (Object o : set) {
    	       	         log.info("预期返回但是没有返回的元素为"+o.toString());
    	       	     }
    	        	}
    	        	
    	        	
    	        }
    	     }
    		     
                } else {
                 
                    log.info("返回的数据为[]但是获取不到证券信息");
                }
            }
    
    test2-获取上一接口返回的数据set,做校验

    import
    com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSON; Set set = new HashSet(); Set set1 = new HashSet(); Set set2 = new HashSet(); //获取所有证券集合set //Object obj=vars.getObject("setall"); //set=(Set)obj; set=vars.getObject("setall"); //获取存在本证券融资合约的证券set2 set2.add("600010"); set2.add("000762"); set2.add("000002"); set2.add("000651"); //预期去除融资合约证券的证券,求set set2的差集 set.removeAll(set2); // for (Object o : set) { // log.info(o.toString()); // } //获取请求的返回值 String response_data = prev.getResponseDataAsString(); log.info(response_data); Object json = JSON.parse(response_data); //判断返回数据是json对象(一条数据)还是数据(多条数据),数组判断是否有数据有数据则通过,无数据则不通过,json对象则判断是否有数据 if(json instanceof JSONObject){ log.info("对象"); JSONObject data_obj= JSON.parseObject(response_data); String stock_account=data_obj.get("stock_code"); if (stock_account.length() != 0) { set1.add(stock_code); } else { log.info("持仓证券的数量为空"); } } if(json instanceof JSONArray){ //log.info("数组"); JSONArray jsonArray = JSON.parseArray(response_data); log.info("接口返回的数据条数为"); int a=jsonArray.size(); log.info(String.valueOf(a)); //log.info(jsonArray.toString()); if (jsonArray.size() != 0) { for (int i=0;i<jsonArray.size();i++) { JSONObject dataObj1 = jsonArray.get(i); String stock_code=dataObj1.get("stock_code"); set1.add(stock_code); } //把set转换成string并打印 //String[] strs = set.toArray(new String[set.size()]); //for (String kk :strs){ //log.info(kk);} //拿接口查询结果与预期结果做比较,判断两个set集合是否一致 if(set == null || set1 ==null){ System.out.println("两个集合都为空"); } else{ if(set.size()!=set1.size()){ log.info("两个集合大小不相等"); //int a =set.size(); //log.info(Integer.toString(a)); //int b =set1.size(); //log.info(Integer.toString(b)); } else{ if(set.containsAll(set1)) { log.info("两个集合相等"); } else{ log.info("两个集合个数相同但是元素不相等"); //从预期结果中去除实际结果中相同的元素,找出有哪些元素不符合预期 set.removeAll(set1); for (Object o : set) { log.info("预期返回但是没有返回的元素为"+o.toString()); } } } } } else { log.info("返回的数据为[]但是获取不到证券信息"); } }

    8、最后实现的效果

  • 相关阅读:
    OSI结构和TCP/IP模型
    将[4,3,2,5,4,3]分割成[4,3,2]、[5,4,3]两个List的算法
    Mybatis增加对象属性不增加mapper.xml的情况
    以脚本方式直接执行修改密码的passwd命令
    Raphael的鼠标over move out事件
    Raphael的Braille例子
    Raphael的set使用
    Raphael的transform用法
    Raphael的text及对齐方式
    Raphael初始化,path,circle,rect,ellipse,image
  • 原文地址:https://www.cnblogs.com/qiaoli0726/p/14393259.html
Copyright © 2011-2022 走看看