笔者做自动化的时候常用的方法
openpyxl的执行用例后写入报告
import openpyxl,os
#openpyxl 执行用例后写入报告
def write_reporter(filepath,content):
#该报告的标题名 可传参也可以写死
title=['用例名','用例数据','预期结果','实际结果','执行结果','运行时间']
#如果不存在当前报告就新建 如果存在就写入
if not os.path.exists(filepath):
#新建一个新工作表
excel=openpyxl.Workbook()
#获取活动页面
sheet=excel.active
#设置该报告的sheet名字 可参数化
sheet.title='inputdata'
for i in range(len(title)):
#写入sheet页第一行的单元格的数据
sheet.cell(row=1,column=i+1).value=title[i]
#必须保存
excel.save(filepath)
else:
#打开文件
excel=openpyxl.load_workbook(filepath)
sheet=excel['inputdata']
#获取当前页面的行数 为了不重复写 追加写
maxrow=sheet.max_row
for i in range(len(content)):
#追加写入新的执行情况
sheet.cell(row=maxrow+1,column=i+1).value=content[i]
#保存
excel.save(filepath)
当报告中有失败的案例之后就会挑选到新的页面中,方便维护人员的查看
#挑选失败的报告到新的fail页
def pick_fail(filepath):
#读取工作表
excel=openpyxl.load_workbook(filepath)
#获得当前的sheet页的长度数据
sheet_len=len(excel.sheetnames)
#如果工作表有两个sheet就删掉一个 为了最后挑选fail的报告
if sheet_len!=1:
#删除fail页面
excel.remove(excel['fail'])
#新建页面
fail_reporter=excel.create_sheet('fail',1)
else:
fail_reporter=excel.create_sheet('fail',1)
#获取sheet页名inputdata报告页
reporter=excel['inputdata']
#遍历报告的内容
for index,content in enumerate(reporter):
#创建一个空列表
fail_title = []
#如果是标题和报告结果为fail就挑选到fail页
if index==0 or content[-2].value=='fail':
for i in range(len(content)):
#添加该行每格数据到列表中
fail_title.append(content[i].value)
#添加fail行数据到fail页
fail_reporter.append(fail_title)
#保存当前页面 一定要写
excel.save(filepath)
openpyxl在用例之前执行读取文件的操作,返回之后是个列表,可循环遍历取值来驱动测试用例
#在用例执行前读取Excel文件
def read_reporter(filepath):
#打开文件
excel=openpyxl.load_workbook(filepath)
#打开以inputdata的sheet页
reporter=excel['inputdata']
#创建一个空列表 为了添加读取的每行数据
list_content=[]
#读取sheet页 遍历出来下标和每行的数据
for index,cell_content in enumerate(reporter):
#为了添加一行的数据
content=[]
for i in range(len(cell_content)):
#读取一行中每格的数据
content.append(cell_content[i].value)
list_content.append(content)
#为了读取报告的使用
return list_content
进阶版本,xlrd可以查看一个文档的指定sheet页的页码内容
def read_sheet(f, num):
# 打开表格得到一个文件对象
books = xlrd.open_workbook(f) # 打开指定的工作表 必须excel表格
# 通过下标获取指定页码对象
sheet = books.sheets()[num] # 指定工作表的页码
rows = sheet.nrows # 获取行数 必须要这样才能获取内容
content = []
for i in range(1, rows):
case_lists = sheet.row_values(i) # 读取内容
content.append(case_lists)
return content # 返回内容