zoukankan      html  css  js  c++  java
  • Java版接口自动化--初稿

    一、接口参数的获取:

    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);
        }
        
    }
    View Code

    可能需要加验签: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();
        }
    }
    View Code

    二、请求报文的组装:

    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;     
        }
    }
    View Code

    三、请求方法:方式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 + "
    ");
                }
                return sb.toString();
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }        
            return null;        
        }
    View Code

    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 + "
    ");
                    }
                    return sb.toString();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;        
        }
    View Code

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

    /*
     * 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;
        }
    View Code

    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;
            
        }
    View Code

    四、返回报文的解析:

    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;
        }        
        
    }
    View Code
  • 相关阅读:
    StackExchange.Redis 使用 (一)
    委托的一个小问题
    MemberwishClone学习
    类的内容学习
    类的学习
    构造函数学习
    C# 重新筑基-从头开始
    C语言入门:结构体+文件的应用
    C语言入门:结构体的概要
    C语言入门:指针的概要
  • 原文地址:https://www.cnblogs.com/fqfanqi/p/6185325.html
Copyright © 2011-2022 走看看