Appium 自动化Excel 数据读写

创建新工程

打开Eclipse新建一个工程


Appium 自动化Excel 数据读写_第1张图片


Appium 自动化Excel 数据读写_第2张图片

点下一步

输入名称


Appium 自动化Excel 数据读写_第3张图片


点完成

新建一个目录用来存在第三方库文件


Appium 自动化Excel 数据读写_第4张图片


选择目录


Appium 自动化Excel 数据读写_第5张图片


点下一步

输入目录名称,这里我输入的是lib

>


Appium 自动化Excel 数据读写_第6张图片


点完成


Appium 自动化Excel 数据读写_第7张图片


我这里用的POI的jar包读写Excel,你也可以用jxl的jar包读写Excel

如果是poi的就需要以下这些jar文件


现在将jar类加载到工程中,后面编写代码才能正确调用



Appium 自动化Excel 数据读写_第8张图片



Appium 自动化Excel 数据读写_第9张图片

现在新建一个包,开始编写代码


Appium 自动化Excel 数据读写_第10张图片



Appium 自动化Excel 数据读写_第11张图片


点完成

现在再在刚才的包中新建一个类,用来编写测试代码


Appium 自动化Excel 数据读写_第12张图片


按下图框中填写


Appium 自动化Excel 数据读写_第13张图片


点完成

这时看到如下画面



Appium 自动化Excel 数据读写_第14张图片

这个是正式编写代码的画面了

编写读写方法

现在我们在src目录下新建一个excel文件,等会用java代码来读写该文件

现在新建一个如下的Sheet


Appium 自动化Excel 数据读写_第15张图片

在编写代码之前我们先来整理下平常我们要读取任意一个单元格的顺序

1:启动Excel进程

2:打开指定的Excel

3:切换到指定的Sheet页

4:找到对应的行号

5:找到对应的列号

6:读取具体数据

在了解了上面的流程后,我们按这流程用代码来实现

现在我们编写如下类

publicstaticvoidread()throwsIOException {

//设置Excel文件路径

String FileName_TestData=System.getProperty("user.dir")+"\\src\\AutoExcel.xlsx";

FileInputStream ExcelFile;

//实例化文件流,相当于打开Excel进程

try{

ExcelFile =newFileInputStream(FileName_TestData);

//实例化ExcelWBook

XSSFWorkbookExcelWBook =newXSSFWorkbook(ExcelFile);

//获取指定的Sheet页

XSSFSheet Sheet=ExcelWBook.getSheet("Test");

//如果当前Excel文件中没有Test的Sheet页此时Sheet对象中将是空值,为了避免运行时因为异常中止

//所以有必要在执行下一步操作之前先判断Sheet是否为空,为空时就打印错误信息

if(Sheet!=null) {

//因为我们需要遍历整个Sheet所有行,所以这里需要先计算整个Sheet有多少行, 之后用循环遍历的方法

intlastrow=Sheet.getLastRowNum();

for(inti=1;i<=lastrow;i++) {

//读取每行的第一列值当做TS_ID

//toString()是将取到的值统一转换成字符

//trim()去掉首尾的空格符

StringTS_ID=Sheet.getRow(i).getCell(0).getStringCellValue().toString().trim();

//读取每行的第二列值当做CaseName

StringCaseName=Sheet.getRow(i).getCell(1).getStringCellValue().toString().trim();

//读取每行的第三列值当做操作方法

StringOpertion=Sheet.getRow(i).getCell(2).getStringCellValue().toString().trim();

//读取每行的第四列值当做测试数据

StringData=Sheet.getRow(i).getCell(3).getStringCellValue().toString().trim();

System.out.println("测试用例ID==="+TS_ID+"测试名称是===="+CaseName+"操作方法是=="+Opertion

+"测试数据是=="+Data);

}

}

else{

System.out.println

("在"+FileName_TestData+"没有找到Sheet名称为Test");

}

}catch(FileNotFoundException e) {

//TODOAuto-generated catch block

e.printStackTrace();

}

}


最后我们在Main方法中调用

publicstaticvoidmain(String[] args)throwsIOException {

//TODOAuto-generated method stub

read() ;

}

执行之后可以看到控制台将所有数据全打印出来了


