接口自动化测试:参数化封装(excel文件读取)
log4j.properties文件配置
log4j.rootLogger = DEBUG,stdout,F log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{1}:%L - %m%n log4j.appender.F = org.apache.log4j.DailyRollingFileAppender
log4j.appender.F.File = logs/debug.log
log4j.appender.F.Append = true
log4j.appender.F.Threshold = DEBUG
log4j.appender.F.layout = org.apache.log4j.PatternLayout
log4j.appender.F.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n #log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
#log4j.appender.D.File = logs/error.log
#log4j.appender.D.Append = true
#log4j.appender.D.Threshold = ERROR
#log4j.appender.D.layout = org.apache.log4j.PatternLayout
#log4j.appender.D.layout.ConversionPattern =%-d{yyyy-MM-dd HH\:mm\:ss} [ %t\:%r ] - [ %p ] %m%n
获取异常信息内容工具类
import java.io.PrintWriter;
import java.io.StringWriter; public class ExceptionMessage {
public static String getTrace(Throwable t) {
StringWriter stringWriter= new StringWriter();
PrintWriter writer= new PrintWriter(stringWriter);
t.printStackTrace(writer);
StringBuffer buffer= stringWriter.getBuffer();
return buffer.toString();
}
}
读取EXCEL文件
package com.mazhan3.fileReader; import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException; import org.apache.log4j.Logger;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; import com.mazhan3.utils.ExceptionMessage; public class ExcelReader {
//标记两种excel文档的后缀名
private static final String EXTENSION_XLS = "xls";
private static final String EXTENSION_XLSX = "xlsx";
Logger log = Logger.getLogger(ExcelReader.class);
private Workbook wb = null;
/**
* 构造时加载excel文件
* @param filePath
*/
public ExcelReader(String filePath){
File file = new File(filePath);
String absolutePath = file.getAbsolutePath();
FileInputStream in = null;
try {
in = new FileInputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
log.info(ExceptionMessage.getTrace(e));
log.error("文件没有发现");
}
getWorkBook(absolutePath, in);
} /**
*
* @param absolutePath
* @param in
*/
private void getWorkBook(String absolutePath, FileInputStream in) {
if(absolutePath.endsWith(EXTENSION_XLS)){
try {
wb = new HSSFWorkbook(in);
} catch (IOException e) {
log.info(ExceptionMessage.getTrace(e));
}
}else if(absolutePath.endsWith(EXTENSION_XLSX)){
try {
wb = new XSSFWorkbook(in);
} catch (IOException e) {
log.info(ExceptionMessage.getTrace(e));
}
}else{
log.error("EXCEL文件格式错误");
}
} /**
* 默认读取sheet0页
* 传入的行号与列号直接传入excel表格中的即可,更符合使用习惯,方法中已进行了处理
* 即如果想要获取A1的值,那么行号传1,列号传1即可。
* @param rowNum
* @param cellNum
* @return String类型的excel表格中存储的值
*/
public String getValue(int rowNum,int cellNum){
String value = getValue(rowNum,cellNum,0);
return value;
} /**
* 传入的行号与列号直接传入excel表格中的即可,更符合使用习惯,方法中已进行了处理
* 即如果想要获取A1的值,那么行号传1,列号传1即可。
* @param rowNum
* @param cellNum
* @param sheetNum
* @return String类型的excel表格中存储的值
*/
public String getValue(int rowNum,int cellNum,int sheetNum){
rowNum--;
cellNum--;
Row row = getRow(rowNum, sheetNum);
Cell cell = getCell(cellNum, row);
//return cell.getStringCellValue();
//如果选择了上面一行的方法,当输出一个数字时则
//会抛出java.lang.IllegalStateException: Cannot get a text value from a numeric cell return cell.toString();
} /**
* 拿到sheet页中的行
* @param rowNum
* @param sheetNum
* @return Row
*/
private Row getRow(int rowNum, int sheetNum) {
Sheet sheet = wb.getSheetAt(sheetNum);
//注意这里的行号,如果你有1,2,3,4四行,那么第一行的行号为0,最后一行的行号为3
int firstRowNum = sheet.getFirstRowNum();
int lastRowNum = sheet.getLastRowNum(); Row row = null; if(rowNum >= firstRowNum && rowNum <= lastRowNum){
row = sheet.getRow(rowNum);
}else{
log.error("行号输入错误,在excel文件sheet页内容的范围之外");
throw new RuntimeException("行号错误");
}
return row;
} /**
* 拿到行中的列
* @param cellNum
* @param row
* @return Cell
*/
private Cell getCell(int cellNum, Row row) {
Cell cell = null;
//注意列号,如果你的excel文件中有A,B,C三列,那么第一列号为0,最后一列的列号为3
int firstCellNum = row.getFirstCellNum();
int lastCellNum = row.getLastCellNum();
if(cellNum >= firstCellNum && cellNum < lastCellNum ){
cell = row.getCell(cellNum);
}else{
log.error("列号错误,,在excel文件sheet页内容的范围之外");
throw new RuntimeException("列号错误");
}
return cell;
} }
接口自动化测试:参数化封装(excel文件读取)的更多相关文章
- 记录python接口自动化测试--把操作excel文件的方法封装起来(第五目)
前面补充了如何来操作excel文件,这次把如何获取excel文件的sheet对象.行数.单元格数据的方法进行封装,方便后面调用 handle_excel.py# coding:utf-8 import ...
- 自动化测试如何解析excel文件?
前言 自动化测试中我们存放数据无非是使用文件或者数据库,那么文件可以是csv,xlsx,xml,甚至是txt文件,通常excel文件往往是我们的首选,无论是编写测试用例还是存放测试数据,excel都是 ...
- 如何让excel文件读取变得更简单
今天给大家安利一款excel文件导入神器,easyexcel,官方地址:(https://github.com/alibaba/easyexcel). 在官网文档中有介绍了其性能. 从上面的性能测试可 ...
- C#操作Excel文件(读取Excel,写入Excel)
看到论坛里面不断有人提问关于读取excel和导入excel的相关问题.闲暇时间将我所知道的对excel的操作加以总结,如今共享大家,希望给大家可以给大家带了一定的帮助.另外我们还要注意一些简单的问题1 ...
- C#实现从EXCEL文件读取数据到SqlServer数据库
用第三方组件:NPOI组件实现 先去官网:http://npoi.codeplex.com/下载需要引入dll(可以选择.net2.0或者.net4.0的dll),然后在网站中添加引用.使用 NPOI ...
- python接口自动化21-下载excel文件(Content-Type:octets/stream)
前言 Content-Type类型为octets/stream,这种一般是文件类型了,比如有时候需要导出excel数据,下载excel这种场景如何用python来实现呢? 抓下载接口 1.下载的场景如 ...
- 接口自动化测试unittest+request+excel(一)
注: 学习python自动化测试,需要先学习python基础,主要还是多敲代码,多联系,孰能生巧,你也会是一名合格的程序员 python基础学习: http://c.biancheng.net/pyt ...
- 关于Npoi+excel文件读取,修改文件内容的处理方式
因最近有需求场景,实现对文件的读写操作,又不单独生成新的文件,对于源文件的修改,做了一个简单实现,如下↓ // 要操作的excel文件路径 string fileName = Server.MapPa ...
- Vue项目中导入excel文件读取成js数组
1. 安装组件 cnpm install xlsx --save 2. 代码 <template> <span> <input class="input-fil ...
随机推荐
- FreeMarker整合Spring 3(转)
开发环境: System:Windows WebBrowser:IE6+.Firefox3+ JavaEE Server:tomcat5.0.2.8.tomcat6 IDE:eclipse.MyEcl ...
- linux权限和ntfs知识文件系统权限
左右ntfs权限的问题 文件权限: [-dcbps][u:rwx][g:rwx][a:rwx] 当中: r=4, w=2, x=1, u=owner, g=group, a=all user ...
- Spark第一个研究笔记1一片 - Spark一个简短的引论
该公司推出的在线项目Spark拥有近1随着时间的推移.有效,Spark事实上,优秀的分布式计算平台,以提高生产力. 开始本篇笔记.此前的研究会Spark研究报告共享出来(由于篇幅的限制,它将被划分成制 ...
- C++ Primer 学习笔记_41_STL实践与分析(15)--先来看看算法【下一个】
STL实践与分析 --初窥算法[下] 一.写容器元素的算法 一些算法写入元素值.在使用这些算法写元素时一定要当心.必须.写入输入序列的元素 写入到输入序列的算法本质上是安全的--仅仅会写入与指定输入范 ...
- codeforces Round #259(div2) E解决报告
E. Little Pony and Summer Sun Celebration time limit per test 1 second memory limit per test 256 meg ...
- MVC中的Views下面的视图放到Views文件夹外
实战:把ASP.NET MVC中的Views下面的视图放到Views文件夹外 园子里写的文章的都是把控制器从传统的项目中的Controllers拿出来单独放,但很少几乎没有把视图从Views拿出去 ...
- 连载:面向对象的葵花宝典:思考、技巧与实践(39) - 设计原则 vs 设计模式
它的设计原则,和设计模式,是否该用它? ============================================================================= 在& ...
- hdu 3001 Travelling (TSP问题 )
Travelling Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- opencv-阈值处理
从原理:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/threshold/threshold.html 目标: ...
- 编程算法 - 数丑陋 代码(C)
数丑陋 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 我们把仅仅包括因子2, 3 和 5的数称作丑数. 求按从小到大的顺序的第5个丑数. 能够 ...