JAVA接口自动化框架4——使用Excel传递参数

一、在本地创建xlsx表格,表格中填入接口需要传递的参数

JAVA接口自动化框架4——使用Excel传递参数_第1张图片

二、编写ReadExcel类遍历excel,sheet参数

package com.qa.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

/**
 * 遍历excel,sheet参数
 * @author jff
 * @date 2018年10月11日
 * @version V1.0.1
 */
public class ReadExcel {
    //遍历excel,sheet参数
     public static Object[][] readExData(String filePath,int sheetId) throws IOException{
         File file = new File(filePath);
         FileInputStream fis = new FileInputStream(file);
         
         HSSFWorkbook wb = new HSSFWorkbook(fis);
         HSSFSheet sh = wb.getSheetAt(sheetId);
         int numberrow = sh.getPhysicalNumberOfRows();
         int numbercell = sh.getRow(0).getLastCellNum();
         
         Object[][] dttData = new Object[numberrow][numbercell];
         for(int i=0;i

三、配置文件properties中填加host和存放Excel的地址

JAVA接口自动化框架4——使用Excel传递参数_第2张图片

四、BaseApi类作为基类前面的文章已经介绍过了

package com.qa.base;
import java.io.IOException;
import java.util.Map;
import java.util.Properties;

import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.util.EntityUtils;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import com.alibaba.fastjson.JSONObject;
import com.qa.base.Constants;
import com.qa.parameters.Manager;
import com.qa.restclient.RestClient;
import com.qa.utils.PropertiesUtils;
import com.qa.utils.fatjson.FastjsonUtils;

/**
 * 该类可以当成所有测试类的模板基类,其他需要测试的类继承该类;可以读取配置文件
 * session,token等需要全局使用的均需要在此类中进行定义;若测试需要登录可在本类进行登录
 * @author jff
 * @date 2018年9月25日
 * @version V1.0.1
 */
public abstract class BaseApi {
    protected String hostManager;
    protected String testCaseExcel;
    protected static String sessionKey;
    
    @BeforeClass
    public void setUp() {
        hostManager=PropertiesUtils.getConfigValue("HOSTMANAGER");
        testCaseExcel=PropertiesUtils.getConfigValue("TESTCASEDATE");
        
    }
    
    //由于登陆后后面的接口需要使用它的返回值,所以提取到此类,以后的测试类只需继承,添加依赖即可
    /*@Test
    public void loginManagerAppTestd() throws ClientProtocolException, IOException{

        String url=hostManager+"/parkingManager/applogin/loginIn";
        
        Manager manager = new Manager("yanczapp","8ddcff3a80f4189ca1c9d4d902c3c909","0571001");
        Map map=FastjsonUtils.toMap(FastjsonUtils.toJson(manager));
        System.out.println("my out**********"+map);
        CloseableHttpResponse closeableHttpResponse = RestClient.postForm(url, map, null);
        
        //断言状态码是不是200
        int statusCode = closeableHttpResponse.getStatusLine().getStatusCode();
        Assert.assertEquals(statusCode,Constants.RESPNSE_STATUS_CODE_200,"status code is not 200");
    
        //断言响应json内容中name和job是不是期待结果
        String responseString = EntityUtils.toString(closeableHttpResponse.getEntity());
        System.out.println("my out**********"+responseString);
        JSONObject res = FastjsonUtils.toJsonObject(responseString);
        sessionKey = FastjsonUtils.toMap(res.getString("data")).get("session_key");
        System.out.println("data**********: " + res.getString("message"));
        System.out.println("data**********: " + sessionKey);
        
        String account=FastjsonUtils.toMap(res.getString("data")).get("account");
        Assert.assertEquals(account,"yanczapp" ,"account code is not error");
    }*/
}

 

五、编写测试类

package manager;

import java.io.IOException;
import java.util.Map;

import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.util.EntityUtils;
import org.apache.log4j.Logger;
import org.apache.poi.util.NullLogger;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.qa.base.BaseApi;
import com.qa.base.Constants;

import com.qa.parameters.Manager;
import com.qa.restclient.RestClient;
import com.qa.utils.ReadExcel;
import com.qa.utils.fatjson.FastjsonUtils;

public class LoginByExcel extends BaseApi{
    private final static Logger Log=Logger.getLogger(LoginManagerAppTest2.class);
    
    @DataProvider(name = "post")
    public Object[][] post() throws IOException {

       //Excel表格中的sheet页来填写数字参数,第一页下标为0
        return ReadExcel.readExData(testCaseExcel,1);
 
    }

    @Test(dataProvider = "post")

    //此处传递的参数必须和Excel表中的顺序一致,不然会报错
    public void login(String loginUrl,String partnerCode,String account, String loginPwd) throws Exception {
        //使用构造函数将传入的用户名密码初始化成登录请求参数
        Manager loginParameters = new Manager(account,loginPwd,partnerCode);
        Map map=FastjsonUtils.toMap(FastjsonUtils.toJson(loginParameters));
        Log.info("my out**********"+map);
        //发送登录请求
        
        CloseableHttpResponse closeableHttpResponse = RestClient.postForm(hostManager+loginUrl, map, null);
        //从返回结果中获取状态码
        int statusCode = RestClient.getStatusCode(closeableHttpResponse);
        Assert.assertEquals(statusCode,Constants.RESPNSE_STATUS_CODE_200,"status code is not 200");
        //断言响应json内容中name和job是不是期待结果
        String responseString = EntityUtils.toString(closeableHttpResponse.getEntity());
        System.out.println("my out**********"+responseString);
        JSONObject res  = FastjsonUtils.toJsonObject(responseString);
        sessionKey = FastjsonUtils.toMap(res.getString("data")).get("session_key");
        System.out.println("data**********: " + res.getString("message"));
        System.out.println("data**********: " + sessionKey);
        
        String partnerType=FastjsonUtils.toMap(res.getString("data")).get("partnerType");
        Assert.assertEquals(partnerType,"路内" ,"partnerType is not 路内");
    }
    
    @BeforeClass
    public void endTest(){
        System.out.print("测试结束");
    }

}


 

运行成功

JAVA接口自动化框架4——使用Excel传递参数_第3张图片

六、引入的包

     

        
            com.relevantcodes
            extentreports
            2.41.2
        
        
            com.aventstack
            extentreports
            3.0.6
        
        
        
            com.vimalselvam
            testng-extentsreport
            1.3.1
        
    
        
            org.apache.poi
            poi-ooxml
            3.16
        

如果使用上述的HSSF,你可以是使用XSSF再试一下,有的office或者wps版本不同也会不同的

你可能感兴趣的:(JAVA接口自动化测试框架,读取Excel表格,java接口自动化参数化,接口自动化框架)