Appium 自动化Excel 数据读写_第16张图片

上面是读,那如果是写要如何操作呢

还是先来理清平素是如何往Excel文件中写数据的

1:启动Excel进程

2:打开指定的Excel

3:切换到指定的Sheet页

4:找到对应的行号

5:找到对应的列号

6:在指定的单元格中填写数据

7:保存退出

这里就是第6步不同,另外为了让数据生效多了第七步

现在编写一个方法专门来往Excel写入数据

publicstaticvoidTestWrite()throwsIOException{

//设置Excel文件路径

StringFileName_TestData=System.getProperty("user.dir")+"\\src\\AutoExcel.xlsx";

FileInputStream ExcelFile;

//实例化文件流,相当于打开Excel进程

try{

ExcelFile =newFileInputStream(FileName_TestData);

//实例化ExcelWBook

XSSFWorkbookExcelWBook =newXSSFWorkbook(ExcelFile);

//获取指定的Sheet页

XSSFSheet Sheet=ExcelWBook.getSheet("TestWrite");

//如果当前Excel文件中没有Test的Sheet页此时Sheet对象中将是空值,为了避免运行时因为异常中止

//所以有必要在执行下一步操作之前先判断Sheet是否为空,为空时就打印错误信息

//这里需要考量一个问题,如果Sheet名称还没有创建时就需要先创建对应Sheet ,所以代码将要分

//成两部分,一部分是Sheet存在,一部分是Sheet不存在的情况

if(Sheet!=null) {

//此区块代表Sheet存在的情况

//获取最后一行行号,以下代码功能是在最后一行增加记录

intlastrow=Sheet.getLastRowNum();

for(inti=0;i<=lastrow;i++) {

XSSFRow Row=Sheet.getRow(i);

//注意如果指定的行号还没有数据是空白的,Row拿到的值就是null,

if(Row!=null) {

//找到指定的单元格

XSSFCellcell=Row.getCell(0);

//先检验单元格的是否存在

if(cell!=null) {

//如果单元格存在,此时cell就不为空

cell.setCellValue("测试用例ID");

}

else{

//运行到此区块代码该单元格还不存在,需要新建一个单元格

Row.createCell(0).setCellValue("测试用例ID");

}

}

else{

XSSFRowRow1=Sheet.createRow(i);

XSSFCellcell=Row1.getCell(0);

//先检验单元格的是否存在

if(cell!=null) {

//如果单元格存在,此时cell就不为空

cell.setCellValue("测试用例ID");

}

else{

//运行到此区块代码该单元格还不存在,需要新建一个单元格

Row1.createCell(0).setCellValue("测试用例ID");

}

}

}

}

else{

//运行此区块时代表对应Sheet不存在

XSSFSheetSheet1=ExcelWBook.createSheet("TestWrite");

intlastrow=Sheet1.getLastRowNum();

for(inti=0;i<=lastrow;i++) {

XSSFRow Row=Sheet1.getRow(i);

//注意如果指定的行号还没有数据是空白的,Row拿到的值就是null,

if(Row!=null) {

//找到指定的单元格

XSSFCellcell=Row.getCell(0);

//先检验单元格的是否存在

if(cell!=null) {

//如果单元格存在,此时cell就不为空

cell.setCellValue("测试用例ID");

}

else{

//运行到此区块代码该单元格还不存在,需要新建一个单元格

Row.createCell(0).setCellValue("测试用例ID");

}

}

else{

XSSFRowRow1=Sheet1.createRow(i);

XSSFCellcell=Row1.getCell(0);

//先检验单元格的是否存在

if(cell!=null) {

//如果单元格存在,此时cell就不为空

cell.setCellValue("测试用例ID");

}

else{

//运行到此区块代码该单元格还不存在,需要新建一个单元格

Row1.createCell(0).setCellValue("测试用例ID");

}

}

}

}

//将数据以文件流的形式写入Excel中

FileOutputStream fileOut =newFileOutputStream(FileName_TestData);

ExcelWBook.write(fileOut);

fileOut.close();

//关闭进程

ExcelFile.close();

}catch(FileNotFoundException e) {

//TODOAuto-generated catch block

e.printStackTrace();

}

}

