IT虾米网

Java版接口自动化--初稿详解

admin 2018年05月30日 编程语言 158 0

一、接口参数的获取:

1.参数通过Excel读取,并将结果写入Excel中

package org.fanqi.operateExcel; 
 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.Map; 
import java.util.TreeMap; 
 
import org.apache.poi.xssf.usermodel.XSSFCell; 
import org.apache.poi.xssf.usermodel.XSSFSheet; 
import org.apache.poi.xssf.usermodel.XSSFWorkbook; 
 
public class OperateExcelUtil { 
     
    /* 
     * 读取Excel数据 
     */ 
    public List<Map<String, Object>> readExcel(String filename) { 
         
        FileInputStream in; 
        XSSFWorkbook workbook = null; 
        try { 
            in = new FileInputStream(filename); 
            workbook = new XSSFWorkbook(in); 
        } catch (FileNotFoundException e) { 
            e.printStackTrace(); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } 
        //获取第一张表 
        XSSFSheet sheet = workbook.getSheetAt(0); 
        List<Map<String, Object>> listCanshu = new ArrayList<Map<String, Object>>(); 
            for(int i=1;i<=sheet.getLastRowNum();i++){ 
                Map<String, Object> map = new TreeMap<String, Object>(); 
                String  cell0 = sheet.getRow(i).getCell(0).getStringCellValue(); 
                String  cell1 = sheet.getRow(i).getCell(1).getStringCellValue(); 
                //利用map保存参数 
                map.put("canshu1", cell0); 
                map.put("canshu2", cell1); 
                listCanshu.add(map); 
        } 
            return listCanshu;  
    } 
     
    /* 
     * 测试结果写入原Excel 
     * result为测试结果(Pass or Failed) 
     */ 
    public void writeExcel(String filename,List<String> resultList,int resultRow) { 
         
        XSSFWorkbook workbook = null; 
        FileInputStream in = null; 
         
        try { 
            in = new FileInputStream(filename); 
            workbook = new XSSFWorkbook(in); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } 
        XSSFSheet sheet = workbook.getSheetAt(0); 
        int rowSum = sheet.getLastRowNum(); 
        XSSFCell cell = null; 
        for(int i=1;i<=rowSum;i++){ 
            cell = sheet.getRow(i).getCell(resultRow); 
            cell.setCellValue(resultList.get(i-1)); 
        } 
        try { 
            workbook.write(new FileOutputStream(filename)); 
        } catch (FileNotFoundException e) { 
            e.printStackTrace(); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } 
    } 
     
    /*创建Excel文件 
     *  
    public void createExcel() { 
          
         XSSFWorkbook x = new XSSFWorkbook(); 
         XSSFFont font1 = x.createFont(); 
         font1.setFontHeightInPoints((short) 15); 
         font1.setFontName("Pristina"); 
         font1.setColor(IndexedColors.GREEN.index); 
         //font1.setColor(HSSFColor.YELLOW.index); 
         XSSFCellStyle style = x.createCellStyle(); 
         style.setFont(font1); 
         XSSFSheet sheet = x.createSheet(); 
         XSSFRow row0 = sheet.createRow(0); 
         row0.createCell(0).setCellValue("姓名"); 
         row0.getCell(0).setCellStyle(style); 
         row0.createCell(1).setCellValue("性别"); 
         row0.getCell(1).setCellStyle(style); 
         row0.createCell(2).setCellValue("年龄"); 
         row0.getCell(2).setCellStyle(style); 
         row0.createCell(3).setCellValue("职位"); 
         row0.getCell(3).setCellStyle(style); 
         row0.createCell(4).setCellValue("工作年限"); 
         row0.getCell(4).setCellStyle(style); 
         User u = new User(); 
         u.setName("郭大侠"); 
         u.setSex("男"); 
         u.setAge("30"); 
         u.setJob("Java开发"); 
         u.setExperience("2"); 
          
         User u1 = new User(); 
         u1.setName("陶大婶"); 
         u1.setSex("男"); 
         u1.setAge("28"); 
         u1.setJob("Java开发"); 
         u1.setExperience("3"); 
          
         ArrayList<User> arrayList = new ArrayList<User>(); 
         arrayList.add(u); 
         arrayList.add(u1); 
         for(int i=1; i<3; i++){ 
         XSSFRow row = sheet.createRow(i); 
         row.createCell(0).setCellValue(arrayList.get(i-1).getName()); 
         row.createCell(1).setCellValue(arrayList.get(i-1).getSex()); 
         row.createCell(2).setCellValue(arrayList.get(i-1).getAge()); 
         row.createCell(3).setCellValue(arrayList.get(i-1).getJob()); 
        row.createCell(4).setCellValue(arrayList.get(i-1).getExperience()); 
        } 
          
         try { 
         x.write(new FileOutputStream("E:\\test.xlsx")); 
         } catch (FileNotFoundException e) { 
             e.printStackTrace(); 
         } catch (IOException e) { 
         e.printStackTrace(); 
        } 
        } 
    } 
    */ 
    public static void main(String[] args) { 
        OperateExcelUtil op = new OperateExcelUtil(); 
        List<String> resultList = new ArrayList<String>(); 
        resultList.add("Failed"); 
        resultList.add("Pass"); 
        op.writeExcel("E:\\test.xlsx", resultList, 3); 
    } 
     
}

 

