【appium关键字驱动之四】执行excel用例进阶

一、前言

      通过关键字驱动的第一篇,我们知道,目前的测试结果是每一个步骤的结果,那么可不可以写一个更加直观的,比如说一条用例一个结果呢,如下图:

用例集:

【appium关键字驱动之四】执行excel用例进阶_第1张图片

用例:

二、执行

      设计好excel后,我们来改一下执行excel的方法,如下:

package com.keyword.casestoread;

import io.appium.java_client.android.AndroidDriver;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import com.keyword.lib.Common;

/**
 *  执行excel表的用例
 * @author Administrator
 *
 */
public class ExcelToRead {
	
	public static Logger log = Logger.getLogger(ExcelToRead.class.getName());
	
	public XSSFWorkbook excelwBook;
	public XSSFCell cell;
	public XSSFRow row;
	public String suitResult = "true";
	Common comm = new Common();
	
	public void readExcel(String path,AndroidDriver driver){
		String result = "true";
		String actualValue = null;
		XSSFCell cellactual  = null;
	
		try {
			InputStream excelFile = new FileInputStream(path);
			FileOutputStream fileout = null;
			
			excelwBook = new XSSFWorkbook(excelFile); //得到工作薄对象
			
			// 设置单元格的颜色样式(红色)
			XSSFCellStyle style = excelwBook.createCellStyle();    
			style.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
			style.setFillForegroundColor(IndexedColors.RED.getIndex());
			
			// 设置单元格的颜色样式(白色)
			XSSFCellStyle stylewhite = excelwBook.createCellStyle();    
			stylewhite.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
			stylewhite.setFillForegroundColor(IndexedColors.WHITE.getIndex());
			
			XSSFSheet excelwSheet0 = excelwBook.getSheetAt(0);//获取第一个sheet
			XSSFSheet excelwSheet1 = excelwBook.getSheetAt(1);//获取第二个sheet
			
			int rowLength0 = excelwSheet0.getLastRowNum();//获取第一个sheet的有效行数
			int rowLength1 = excelwSheet1.getLastRowNum();//获取行数
			
			for (int j = 1; j <= rowLength0; j++){ //测试用例执行的遍数
				
				// 获取用例ID
				Cell cellSuiteId0 = excelwSheet0.getRow(j).getCell(0);
				String suiteId0 = cellSuiteId0.getStringCellValue();
				
				// 获取是否需要执行   为yes则执行  为No则不执行
				Cell cellRunMode = excelwSheet0.getRow(j).getCell(2);
				String runMode = cellRunMode.getStringCellValue().toUpperCase();
				
				// 如果需要执行
				if (runMode.trim().equals("YES")){
					log.log(Level.INFO, "开始执行第"+j+"条");
					
					for (int i = 1; i <= rowLength1; i++){
						
						// 获取用例ID
						Cell cellSuiteId1 = excelwSheet1.getRow(i).getCell(0);
						String suiteId1 = cellSuiteId1.getStringCellValue();
						
						// 如果用例页的用例ID和用例集的用例ID一致则执行
						if (suiteId1.trim().equals(suiteId0)){
							// 获取定位方式
							Cell cellMode = excelwSheet1.getRow(i).getCell(3); 
							String mode = cellMode.getStringCellValue();
							
							//获取元素值
							Cell cellElevalue = excelwSheet1.getRow(i).getCell(4);
							String elevalue = cellElevalue.getStringCellValue();
							
							//获取操作方法
							Cell cellOper = excelwSheet1.getRow(i).getCell(5);
							String oper = cellOper.getStringCellValue();
							
							// 获取输入值
							Cell cellValue = excelwSheet1.getRow(i).getCell(6);
							String value = cellValue.getStringCellValue();
							
							//获取预期结果
							Cell cellExpected = excelwSheet1.getRow(i).getCell(7);
							String expected = cellExpected.getStringCellValue();
							
							// 执行用例
							try {
								actualValue = comm.getOpera(mode,elevalue,oper, value,expected,driver);
							} catch (Exception e){
								result = "false";
								suitResult = "false";
								continue;
							}
							
							// 写入用例结果
							row = excelwSheet1.getRow(i);//得到excel表的行
							cell = row.getCell(9);//得到excel指定行的单元格(测试结果)
							
							cellactual = row.getCell(8); //得到excel指定行的单元格(实际结果)
							
							// 如果实际结果不为空且预期结果不为无,则将实际结果写入excel,并用实际结果和预期结果进行比较判断测试是否通过
							if (!(actualValue == null) && !(expected.equals("无"))){
								if (cellactual == null){
									cellactual = row.createCell(8);// 创建单元格
									cellactual.setCellValue(actualValue);// 设定单元格的值
								} else {
									cellactual.setCellValue(actualValue);
								}
								
								if (expected.equals(actualValue)){
									result = "true";
								} else {
									result = "false";
									suitResult = "false";
								}
							}
							
							if (cell == null){
								cell = row.createCell(9);// 创建单元格
								cell.setCellValue(result);// 设定单元格的值
							} else {
								cell.setCellValue(result);
							}
							
							// 如果测试结果不通过,则标红,通过则将背景色变为白色
							if (result.equals("false")){
								cell.setCellStyle(style);
							} else{
								cell.setCellStyle(stylewhite);
							}
						}	
					} // 用例集的结束
					
					// 将测试集结果写入excel
					row = excelwSheet0.getRow(j);
					XSSFCell cellresult = row.getCell(3); //得到excel指定行的单元格(测试集的测试结果)
					if (cellresult == null){
						cellresult = row.createCell(3);// 创建单元格
						cellresult.setCellValue(suitResult);// 设定单元格的值
					} else {
						cellresult.setCellValue(suitResult);
					}
					
					log.log(Level.INFO, "第"+j+"条用例执行完成");
					
				} else {
					log.log(Level.INFO, "没有要执行的用例");
					break;
				}				
			}
			// 将测试结果写入excel  并关闭
			fileout = new FileOutputStream(path);
			excelwBook.write(fileout);
			fileout.flush();
			fileout.close();

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} 
	}
}

结果:

你可能感兴趣的:(appium)