测试工具之TestNG使用DataProvider+Excel实现DDT
白羽 2018-12-26 来源 :网络 阅读 631 评论 0

摘要:本文将带你了解测试工具TestNG使用DataProvider+Excel实现DDT,希望本文对大家学测试工具有所帮助。

    本文将带你了解测试工具TestNG使用DataProvider+Excel实现DDT,希望本文对大家学测试工具有所帮助。



   

  DDT,即数据驱动测试   Data Driver Test,我曾经记录了一篇关于python的DDT框架(Excel+DDT数据驱动实例),那么java中的DDT是怎么样的呢?在java中,可以用testng的DataProvider和Excel实现。

  首先建一个文档TestData.xlsx,里面内容如下:

     

  然后写一个读excel的公共类,代码如下:

  /**

  *   @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加入如下内容

  <!--加入对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),代码如下:

  /**

  *   @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");

  }

  }

   

  最后调用数据源,代码如下:

  /**

  *   @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("//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"),   "登录成功");

  }

  }

   



   
                   

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标软件测试之测试工具频道!


本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程