之后在Main方法中调用该方法

publicstaticvoidmain(String[] args)throwsIOException {

TestWrite();

}



Appium 自动化Excel 数据读写_第17张图片

执行之后打开Excel文件


Appium 自动化Excel 数据读写_第18张图片



此时已成功将数据写入到单元格中了

拆解封装Excel操作方法

接下来我们要想另一个问题,我们每读/写一个数据就需要写这么多代码吗,有没有办法将部分代码抽取出来呢

现在我们学着如何将提取部分代码封装成个别的方法

比如我们可以之么分

一个方法专门来打开Excel

一个方法专门来读取数据

一个方法专门来写入数据

一个方法专门来用关闭Excel进程

现在来写第一个方法

为了便于管理,我们再新增一个类




Appium 自动化Excel 数据读写_第19张图片



Appium 自动化Excel 数据读写_第20张图片


输入类名

ExcelUtil

点完成

packagecom.test.excel;

importjava.io.FileInputStream;

importjava.io.FileNotFoundException;

importjava.io.FileOutputStream;

importjava.io.IOException;

importorg.apache.poi.xssf.usermodel.XSSFCell;

importorg.apache.poi.xssf.usermodel.XSSFRow;

importorg.apache.poi.xssf.usermodel.XSSFSheet;

importorg.apache.poi.xssf.usermodel.XSSFWorkbook;

publicclassExcelUtil {

/**

*@paramargs

*/

publicstaticvoidmain(String[]

args) {

//TODOAuto-generated

method stub

StringPath=System.getProperty("user.dir")+"\\src\\AutoExcel.xlsx";

StringSheetName="Test";

intRowNum=1;

intColNum=2;

String text=getCellData(Path,SheetName,RowNum,ColNum);

System.out.println("读取的数据是"+text);

WriteData(Path,"TestWrite",3,5,"自动化测试");

}

/**

*

*@paramPath

*@paramSheetName

*@return

*@throwsIOException

*/

publicstaticintgetLastrow(StringPath,StringSheetName)throwsIOException {

intlastrow=0;

//打开Excel

FileInputStreamOpenExcel=OpenExcel(Path);

XSSFWorkbookExcelWBook=ExcelWBook( OpenExcel);

//获取Sheet

XSSFSheetExcelWSheet=WriteSheet(ExcelWBook,SheetName);

lastrow=ExcelWSheet.getLastRowNum();

OpenExcel.close();

returnlastrow;

}

/**

*打开Excel文件

*@paramPath文件路径

*@return

*/

publicstaticFileInputStream

OpenExcel(String Path){

//打开Excel进程

FileInputStreamExcelFile=null;

try{

ExcelFile=newFileInputStream(Path);

}catch(FileNotFoundException e) {

//TODOAuto-generated

catch block

e.printStackTrace();

}

returnExcelFile;

}

/**

*

*@paramExcelFile

*@return

*/

publicstaticXSSFWorkbook ExcelWBook(FileInputStreamExcelFile){

XSSFWorkbookExcelWBook=null;

try{

ExcelWBook=newXSSFWorkbook(ExcelFile);

}catch(IOException e) {

//TODOAuto-generated

catch block

e.printStackTrace();

}

returnExcelWBook;

}

publicstaticXSSFSheetGetSheet(XSSFWorkbook ExcelWBook,StringSheetName) {

XSSFSheetExcelWSheet=null;

try{

ExcelWSheet= ExcelWBook.getSheet(SheetName);

if(ExcelWSheet==null) {

System.out.println("没有获取到对应的Sheet名称"+SheetName+"请检查Sheet名称是否正确");

}

}catch(Exception e) {

//TODOAuto-generated

catch block

e.printStackTrace();

}

returnExcelWSheet;

}

/**

*

*@paramExcelWBook

*@paramSheetName

*@return

*/

publicstaticXSSFSheet

WriteSheet(XSSFWorkbook ExcelWBook,String SheetName) {

XSSFSheetExcelWSheet=null;

try{

ExcelWSheet= ExcelWBook.getSheet(SheetName);

if(ExcelWSheet==null) {

ExcelWSheet=ExcelWBook.createSheet(SheetName);

}

}catch(Exception e) {

//TODOAuto-generated

catch block

e.printStackTrace();

}

returnExcelWSheet;

}

/**

*返回指定单元格的数据

*@paramPath

*@paramSheetName

*@paramRowNum

*@paramColNum

*@return

*/

publicstaticString

getCellData(String Path,String SheetName,intRowNum,intColNum) {

//打开Excel

FileInputStreamOpenExcel=OpenExcel(Path);

XSSFWorkbookExcelWBook=ExcelWBook( OpenExcel);

//获取Sheet

XSSFSheetExcelWSheet=WriteSheet(ExcelWBook,SheetName);

//获取行号

XSSFRow Row=WriteRow(ExcelWSheet,RowNum);

XSSFCellCell;

StringCellData;

try{

//获取单元格的对象

Cell = Row.getCell(ColNum);

if(Cell!=null) {

//取出单元格的值

CellData= Cell.getStringCellValue();

}

else{

//如果 单元格为空返回"";

CellData="";

}

}catch(Exception e){

return"";

}

returnCellData;

}

publicstaticvoidWriteData(String Path,String SheetName,intRowNum,intColNum,String

Data) {

//先获取行对象

try{

//打开Excel

FileInputStreamOpenExcel=OpenExcel(Path);

XSSFWorkbookExcelWBook=ExcelWBook( OpenExcel);

//获取Sheet

XSSFSheetExcelWSheet=WriteSheet(ExcelWBook,SheetName);

//获取行号

XSSFRowRow=WriteRow(ExcelWSheet, RowNum);

//获取列号

XSSFCellCell=WriteCell(Row,ColNum);

//写入数据

Cell.setCellValue(Data);

//保存数据到Excel

FileOutputStream fileOut =newFileOutputStream(Path);

ExcelWBook.write(fileOut);

fileOut.flush();

fileOut.close();

}catch(Exception e) {

System.out.println ("写入操作异常信息是"+e.getMessage());

}

}

/**

*返回Row对象

*@paramExcelWSheet

*@paramRowNum

*@return

*/

publicstaticXSSFRow WriteRow(XSSFSheet ExcelWSheet,intRowNum) {

XSSFRow Row=null;

Row= ExcelWSheet.getRow(RowNum);

if(Row==null){

Row=ExcelWSheet.createRow(RowNum);

}

returnRow;

}

/**

*返回Cell对象

*@paramRow

*@paramColNum

*@return

*/

publicstaticXSSFCell WriteCell(XSSFRow Row,intColNum) {

XSSFCellCell =null;

Cell= Row.getCell(ColNum);

if(Cell==null){

Cell=Row.createCell(ColNum);

}

returnCell;

}

}


