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);//先把类型设置为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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/570743.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux安装Oracle12C 过程及遇到的问题

一、环境介绍 1、系统环境&#xff1a;CentOS7.1 Oracle版本&#xff1a;12C 12.1.0 二、安装过程 1、安装过程文档见百度云上的文档 链接&#xff1a;https://pan.baidu.com/s/1nvd07NF 密码&#xff1a;mey9 2、安装完后登录数据库 su oracle source ~/.bash_profiel…

sqlserver服务启动后停止,传递给数据库 'master' 中的日志扫描操作的日志扫描号无效...

电脑异常重启&#xff0c;导致SqlServer服务启动后&#xff0c;自动停止&#xff0c;在【计算机管理】-【事件查看器】-【windows日志】中进行查看系统错误日志&#xff0c;在【应用程序】下发现可能的错误信息有以下两条&#xff1a; 1、错误&#xff1a;传递给数据库 master …

云监控 Ganglia 安装步骤 (含python module)

文章转载自&#xff1a;https://my.oschina.net/duangr/blog/181585 &#xff0c;仅用于个人学习、收藏&#xff0c;转载请注明原作者地址。 前言 最近在研究云监控的相关工具,感觉ganglia颇有亮点,能从一个集群整体的角度来展现数据. 但是安装过程稍过复杂,相关依赖稍多…

container-with-most-water(最大蓄水问题)

题目描述&#xff1a; Given n non-negative integers a1 , a2 , ..., an , where each represents a point at coordinate (i, ai ). n vertical lines are drawn such that the two endpoints of line i is at (i, ai ) and (i, 0). Find two lines, which together with x-a…

使用sqoop从Oracle或mysql抽取数据到HDFS遇到的报错及解决

一、参考文档&#xff1a; 1、https://www.rittmanmead.com/blog/2014/03/using-sqoop-for-loading-oracle-data-into-hadoop-on-the-bigdatalite-vm/ 2、http://www.cnblogs.com/bjtu-leefon/archive/2013/06/28/3160549.html 二、使用脚本 ----sqoop import zdsd 使用注…

POJ1426-Find The Multiple(DFS)

给出一个整数n&#xff0c;(1 < n < 200)。求出任意一个它的倍数m&#xff0c;要求m必须只由十进制的0或1组成。 #include <iostream>using namespace std;int N,flag;void DFS(int m,long long n) {if(m19) return;if(flag) return;if(n%N0){flag1;cout<<n&…

Spark集群,多个版本Python/Python Package管理

文章转载自&#xff1a;http://blog.csdn.net/gongbi917/article/details/52369025 仅用于个人学习备忘收藏&#xff0c;转载请注明原文地址 进年来&#xff0c;越来越多的数据科学家、分析人员、数据工程师运用Python语言进行数据分析和机器学习。Spark在0.7版本开始支持Pyth…

【网络流24题】【LOJ6224】深海机器人问题(最大费用最大流)

problem 给定一个n*m的网格&#xff0c;每条边上有一个权值给定每个机器人的出发位置和目标位置求权值最大solution 拆边&#xff0c;每条边拆成2条&#xff0c;第一条容量1&#xff0c;费用c[i]&#xff0c;第二条容量inf,费用0&#xff1b;建超级源汇&#xff08;s到每个出发…

Oracle创建表空间、用户、分配权限、导出、导入数据

文章转载&#xff1a;https://segmentfault.com/a/1190000006704150 仅用于个人学习、收藏自查&#xff0c;谢谢原作者。 以系统管理员登录&#xff0c;命令&#xff1a;sqlplus / as sysdba #首先需要 su - oracle 进入到oracle用户下 一、分为四步 /第1步&#xff1a;创…

函数简介

