接口自动化测试:参数化封装(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;
	}

}
时间: 2024-11-07 06:33:55

接口自动化测试:参数化封装(excel文件读取)的相关文章

接口自动化测试 unittest+request+excel(五)

封装操作Excel方法,后续功能进行直接调用 #!/usr/bin/env python3 # -*-coding:utf-8-*- # __author__: hunter import xlrd class HandleExcel: """封装操作Excel的方法""" def __init__(self, file='D:/hunter_/interfaceTest/interface/tool/demo2.xlsx', sheet_id=

接口自动化测试 unittest+request+excel(八)

完善接口自动化测试框架,加入日志模块 #!/usr/bin/env python3 # -*-coding:utf-8-*- # __author__: hunter import logging import os import time class Logger: def __init__(self, loggername): # 创建一个logger self.logger = logging.getLogger(loggername) self.logger.setLevel(loggi

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

看到论坛里面不断有人提问关于读取excel和导入excel的相关问题.闲暇时间将我所知道的对excel的操作加以总结,如今共享大家,希望给大家可以给大家带了一定的帮助.另外我们还要注意一些简单的问题1.excel文件仅仅能存储65535行数据,假设你的数据大于65535行,那么就须要将excel切割存放了.2.关于乱码,这主要是字符设置问题. 1.载入Excel(读取excel内容)返回值是一个DataSet //载入Excel public static DataSet LoadDataFro

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

用第三方组件:NPOI组件实现 先去官网:http://npoi.codeplex.com/下载需要引入dll(可以选择.net2.0或者.net4.0的dll),然后在网站中添加引用.使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写. 先创建一个实体类: [Table("Customer") ] public class Customer { [Key] public int Id { get; set; } public

采用OleDB读取EXCEL文件 读取数字后,字符串无法读取

很多人采用OleDB读取EXCEL文件的时候会发现,当一列数据以数字开头的时候,后面的字符串无法读取,今天就给大家分享一下解决此问题的小窍门. 1.把列标题当做数据来读取(HDR=NO设置把第一行当做数据而不是表头来处理):  string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + fileName + ";" +                     &

接口自动化测试 unittest+request+excel(踩‘坑’)

通过运行主函数,返回的参数,报json解析错误 正常的返回参数,应该如图 造成这个原因的是: python从excel中解析出来的数据类型不是字典,是字符串,所以无法传递给requests当做请求参数 需用用json.loads()转成字典格式,然后进行传参 对python从Excel中解析出来的数据类型进行测试一波 #!/usr/bin/env python3 # -*-coding:utf-8-*- # __author__: hunter import xlrd import json i

python接口自动化测试(十)-写入excel(xlswriter)

 一.安装xlrd模块: 1.mac下打开终端输入命令: pip install XlsxWriter 2.验证安装是否成功: 在mac终端输入 python  进入python环境 然后输入 import xlswriter 不报错说明模块安装成功 二.常用方法: 1.创建excel文件 # 创建文件 workbook = xlsxwriter.Workbook("new_excel.xlsx")  2.创建sheet # 创建sheet worksheet = workbook.a

C# .Net :Excel NPOI导入导出操作教程之将Excel文件读取并写到数据库表,示例分享

using (FileStream fileReader = File.OpenRead(@"C:\Users\Administrator\Desktop\112.xls"))        {            //创建工作簿对象接收文件流(Excel信息)            IWorkbook workbook = new HSSFWorkbook(fileReader);            //工作簿共有几个表            //int count = wor

R语言学习笔记之excel文件读取

在win32位的系统下,RODBC包内的函数是可以直接运行的,但在win64位的系统则不支持! 1.读取外部文件read.table()---csv,txt,excel 最基本函数是read.table(),先介绍read.table(),然后再介绍专门用来读csv的read.csv(). Description Reads a file in table format and creates a data frame from it, with cases corresponding to l