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

  执行测试,结果如下:

  

testng使用DataProvider+Excel实现DDT的更多相关文章

  1. java结合testng,利用excel做数据源的数据驱动实例

    数据驱动部分,是自动化测试常用部分,也是参数化设计的重要环节,前面分享了,mysql.yaml做数据源,那么再来分享下excel做数据驱动 思路: 先用POI读取excel.解析读取数据,返回list ...

  2. TestNG参数化测试之Excel读取数据

    1.新建Excel文档,准备好测试数据 在当前工程的resources目录下,新建文件名为testdata的Excel文档 打开Excel,将当前sheet重命名为calculator,构造num1. ...

  3. TestNG 中DataProvider 的用法

    使用DataProvider提供数据有两种形式: 第一种:一种是在测试代码和测试数据放在同一个类中: 第二种:把所有的数据提供都单独写在一个类里面,当测试数据比较多时,这种方法利于维护. DataPr ...

  4. selenium从入门到应用 - 7,testNG的DataProvider

    本系列所有代码 https://github.com/zhangting85/simpleWebtest 本文将介绍一个Java+TestNG+Maven+Selenium的web自动化测试脚本环境下 ...

  5. TestNG中DataProvider的用法二:简单的数据驱动

    @DataProvider标记的方法除了可以返回数组外,还可以返回一个Iterator,这样的好处是不用把所有的测试数据都加载到内存中,而是需要的时候就读一条. 下面的例子就使用了Iterator,然 ...

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

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

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

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

  8. testNG中dataprovider使用的两种方式

    testNG的参数化测试有两种方式:xml和dataprovider.个人更喜欢dataprovider,因为我喜欢把测试数据放在数据库里. 一.返回类型是Iterator<Object[]&g ...

  9. TestNG中DataProvider的用法一

    目录 为什么要使用DataProvider DataProvider的常规用法 带Method参数的DataProvider 带ITestContext的DataProvider DataProvid ...

随机推荐

  1. javap(反汇编命令)详解

    javap是JDK自带的反汇编器,可以查看java编译器为我们生成的字节码.通过它,我们可以对照源代码和字节码,从而了解很多编译器内部的工作. 语法: javap [ 命令选项 ] class. . ...

  2. 【CF891C】Envy 离线+最小生成树

    [CF891C]Envy 题意:给你一个图,边有边权,每次询问给你一堆边,问你是否存在一个原图的最小生成树包含给出的所有边.n,m,q<=100000 题解:思路很好的题. 首先有一个非常重要的 ...

  3. Thinkphp框架下设置session的过期时间

    打开项目中的配置文件,添加session的过期配置,如下: 'SESSION_OPTIONS' => array( 'name' => 'BJYSESSION', //设置session名 ...

  4. SDWebImage第三方库使用注意的一些问题

    1.利用"UIImageView+WebCache.h"加载图片数据 例如: UIImage *placeHolderImg = [UIImage imageNamed:@&quo ...

  5. OpenCV Create Circular Mask 圆形遮罩

    在OpenCV中,比较常见的是矩形遮罩CvRect,没有专门提供圆形的mask,那么我们只能自己写一个来模拟圆形mask的函数,需要提供的参数为原图的大小,以及圆形mask的圆心位置和半径即可,返回一 ...

  6. Centos 密钥登录系统

    有两台机器一直放在IDC 机房一直没怎么正式使用,今天突然说一个项目要上线,于是赶紧配置好环境,做一些权限控制,之前一直使用的是密码登录,现在正式使用公开了,密码登录方式肯定不安全,于是按照之前的方法 ...

  7. [实战]MVC5+EF6+MySql企业网盘实战(1)

    写在前面 不久前,一个朋友让帮他弄一个单位的企业网盘的管理站点,一直忙,最近抽出了点时间,也想琢磨琢磨mvc,ef,mysql,这算是边琢磨,边实践吧. 系列文章 [实战]MVC5+EF6+MySql ...

  8. TFS二次开发09——查看文件历史(QueryHistory)

    这篇文章给大家展示怎样获取一个文件的历史版本,内容很简单,直接上代码了. string tpcURL = "http://127.0.0.1:8080/"; TfsTeamProj ...

  9. JPA的锁机制

    JPA 各种实体锁模式的区别 字数2084 阅读304 评论0 喜欢4 为了能够同步访问实体,JPA提供了2种锁机制.这两种机制都可以避免两个事务中的其中一个,在不知情的情况下覆盖另一个事务的数据. ...

  10. Flask 学习篇一: 搭建Python虚拟环境,安装flask,并设计RESTful API。

    前些日子,老师给我看了这本书,于是便开始了Flask的学习 GitHub上的大神,于是我也在GitHub上建了一个Flask的项目. 有兴趣可以看看: https://github.com/Silen ...