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);//先把类型设置为stringdata[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("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"), "登录成功");}}

  执行测试,结果如下:

  

转载于:https://www.cnblogs.com/helenMemery/p/9167191.html

testng使用DataProvider+Excel实现DDT相关推荐

  1. testNG的DataProvider返回IteratorObject[]的妙用

    TestNG中使用DataProvider有如下好处: 1. 在执行用例的时候,dataProvider迭代中的每组数据都是作为一个用例执行,实现数据驱动执行 2. 在测试数据有规律的情况下,免去了在 ...

  2. python+requests+excel+unittest+ddt接口自动化数据驱动并生成html报告

    1.环境准备: python3.6 requests xlrd openpyxl HTMLTestRunner_api 2.目前实现的功能: 封装requests请求方法 在excel填写接口请求参数 ...

  3. python+requests+excel+unittest+ddt接口自动化数据驱动并生成html报告(二)

    可以参考 python+requests接口自动化完整项目设计源码(一)https://www.cnblogs.com/111testing/p/9612671.html 原文地址https://ww ...

  4. TestNG参数– DataProvider和XML

    TestNG methods can have arguments also. There are two ways we can inject method arguments: TestNG方法也 ...

  5. python excel取数 生成报告_python+requests+excel+unittest+ddt接口自动化数据驱动并生成html报告(二)...

    可以参考 python+requests接口自动化完整项目设计源码(一)https://www.cnblogs.com/111testing/p/9612671.html

  6. selenium使用TestNG实现DDT

    TestNG和excel文件实现DDT(Data Driver Test) 准备一个test-data.xlsx文件,并且放到eclipse项目下. 1.准备test_data.xlsx文件 2.利用 ...

  7. testNg自动化,读取excel的数据

    自己写了一个testng执行excel用例的小程序,主要是运行.xlsx的,需要支持xls可以自己扩展,分享一下.下载地址:http://yun.baidu.com/share/link?sharei ...

  8. TestNG中的参数化– DataProvider和TestNG XML(带有示例)

    测试自动化,或所谓的自动化测试,并不像听起来那样容易. 必须考虑所有可能的用户交互的所有排列和组合,并且在此基础上,您将必须创建测试脚本以通过多种浏览器和OS组合来验证Web应用程序. 这就是参数化在 ...

  9. TestNG:在一个测试类中使用@DataProvider依次运行测试

    许多Java开发人员和自动化测试工程师在他们的工作中都使用TestNG作为测试框架. 我也不例外. 这是一个显而易见的选择,因为TestNG提供了非常强大的工具集,使处理各种测试变得更加容易. 为了证 ...

最新文章

  1. 中学再不学编程就晚了?MIT、JHU研究:程序员大脑思考代码的机制不对劲
  2. 剑指Offer:剪绳子(动态规划、贪婪算法)
  3. Ajax(form表单文件上传、请求头之contentType、Ajax传递json数据、Ajax文件上传)
  4. 一些不常用的代码汇总(不断更新)
  5. 《深入理解C++11:C++ 11新特性解析与应用》——1.3 C++11特性的分类
  6. SQL Server 查询性能优化——覆盖索引(二)
  7. Request-reply messaging
  8. 【Vue.js源码解析 二】-- 虚拟 DOM
  9. 苹果x屏幕出现一条绿线_部分用户反映苹果 iPhone 12 屏幕出现划痕 - iPhone 12
  10. Android 系统性能优化(53)---功耗优化battery-historian V2.0的数据获取
  11. bugly android8.1加固,2020-09-27 Bugly Android热更新使用指南
  12. 电脑画图和计算机不见了,电脑中自带的Window画图工具不见了如何恢复
  13. vue3.0中使用百度离线地图
  14. dwg如何转换成pdf格式?
  15. 基于opencv和pillow实现人脸识别系统(附demo)
  16. Shell脚本之正则表达式以及文本编辑器
  17. 怎么查看一段时间的计算机ip,如何查看电脑中使用过的历史IP地址
  18. 处理器_深度学习及 KPU 基础知识
  19. AMQ9208: Error on receive from host,AMQ9999: Channel ‘ACLIENT‘ to host ‘192.168.159.1‘ ended abnorma
  20. php教程制作相册实例,H5和CSS3制作一个相册的代码实例

热门文章

  1. Java常用设计模式————原型模式(二)之深拷贝与浅拷贝
  2. c++ 访问控制与封装
  3. mysql和维信公众号_mysql实用指南
  4. dbm和mysql使用场景_mysql基本用法总结
  5. npm install packagename 安装失败的解决办法
  6. 非root用户组启动sftp_如何在 Debian 10 中配置 Chroot 环境的 SFTP 服务 | Linux 中国
  7. oracle将字符串转化为blob,oracle String类型转换成blob类型插入
  8. html代码在线分析,网站html代码解析
  9. PyCharm 设置背景图片
  10. 判断三角形是否是直角三角形