testng使用DataProvider+Excel實現DDT Excel+DDT數據驅動實例

  DDT,即數據驅動測試 Data Driver Test,我曾經記錄了一篇關於python的DDT框架(Excel+DDT數據驅動實例),那麼java中的DDT是怎麼樣的呢?在java中,能夠用testng的DataProvider和Excel實現。html

  首先建一個文檔TestData.xlsx,裏面內容以下:java

  

  而後寫一個讀excel的公共類,代碼以下:python

/**
 * @author Helen 
 * @date 2018年6月5日  
 */
package common;

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

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.xssf.usermodel.XSSFSheet;  
import org.apache.poi.xssf.usermodel.XSSFWorkbook; 

/**
 * 描述:excel事件處理
 */
public class MyExcel {
/*讀取excel文件中的數據,並生成數組*/
    @SuppressWarnings("deprecation")
    public Object[][] readExcel(String filePath,String sheetName) throws IOException {
        BaseData bdata = new BaseData();
        
        File file = new File(bdata.getFilePath(filePath));//獲取文件
        FileInputStream fileInputStream = new FileInputStream(file);//讀數據
        
        XSSFWorkbook workbook = new XSSFWorkbook(fileInputStream);
        XSSFSheet sheet = workbook.getSheet(sheetName);//讀取指定標籤頁的數據
        int rowNum = sheet.getPhysicalNumberOfRows();//獲取行數(獲取的是物理行數,也就是不包括那些空行(隔行)的狀況)
        int columNum = sheet.getRow(0).getPhysicalNumberOfCells();//獲取列數
        
        Object[][]    data = new Object[rowNum-1][columNum];//由於第一行做爲字段名,不須要記錄,因此只有[rowNum-1]行
        for(int i=1;i<rowNum;i++) {//從第二行開始取值
            for (int h = 0; h < columNum; h++) {
                sheet.getRow(i).getCell(h).setCellType(Cell.CELL_TYPE_STRING);//先把類型設置爲string
                data[i-1][h] = sheet.getRow(i).getCell(h).getStringCellValue();//填充數組
            }
        }
        workbook.close();
        return data;
    }

}

  excel的支持還須要在pom.xml加入以下內容apache

        <!--加入對excel的讀寫支持-->
        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.17</version>
        </dependency>

  其次,寫一個數據源公共類(數據源也能夠直接寫在測試類中,若是寫在測試類中就不用標名數據源所在class),代碼以下:json

  

/**
 * @author Helen 
 * @date 2018年6月11日  
 */
package jinengxia_apiTest;

import common.MyExcel;
import java.io.IOException;
import org.testng.annotations.DataProvider;

/**
 * 描述:接口測試的數據源
 */
public class myApiTestData {
    MyExcel myExcel = new MyExcel();

    @DataProvider(name = "loginData")
    public Object[][] getLoginData() throws IOException {
        return myExcel.readExcel("src/test/java/testFile/TestData.xlsx","login");
    }
}

  最後調用數據源,代碼以下:api

/**
 * @author Helen 
 * @date 2018年6月5日  
 */
package jinengxia_apiTest;

import static org.testng.Assert.assertEquals;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

import common.MyExcel;
import net.sf.json.JSONObject;

/**
 * 描述:用戶受權相關接口
 */
public class UserAuthorization {
    CloseableHttpClient httpCilent = HttpClients.createDefault();
    HttpResponse httpResponse;
    MyExcel myExcel = new MyExcel();

    @Test(description = "用戶登陸",dataProvider="loginData",dataProviderClass=myApiTestData.class)
    public void login(String username,String password) throws URISyntaxException, ClientProtocolException, IOException {
        HttpUriRequest httpUriRequest = RequestBuilder.post().setUri(new URI("http://api.**.***.com/**"))
                .addParameter("username", username).addParameter("password", password).build();
        HttpClientContext localContext = HttpClientContext.create();// 建立本地HTTP上下文,用於獲取請求頭cookies等內容
        httpResponse = httpCilent.execute(httpUriRequest, localContext);
        String strResult = EntityUtils.toString(httpResponse.getEntity());// 得到返回的結果
        JSONObject jsonObject = JSONObject.fromObject(strResult);
        assertEquals(jsonObject.get("message"), "登陸成功");
    }

}

  執行測試,結果以下:數組

  

相關文章
相關標籤/搜索