可能需要加验签:sign(MD5)验签

/** 
 * MD5工具类(许总监) 
 *  
 */ 
public class MD5Util { 
 
    /** 
     * Md5. 
     *  
     * @param value 
     *            the value 
     * @return the string 
     */ 
    public static String md5(String value) { 
        return DigestUtils.md5Hex(value); 
    } 
     
    public static String md5New(String value) { 
        try { 
            MessageDigest md = MessageDigest.getInstance("md5"); 
            byte[] e = md.digest(value.getBytes()); 
            return toHex(e); 
        } catch (NoSuchAlgorithmException e) { 
            e.printStackTrace(); 
            return value; 
        } 
    } 
 
    /** 
     * To hex. 
     *  
     * @param bytes 
     *            the bytes 
     * @return the string 
     */ 
    private static String toHex(byte bytes[]) { 
        StringBuilder hs = new StringBuilder(); 
        String stmp = ""; 
        for (int n = 0; n < bytes.length; n++) { 
            stmp = Integer.toHexString(bytes[n] & 0xff); 
            if (stmp.length() == 1) 
                hs.append("0").append(stmp); 
            else 
                hs.append(stmp); 
        } 
        return hs.toString(); 
    } 
}

 

二、请求报文的组装:

1.组装为JSON格式

package org.fanqi.operateJSONUtil; 
 
import java.util.List; 
import java.util.Map; 
 
import org.json.JSONArray; 
import org.json.JSONObject; 
 
public class BuildJSON { 
     
    /* 
     * 组装成JSON形式 
     */ 
    public JSONObject buildJSON(Map mapParameters) { 
          
        JSONObject json = new JSONObject(mapParameters); 
        return json;      
    } 
     
      /* 
       * 组装成JSON形式 
       */ 
     public JSONObject buildJSONByString(String str) { 
          return new JSONObject(str); 
   } 
 
 
 
    /* 
     * 组装成JSON形式 
     * @parameter list<map> 
     */ 
    public JSONArray buildsJSON(List<Map> listCanshu) { 
          
        JSONArray jArray = new JSONArray(); 
        for(int i=0;i<listCanshu.size();i++ ){ 
            JSONObject json = new JSONObject(listCanshu.get(i)); 
            jArray.put(json); 
        } 
        return jArray;      
    } 
}

 

三、请求方法:方式get、post、Hessian

1.get请求方式

/* 
     * get请求方式 
     * @author:fanqi 
     */ 
    public static String httpGetMethod(String url,Map<Object,Object> map) { 
         
        DefaultHttpClient httpClient = new DefaultHttpClient(); 
        Object value; 
        Object urlInfo = ""; 
        for(Object key : map.keySet()){ 
            value = map.get(key); 
            urlInfo += key+"="+value+"&"; 
        } 
        urlInfo = urlInfo.toString().substring(0, urlInfo.toString().length()-1);         
        url = url + "?" + urlInfo.toString(); 
        HttpGet httpGet = new HttpGet(url); 
        HttpResponse httpResponse = null; 
        try { 
            httpResponse = httpClient.execute(httpGet); 
            StringBuilder sb = new StringBuilder(); 
            InputStream inputStream = httpResponse.getEntity().getContent(); 
            BufferedReader br = new BufferedReader(new InputStreamReader(inputStream,"GBK")); 
            String temp = ""; 
            while((temp = br.readLine()) != null){ 
                sb.append(temp + "\n"); 
            } 
            return sb.toString(); 
        } catch (IllegalStateException e) { 
            e.printStackTrace(); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        }         
        return null;         
    }

 

2.Post请求方式PostMethod(根据httpclient.jar包的版本不同,用到的方法有差异)

