HttpClient +Testng(2)使用testng的DataProvicer来进行数据驱动
来源:互联网 发布:二更网络 编辑:程序博客网 时间:2024/04/29 10:03
在FirstTest.java 文件中,我们可看到请求URL、请求参数,这些都是属于测试数据。这里我们使用testng中自带的@DataProvider注解来做数据驱动,数据源文件可以是EXCEL,XML,甚至可以是TXT文本。这里我们使用EXCEL数据源。
1、大概流程
每个测试运行前,会先通过@DataProvider的方法来读取EXCEL中数据,该注解的方法会返回一个Object[] []。然后带@Test的测试方法,如果希望从这个 DataProvider 的接收数据,则需要标识获取数据源的dataProvider的名称,也就是这个注解的名字。那么对应的DataProvider会把读取的数据传给该test方法
借用该文档中的一个图来更清楚的说明这个流程
2、创建一个Excel表格
在目录main下新建一个目录TestData,并在该目录下新建一个excel表格,直接命名为LoginTest。然后打开该文档,修改sheet页名称为login.之后把上面http请求URL、请求参数都放到excel表格中。
这里必须把表格第一行用来命名所有参数的名称。测试数据是从第二行开始的。
如下图所示:
3、创建一个读取EXCEL表格的类
这里我们直接在test->java下创建一个包,命名为utl
之后在utl中创建一个类ExcelReader.java
里面的内容如下所示:
package utl;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFRow;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.poifs.filesystem.POIFSFileSystem;import java.io.File;import java.io.FileInputStream;import java.text.DecimalFormat;import java.util.ArrayList;import java.util.List;public class ExcelReader { /** * 读取excel文件,excel中不含合并单元格 * @param path * @param sheetName * excel表格要注意每行的最后一格不能为空 * 如果要为空,则需要手动随便填写字符,然后再按del键删除才可以 * 目前没找到这个解决办法,后续会继续查找解决办法 * @return */ public static String[][] getExpectationData(String path, String sheetName) { try { File file = new File(path); FileInputStream fis = new FileInputStream(file); POIFSFileSystem POIStream = new POIFSFileSystem(fis); HSSFWorkbook workBook = new HSSFWorkbook(POIStream); //得到工作表 HSSFSheet sheet1 = workBook.getSheet(sheetName); //得到总行数 int rowNum = sheet1.getLastRowNum(); List<String[]> results = new ArrayList<String[]>(); for (int i=1;i<=rowNum;i++){ //当前行 HSSFRow row = sheet1.getRow(i); int colNum = row.getLastCellNum(); String[] data = new String[colNum]; //当前行所有列 for (int j = 0; j < colNum; j++) { try { data[j] = getCellValue(row.getCell(j)); }catch (NullPointerException e){ //如果单元格为空的时候,则用这个来处理 data[j] = ""; } } //把data[]数组的数据存在list<[]>中 results.add(data); } fis.close(); String[][] returnArray = new String[results.size()][rowNum]; for (int i = 0; i < returnArray.length; i++) { returnArray[i] = (String[]) results.get(i); } return returnArray; }catch (Exception e){ return null; } } /** * 对Excel的各个单元格的格式进行判断并转换 */ public static String getCellValue(HSSFCell cell) { String cellValue = ""; DecimalFormat df = new DecimalFormat("#"); switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_STRING: cellValue =cell.getRichStringCellValue().getString().trim(); break; case HSSFCell.CELL_TYPE_NUMERIC: cellValue =df.format(cell.getNumericCellValue()).toString(); break; case HSSFCell.CELL_TYPE_BOOLEAN: cellValue = String.valueOf(cell.getBooleanCellValue()).trim(); break; case HSSFCell.CELL_TYPE_FORMULA: cellValue =cell.getCellFormula(); break; default: cellValue = ""; } return cellValue; }}
4、在类FirstTest.java中创建一个含有DataProvider注解的方法
修改类FirstTest.java,在该类中添加一个方法,如下面内容:
@DataProvider(name = "LoginData")public Object[][] login() { // 测试数据准备 String file = "." + File.separator + "TestData" + File.separator + "LoginTest.xls"; Object[][] records ; records = ExcelReader.getExpectationData(file, "login"); return records ;}
5、修改类FirstTest.java中的Test方法
Test方法内容如下所示:@Test(dataProvider = "LoginData")public void loginJDTest(String caseDescription,String loginURL, String uuid,String eid,String fp,String _t, String loginType,String loginname,String nloginpwd, String chkRememberMe, String authcode,String pubKey,String sa_token,String seqSid) { System.out.println("=====" + caseDescription + "====="); //创建一个httppost请求 httppost = new HttpPost(loginURL); //创建Post请求参数 List<NameValuePair> formparams1 = new ArrayList<NameValuePair>(); formparams1.add(new BasicNameValuePair("uuid",uuid)); formparams1.add(new BasicNameValuePair("eid",eid)); formparams1.add(new BasicNameValuePair("fp",fp)); formparams1.add(new BasicNameValuePair("_t",_t)); formparams1.add(new BasicNameValuePair("loginType",loginType)); formparams1.add(new BasicNameValuePair("loginname",loginname)); formparams1.add(new BasicNameValuePair("nloginpwd",nloginpwd)); formparams1.add(new BasicNameValuePair("chkRememberMe",chkRememberMe)); formparams1.add(new BasicNameValuePair("authcode",authcode)); formparams1.add(new BasicNameValuePair("pubKey",pubKey)); formparams1.add(new BasicNameValuePair("sa_token",sa_token)); formparams1.add(new BasicNameValuePair("seqSid",seqSid)); try { httppost.setEntity(new UrlEncodedFormEntity(formparams1,"UTF-8")); response = httpClient.execute(httppost); entity = response.getEntity(); // 在这里可以用Jsoup之类的工具对返回结果进行分析,以判断创建是否成功 postResult = EntityUtils.toString(entity, "UTF-8"); System.out.println("查看登录接口请求返回的结果:" + postResult); } catch (Exception e) { e.printStackTrace(); } httppost.releaseConnection();}
上面可看出,loginJDTest方法带了若干个参数,这里定义的参数要注意:
参数的个数必须和之前创建excel表格中的一样,如excel表格里面有14列参数,则这里也必须对应14个参数。而且定义参数的顺序也必须和excel表格里面参数的顺序保持一样。
6、运行程序
再次运行程序,运行结束后查看日志,一切正常,如下图所示
1 0
- HttpClient +Testng(2)使用testng的DataProvicer来进行数据驱动
- 数据驱动测试一:使用TestNG进行数据驱动
- testng使用excel进行数据驱动代码参照
- testng 数据驱动方法
- TestNG数据驱动
- TestNG数据驱动测试
- 数据驱动-testng配置
- 数据驱动测试二:使用TestNG和CSV文件进行数据驱动
- 数据驱动测试三:使用TestNG、Apache POI和Excel文件进行数据驱动
- TestNG如何用excel来做数据驱动
- 基于testNG数据驱动测试
- HttpClient +Testng(1)进行接口测试入门
- 使用testng-xslt改写testng的测试报告
- UI自动化测试系列之TestNG-TestNg的数据驱动一
- Testng之使用@DataProvider注解做数据驱动
- Selenium2+TestNG的使用
- testng的使用
- TestNG DataProvider的使用
- ITK 转换成VTK ImageData 后用QT 显示的错误记录
- ionic2 使用自定义icon
- js中的 || 与 && 运算符
- struts中3种情况通配符的使用方法 及 动态方法调用
- java 可迭代与可比较的实现
- HttpClient +Testng(2)使用testng的DataProvicer来进行数据驱动
- HTML-CSS设置中文字体
- 获取组件iFrame中的对象(ie和其他浏览器的不同之处)
- LeetCode:144. Binary Tree Preorder Traversal
- 主键索引和唯一索引的区别
- 剑指Offer面试题20顺时针打印矩阵,面试题21包含min函数的栈
- 如何向Github README.md中添加图片,多人亲测,简单明了
- Vivado下创建基于AXI-Lite的用户IP核
- CSS3:linear-gradient切角画册