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文件读取)的更多相关文章

  1. 记录python接口自动化测试--把操作excel文件的方法封装起来(第五目)

    前面补充了如何来操作excel文件,这次把如何获取excel文件的sheet对象.行数.单元格数据的方法进行封装,方便后面调用 handle_excel.py# coding:utf-8 import ...

  2. 自动化测试如何解析excel文件?

    前言 自动化测试中我们存放数据无非是使用文件或者数据库,那么文件可以是csv,xlsx,xml,甚至是txt文件,通常excel文件往往是我们的首选,无论是编写测试用例还是存放测试数据,excel都是 ...

  3. 如何让excel文件读取变得更简单

    今天给大家安利一款excel文件导入神器,easyexcel,官方地址:(https://github.com/alibaba/easyexcel). 在官网文档中有介绍了其性能. 从上面的性能测试可 ...

  4. C#操作Excel文件(读取Excel,写入Excel)

    看到论坛里面不断有人提问关于读取excel和导入excel的相关问题.闲暇时间将我所知道的对excel的操作加以总结,如今共享大家,希望给大家可以给大家带了一定的帮助.另外我们还要注意一些简单的问题1 ...

  5. C#实现从EXCEL文件读取数据到SqlServer数据库

    用第三方组件:NPOI组件实现 先去官网:http://npoi.codeplex.com/下载需要引入dll(可以选择.net2.0或者.net4.0的dll),然后在网站中添加引用.使用 NPOI ...

  6. python接口自动化21-下载excel文件(Content-Type:octets/stream)

    前言 Content-Type类型为octets/stream,这种一般是文件类型了,比如有时候需要导出excel数据,下载excel这种场景如何用python来实现呢? 抓下载接口 1.下载的场景如 ...

  7. 接口自动化测试unittest+request+excel(一)

    注: 学习python自动化测试,需要先学习python基础,主要还是多敲代码,多联系,孰能生巧,你也会是一名合格的程序员 python基础学习: http://c.biancheng.net/pyt ...

  8. 关于Npoi+excel文件读取,修改文件内容的处理方式

    因最近有需求场景,实现对文件的读写操作,又不单独生成新的文件,对于源文件的修改,做了一个简单实现,如下↓ // 要操作的excel文件路径 string fileName = Server.MapPa ...

  9. Vue项目中导入excel文件读取成js数组

    1. 安装组件 cnpm install xlsx --save 2. 代码 <template> <span> <input class="input-fil ...

随机推荐

  1. Objective-C路成魔【11-多态性、动态类型和动态绑定】

    郝萌主倾心贡献.尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠.支持郝萌主.捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 多态这个其 ...

  2. linux软与硬接线连接

    1.Linux链接概念 Linux链接分两种.一种被称为硬链接(Hard Link),还有一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接. [硬连接] 硬连接指通过索 ...

  3. SQL Server 2008性能故障排查(四)——TempDB

    原文:SQL Server 2008性能故障排查(四)--TempDB 接着上一章:I/O TempDB: TempDB是一个全局数据库,存储内部和用户对象还有零食表.对象.在SQLServer操作过 ...

  4. SQL Server 日期相关

    原文:SQL Server 日期相关 原帖出处:http://blog.csdn.net/dba_huangzj/article/details/7657979 对于开发人员来说,日期处理或许简单,或 ...

  5. js Array 阵列扩展方法

    //又来了 Array.prototype.unique = function() { this.sort(); var re=[this[0]]; for(var i = 1; i < thi ...

  6. Docker系列之(一):10分钟玩转Docker(转)

    1.前言 进入云计算的时代,各大云提供商AWS,阿里云纷纷推出针对Docker的服务,现在Docker是十分火爆,那么Docker到底是什麽,让我们来体验一下. 2.Docker是什麽 Docker是 ...

  7. linux下一个php未找到php型材php.ini解决方案

    编译并安装自己php经常会遇到这样的问题.我找不到php.ini.对于根据下面的方法可以解决例: 首先是需要解释.假设你php它被编译并安装,那么默认是没有php.ini的,你必须得去复制源代码包内. ...

  8. 它们的定义TextView使之具有跑马灯的效果

    一.引入问题 使用通用textview快乐效应,焦点事件不启动滚动,button目前的焦点事件,但丑,因此,需要定制TextView 天生焦点 个textview FocusedTextView.ja ...

  9. 第五十九届冠军(使用C++设计一个类不能被继承)

    称号:使用C++设计一个类不能被继承. 分析:这是Adobe 公司2007 的笔试题最新校园招聘. 应聘者的C++基本功底外,还能考察反应能力,是一道非常好的题目. 分析:C++中父类的构造函数会调用 ...

  10. Javascript设计模式与开发实践读书笔记(1-3章)

    第一章 面向对象的Javascript 1.1 多态在面向对象设计中的应用   多态最根本好处在于,你不必询问对象“你是什么类型”而后根据得到的答案调用对象的某个行为--你只管调用行为就好,剩下的一切 ...