Java + maven + httpclient + testng + poi实现接口自动化

一、maven中引入httpclient、testng、poi依赖包

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.lemon</groupId>
  <artifactId>interfaceDemo</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>interfaceDemo</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpclient</artifactId>
      <version>4.5.2</version>
    </dependency>
    <dependency>
            <groupId>org.testng</groupId>
         <artifactId>testng</artifactId>
             <version>6.8.8</version>
         <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.15</version>
    </dependency>
  </dependencies>
</project>
View Code

二、准备测试数据

三、poi读取Excel文件

package com.lemon;

import java.io.File;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Row.MissingCellPolicy;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;

public class ExcelUtil {

    public static Object[][] read(int startRow,int endRow,int startCell,int endCell){
        
        Object [][] datas = new Object [endRow-startRow+1][endCell-startCell+1];
        try {
            //获取WorkBook对象
            Workbook workbook = WorkbookFactory.create(new File("src/test/java/test.xlsx"));
            //获取sheet,0表示第一个
            Sheet sheet = workbook.getSheetAt(0);
            for(int i = startRow; i <= endRow;i++){
                //取出每一行
                Row row = sheet.getRow(i-1);
                for (int j = startRow; j <= endCell;j++){
                    //取出每一列,先指定不会返回空对象,防止单元格为空时,报空指针异常
                    Cell cell = row.getCell(j-1,MissingCellPolicy.CREATE_NULL_AS_BLANK);
                    //把每列当字符串处理,并取出字符串的值
                    cell.setCellType(CellType.STRING);
                    String value = cell.getStringCellValue();
                    datas[i-startRow][j-startCell] = value;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } 
        return datas;
    }
    //测试
    public static void main(String[] args) throws Exception {
        Object[][] datas = read(2, 7, 2, 5);
        for(Object[] objects:datas){
            for(Object object:objects){
                System.out.print("【"+object+"】");
            }
            System.out.println();
        }
    }
}
View Code

四、编写接口自动化脚本

package com.lemon;

import java.io.UnsupportedEncodingException;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class Demo {
    
    @Test(dataProvider="datas")
    public static void test(String url,String mobileCode,String userID,String type,String response) throws Exception {
        
        System.out.println("url:"+url+",mobileCode:"+mobileCode+",userID:"+userID+",type:"+type);
        if("post".equalsIgnoreCase(type)){
            String resp = doPost(url,mobileCode,userID);
            Assert.assertEquals(resp, response);
        }else {
            String resp = doGet(url,mobileCode,userID);
            Assert.assertEquals(resp, response);
        }
    }
    
    @DataProvider
    public static Object [][] datas(){
        
        /* Object [][] datas = {
        {"http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo","15578581","","post"},
        {"http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo","18381485","","get"},
        {"http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo","15084258","","post"}
        }; */
        
        Object[][] datas = ExcelUtil.read(2, 5, 2, 6);
        return datas;
    }
    
    /*
     * 实现get类型接口的调用
     */
    private static String doGet(String url,String mobileCode,String userID) throws Exception {
        //准备参数
        List<BasicNameValuePair> params = new ArrayList<BasicNameValuePair>();
        BasicNameValuePair mobile = new BasicNameValuePair("mobileCode",mobileCode);
        BasicNameValuePair ID = new BasicNameValuePair("userID",userID);
        params.add(mobile);
        params.add(ID);
        String paramsString = URLEncodedUtils.format(params, "UTF-8");
        url += "?" + paramsString;
        //创建get对象
        HttpGet get = new HttpGet(url);
        //创建Httpclient对象
        CloseableHttpClient httpclient = HttpClients.createDefault();
        //提交请求
        CloseableHttpResponse response = null;
        try {
            response = httpclient.execute(get);
            //获取状态码及响应数据
            int status = response.getStatusLine().getStatusCode();
            System.out.println("状态码为:" + status);
            String result = EntityUtils.toString(response.getEntity());
            System.out.println("响应数据为:" + result);
            //创建Pattern对象 
            Pattern pat = Pattern.compile(">(.*)</"); 
            //创建matcher对象 
            Matcher m = pat.matcher(result); 
            if (m.find( )){
                return m.group(1);
            } 
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            if (response != null) {
                response.close();
            }
            //相当于关闭浏览器
            httpclient.close();
        }
        return null; 
    }
    /*
     * 实现post类型接口的调用
     */
    private static String doPost(String url,String mobileCode,String userID) throws Exception {
        //创建post对象
        HttpPost post = new HttpPost(url);
        //准备参数
        List<BasicNameValuePair> params = new ArrayList<BasicNameValuePair>();
        BasicNameValuePair mobile = new BasicNameValuePair("mobileCode",mobileCode);
        BasicNameValuePair ID = new BasicNameValuePair("userID",userID);
        params.add(mobile);
        params.add(ID);
        //将参数封装到请求体当中
        post.setEntity(new UrlEncodedFormEntity(params));
        //创建httpclient对象发送请求
        CloseableHttpClient httpclient = HttpClients.createDefault();
        CloseableHttpResponse response = null;
        try {
            
            response = httpclient.execute(post);
            //获取状态码及响应数据
            int status = response.getStatusLine().getStatusCode();
            System.out.println("状态码为:" + status);
            String result = EntityUtils.toString(response.getEntity());
            System.out.println("响应数据为:" + result);
            // 创建 Pattern对象 
            Pattern pat = Pattern.compile(">(.*)</"); 
            // 现在创建 matcher对象 
            Matcher m = pat.matcher(result); 
            if (m.find( )) { 
               return m.group(1);
            } 
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }finally {
            if (response != null) {
                response.close();
            }
            //相当于关闭浏览器
            httpclient.close();
        }
        return null;
    }
}
View Code

 五、执行测试套

 六:执行结果

原文地址:https://www.cnblogs.com/zhufeng123/p/14054201.html