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. Nginx + IIS 配置,实现负载均衡

    当你的Web应用程序访问量大的时候,一台服务器可能会因为压力过大而无法处理所有的请求.此时,可以增加服务器,采用负载均衡来分担所有的请求.关于Nginx的作用,自行百度了解.总之,在Windows平台 ...

  2. hdu3037Saving Beans

    Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission ...

  3. 高效C++规划

    推荐写C++代码风格.看似easy.坚持不易,且写且珍惜! --陈国林 1. 版本号和版本号声明 版本号和版本号文件声明位于头文件和定义文件的开头,主要内容 (1)版本号信息 (2)文件名.标识符.摘 ...

  4. 网络的基本概念TCP, UDP, 单播(Unicast), 多播(多播)(Multicast)

    章相当低级,但相当重要! 我们周围一切差点儿都依赖于把事情抽象成低等级,并在某一点把它详细化,在一些设计概念中.接口层十分清晰而且目标非常集中,应用程序不用考虑操作系统怎样工作,操作系统也不用考虑硬件 ...

  5. git常用命令学习(转)

    一.Bug分支 1,假设如下场景,你正在dev分支工作,突然接到一个修复代号为101的bug的任务时,dev的东西还没不能提交,但是bug需要马上修复. Git提供了一个stash功能,可以把当前工作 ...

  6. 3-08. 栈模拟队列(25)(ZJU_PAT 模拟)

    主题链接:http://pat.zju.edu.cn/contests/ds/3-08 设已知有两个堆栈S1和S2,请用这两个堆栈模拟出一个队列Q. 所谓用堆栈模拟队列,实际上就是通过调用堆栈的下列操 ...

  7. android 防止多次点击提交

    版权声明:本文博客原创文章.博客,未经同意,不得转载.

  8. PHP设计模式——备忘录模式

    声明:本系列博客參考资料<大话设计模式>,作者程杰. 备忘录模式又叫做快照模式或Token模式,在不破坏封闭的前提下.捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对 ...

  9. hdu4770:Lights Against Dudely(回溯 + 修剪)

    称号:hdu4770:Lights Against Dudely 题目大意:相同是n*m的矩阵代表room,房间相同也有脆弱和牢固之分,如今要求要保护脆弱的房间.须要将每一个脆弱的房间都照亮,可是牢固 ...

  10. .NET单元测试艺术(3) - 使用桩对象接触依赖

    List 3.1 抽取一个设计文件系统的类,并调用它 [Test] public bool IsValidLogFileName(string fileName) { FileExtensionMan ...