一、函数 函数就是一个功能&#xff0c;一个方法&#xff0c;简化代码。#一个函数只做一件事#重复的代码就是低级的#实现同样的功能&#xff0c;代码越少越好 函数必须得调用才能执行。 1、函数的简单介绍&#xff0c;如下 1 def say(name):# 函数&#xff0c;形参&#xff0c;…

ORA-65096: 公用用户名或角色名无效引发的思考

解决方式&#xff1a; alter session set "_ORACLE_SCRIPT"true; alter session set containerPDBORCL;原因&#xff1a;查官方文档得知“试图创建一个通用用户&#xff0c;必需要用C##或者c##开头”&#xff0c;这时候心里会有疑问&#xff0c;什么是common user&am…

VS封装给Unity使用的DLL

首先: 注意两点,一个是选择3.5,Unity最高支持到3.5 然后要选择第二个FrameWork类库 第一个会报错 然后导入Unity dll 我Unity安装在F:\AppLicationWorkSpace\Unity5.6.2\Unity\Editor\Data\Managed 用哪个导入哪个 然后生成 Ok 把生成的DLL放到Unity里就可以使用了 继续写…

ftp与sftp及sftp和scp的区别

FTP VS SFTP FTP是文件传输协议。在网站上&#xff0c;如果你想把文件和人共享&#xff0c;最便捷的方式莫过于把文件上传到FTP服务器上&#xff0c;其他人通过FTP客户端程序来下载所需要的文件。 FTP进行文件传输需要通过端口进行。一般所需端口为&#xff1a; 1. 控制链路—T…

Kong API Gateway部署手册----安装

文章转载&#xff1a;http://www.nxops.cn/post/97.html

Linux系统下面crontab选择默认编译器

crontab修改默认编辑器crontab默认编辑器为nano.修改crontab默认编辑器为vi或者其他的编辑器。法一&#xff1a;export EDITOR"/usr/bin/vim" ; crontab -e法二&#xff1a;&#xff08;一般我用这方法&#xff0c;简单方便&#xff0c;选3&#xff09;执行命令&…

hawq state 报错: the database is down, but Ambari shows all hawq services as being

此问题官方有给出解决方案&#xff1a;https://discuss.pivotal.io/hc/en-us/articles/221826748-Pivotal-HDB-state-indicates-the-database-is-down-but-Ambari-shows-all-Pivotal-HDB-services-as-being-up Environment ProductVersionPivotal HDB (HAWQ)2.x Symptom Piv…

OpenLayer学习之矢量地图

一、首先了解下矢量地图和栅格地图 矢量图使用直线和曲线来描述图形&#xff0c;这些图形的元素是一些点、线、矩形、多边形、圆和弧线等等&#xff0c;矢量地图放大和缩小不会失真&#xff08;图片你要是放大一定程度明显可以看出一个一个小格→栅格地图的缺点&#xff09;。为…

Extra Data after Last Expected Column:hawq建外表load数据报错

背景&#xff1a;使用sqoop import 才oracle抽数据入HDFS后&#xff0c;通过pxf建立hawq外表&#xff0c;查询数据报错 解决思路&#xff1a;1、从报错上看应该是数据源分割后字段数比目标表字段多&#xff0c;且pgadmin3里报错还出现源数据异常的一条记录&#xff0c;去源头o…

上下文信息 RpcContext

上下文中存放的是当前调用过程中所需的环境信息。所有配置信息都将转换为 URL 的参数&#xff0c;参见 schema 配置参考手册 中的对应URL参数一列。 RpcContext 是一个 ThreadLocal 的临时状态记录器&#xff0c;当接收到 RPC 请求&#xff0c;或发起 RPC 请求时&#xff0c;Rp…

new malloc

https://blog.csdn.net/happyxieqiang/article/details/50775847 0. 属性 new/delete是C关键字&#xff0c;需要编译器支持。malloc/free是库函数&#xff0c;需要头文件支持。 1. 参数 使用new操作符申请内存分配时无须指定内存块的大小&#xff0c;编译器会根据类…