Appium 自动化Excel 数据读写_第21张图片


再打开TestWrite Sheet确认 是否有写入自动化测试



Appium 自动化Excel 数据读写_第22张图片


成功写入

如果我们想遍历整个Sheet的所有数据行该如何操作呢

继续加入如下方法

publicstaticvoidreadall() {

String Path=System.getProperty("user.dir")+"\\src\\AutoExcel.xlsx";

String SheetName="Test";

try{

introws=getLastrow(Path,SheetName);

for(inti=0;i<=rows;i++) {

String text=getCellData(Path,SheetName,i,3);

String text1=getCellData(Path,SheetName,i,3);

System.out.println("text=="+text+"text1=="+text1);

}

}catch(IOException e) {

//TODOAuto-generated catch block

e.printStackTrace();

}

}

之后在Main中调用该方法


Appium 自动化Excel 数据读写_第23张图片


如果想在当前行号后新增一条记录要如何操作呢

这里也是要先读取最后一行记录

写入如下代码即可实现每运行一次就在最后一行增加一条记录,此操作可以应用于测试报告的记录

publicstaticvoidWriteNext()throwsIOException {

String Path=System.getProperty("user.dir")+"\\src\\AutoExcel.xlsx";

introws=getLastrow(Path,"TestWrite");

WriteData(Path,"TestWrite",rows+1,5,"自动化测试");

}


Appium 自动化Excel 数据读写_第24张图片

你可能感兴趣的:(Appium 自动化Excel 数据读写)