数据驱动测试
数据驱动测试的核心是:测试数据与测试脚本分离,实现测试脚本参数化,提高测试脚本的可重用性。在自动化功能测试中如果灵活使用数据源与测试脚本,便能轻松创建与运行成百上千个测试用例。自动化测试框架必须要有与电子表格、文本文件、数据库集成的能力。
TestNG是受JUnit和NUnit测试框架的启发而设计的,但引其中入一些新的功能,使它更强大和更容易使用。(JUnit和NUnit我没用过,不做评价)
Apache POI
Apache POI项目的使命是开发和维护各种基于Office Open XML 标准(OOXML)和微软文档格式的Java api,使用Apache POI,可以方便读写微软EXCEL、word、ppt等文档。
怎么做:
第一步:工具准备
第二步:创建一个登录接口测试用例
第三步:用Excel创建测试数据
第四步:使用Apache POI打开与读取Excel数据
第五步:创建TestNg测试用例并使用Data Provider从Excel读取数据
第六步:根据测试用例名称运行测试
第一步:工具准备
1.OS:win10 家庭中文版
2.JDK:jdk-8u66-windows-x64.exe
3.Eclipse:eclipse-inst-win64.exe
4.TestNG插件
5.HttpClient:httpcomponents-client-4.5.2-bin.zip
6.Apache POI:poi-bin-3.14.zip
第二步:创建一个查询接口测试用例
1.创建一个TestNG类:DataProviderTest
2.引用注释Dataprovider,这个方法会返回对象数组
3.准备两条数据,一条url,一条POST的json参数
4.在@Test下写一个查询测试用例
package testData; import java.io.IOException; import org.apache.http.HttpEntity; import org.apache.http.client.ClientProtocolException; 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.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import org.json.JSONException; import org.json.JSONObject; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; public class DataProviderTest { @DataProvider(name="Authentication") public static Object[][] credentials(){ String p1="http://192.168.1.55:8182/ebe/api/query_server/v1/query"; String pd="{'sqlText':'select * from ts','pageSize':'100','pageNum':'1'}"; return new Object[][] {{p1,pd}}; } @Test(dataProvider="Authentication") public void QuickStart(String p1,String pd) throws Exception { CloseableHttpClient httpclient = HttpClients.createDefault(); try { HttpPost httpPost = new HttpPost(p1); JSONObject jsonParam=new JSONObject(pd); StringEntity entity = new StringEntity(jsonParam.toString(),"utf-8"); entity.setContentEncoding("UTF-8"); entity.setContentType("application/json"); httpPost.setEntity(entity); CloseableHttpResponse response2 = httpclient.execute(httpPost); try { System.out.println(response2.getStatusLine()); HttpEntity entity2 = response2.getEntity(); System.out.println("Response content: " + EntityUtils.toString(entity2)); // do something useful with the response body // and ensure it is fully consumed EntityUtils.consume(entity2); } finally { response2.close(); } } finally { httpclient.close(); } } } |
第三步:用Excel创建测试数据
1.在该项目下新建一个testdata.xlxs文件,并写入内容
测试数据.png
第四步:使用Apache POI打开与读取Excel数据
1.我们需要从Excel中读取测试数据,所以这里就是用Apache POI对Excel进行操作。
package testData; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ExcelUtils { private static XSSFSheet ExcelWSheet; private static XSSFWorkbook ExcelWBook; private static XSSFCell Cell; private static XSSFRow Row; public static Object[][] getTableArray(String FilePath, String SheetName) throws Exception { String[][] tabArray = null; try { FileInputStream ExcelFile = new FileInputStream(FilePath); // Access the required test data sheet ExcelWBook = new XSSFWorkbook(ExcelFile); ExcelWSheet = ExcelWBook.getSheet(SheetName); int startRow = 1; int startCol = 1; int ci,cj; int totalRows = ExcelWSheet.getLastRowNum(); System.out.println(totalRows); // you can write a function as well to get Column count int totalCols = 2; System.out.println(totalCols); tabArray=new String[totalRows][totalCols]; ci=0; for (int i=startRow;i<=totalRows;i++, ci++) { cj=0; for (int j=startCol;j<=totalCols;j++, cj++){ tabArray[ci][cj]=getCellData(i,j); System.out.println(tabArray[ci][cj]); } } } catch (FileNotFoundException e){ System.out.println("Could not read the Excel sheet"); e.printStackTrace(); } catch (IOException e){ System.out.println("Could not read the Excel sheet"); e.printStackTrace(); } return(tabArray); } public static String getCellData(int RowNum, int ColNum) throws Exception { try{ Cell = ExcelWSheet.getRow(RowNum).getCell(ColNum); int dataType = Cell.getCellType(); if (dataType == 3) { return ""; } else{ String CellData = Cell.getStringCellValue(); return CellData; } } catch (Exception e){ System.out.println(e.getMessage()); throw (e); } } } |