/* 
 * author:fanqi 
 */ 
    public String  HttpClientPostMethod(String url,Map map) { 
         
        DefaultHttpClient httpClient = new DefaultHttpClient(); 
        HttpPost httpPost = new HttpPost(url); 
        InputStream responseStream = null; 
        //参数形式为JSON格式 
        JSONObject parameter = new JSONObject(map); 
        try { 
            StringEntity entity = new StringEntity(parameter.toString());//解决中文乱码问题可以加参数"utf-8" 
            entity.setContentEncoding("UTF-8");     
            entity.setContentType("application/json");  
            httpPost.setEntity(entity); 
            HttpResponse httpResponse = httpClient.execute(httpPost); 
            if(httpResponse.getStatusLine().getStatusCode() == 200){ 
                HttpEntity httpEntity = httpResponse.getEntity(); 
                responseStream = httpEntity.getContent(); 
                BufferedReader br = new BufferedReader(new InputStreamReader(responseStream)); 
                StringBuilder sb = new StringBuilder(); 
                String temp = ""; 
                while((temp = br.readLine()) != null){ 
                    String str = new String(temp.getBytes(), "UTF-8"); 
                    sb.append(str + "\n"); 
                } 
                return sb.toString(); 
            } 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } 
        return null;         
    }

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

/* 
 * author:xu zong jian 
 */ 
public static String HttpClientPostMethod(String url,String sign,Map<String,String> map){ 
        try { 
            log.info("HttpClientPostMethod -- url:{}",url); 
            HttpClient client = new HttpClient(); 
            PostMethod postMethod = new PostMethod(url); 
            NameValuePair[] data = new NameValuePair[map.keySet().size()]; 
            Iterator it = map.entrySet().iterator(); 
            int i = 0; 
            while (it.hasNext()) { 
                Map.Entry entry = (Entry) it.next(); 
                Object key = entry.getKey(); 
                Object value = entry.getValue(); 
                data[i] = new NameValuePair(key.toString(), value.toString()); 
                i++; 
            } 
            postMethod.setRequestBody(data); 
            client.executeMethod(postMethod); 
             
            log.info("HttpClientPostMethod -- status:{} ",postMethod.getStatusCode()); 
             
            if (postMethod.getStatusCode() == HttpStatus.SC_OK) { 
                return postMethod.getResponseBodyAsString(); 
            } 
        } catch (Exception e) { 
            log.error("HttpClientPostMethod error", e); 
        } 
        log.info("HttpClientPostMethod return null"); 
        return null; 
    }

 

3.Hessian请求:

Hessian是基于Binary –RPC(二进制远程过程调用协议)进行通讯。

Hessian就是把Java对象转变成字节序列,然后通过Http传输到目标服务器上(主机),主机收到这个字节序列后,按照一定的协议标准进行反序列,提交给对应的服务处理。处理完成以后以同样的方式返回数据。

需要:Hessian.jar、 所测接口的API包、请求地址

/* 
     * url为请求地址,包含端口号 
     * Response为接口请求返回对象 
     * ServerClient为接口中定义的请求客户端类 
     */ 
    public Response executes(String url) { 
         
        HessianProxyFactory hpf = new HessianProxyFactory(); 
        ServerClient ServerClient = null; 
        try { 
            ServerClient = (ServerClient) hpf.create(ServerClient.class, url); 
        } catch (MalformedURLException e) { 
            e.printStackTrace(); 
        } 
        response = ServerClient.TxnSyncAudit(SyncAuditRequestBo); 
        return response; 
         
    }

 

四、返回报文的解析:

1.返回JSON格式的报文

package org.fanqi.operateJSONUtil; 
 
import java.util.HashMap; 
import java.util.Iterator; 
import java.util.Map; 
import org.json.JSONObject; 
 
public class AnalysisJSON { 
    /* 
     * 解析JSON报文,JSON中不嵌套JSON 
     */ 
    public Map analysisJSON1(String responseResult) { 
        //去掉{} 
        responseResult = responseResult.substring(1, responseResult.length()-1); 
        String[] strs = responseResult.split(","); 
        @SuppressWarnings("rawtypes") 
        Map<String, Object> map = new HashMap<String, Object>(); 
        for(int i=0;i<strs.length;i++){ 
            String[] str = strs[i].split(":"); 
            map.put(str[0], str[1]); 
        } 
        return map; 
    } 
    /* 
     * 解析JSON报文,JSON中不嵌套JSON 
     */ 
    public Map analysisJSON2(String responseResult) { 
         
        JSONObject json = new JSONObject(responseResult); 
        Iterator<String> it = json.keys(); 
        HashMap<String, Object> map = new HashMap<String, Object>(); 
        while(it.hasNext()){ 
            String key = it.next(); 
            Object value = json.getString(key); 
            map.put(key, value); 
        } 
        return map; 
    } 
    /* 
     * 解析JSON报文,JSON中含有JSON数组 
     */ 
    public Map analysisJSONs(String responseResult) { 
         
        JSONObject json = new JSONObject(responseResult); 
        Iterator<String> it = json.keys(); 
        HashMap<String, Object> map = new HashMap<String, Object>(); 
        while(it.hasNext()){ 
            String key = it.next(); 
            Object value = json.getJSONArray(key); 
            map.put(key, value); 
        } 
        return map; 
    }         
     
}

 

发布评论

分享到:

IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

乐观锁和悲观锁--简记详解
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。