1 概述
测试类型 | 本质 | 数据类型 |
---|
接口测试 | 数据流动和验证 | csv yaml json | UI测试 | 用户操作的指令 | excel数据驱动+关键字驱动 |
- 测试用例中如何驱动excel中的数据
- 如何把excel数据变为测试用例
Python中有很多库可以操作Excel,像xlsxwriter、openpyxl、pandas、xlwings等。 官网:http://www.python-excel.org/
2 xlrd
-
介绍 xlrd是python语言中,读取Excel的拓展工具; 支持读取.xls和.xlsx格式的Excel文件,只支持读取,不支持写入。 安装xlrd库:pip3 install xlrd==1.2.0 注意:现在直接pip install xlrd下载的是2.0.1版本的,运行会报错:xlrd.biffh.XLRDError: Excel xlsx file; not supported -
读取Excel文件 1)导包:import xlrd 2)打开Excel文件:wb = xlrd.open_workbook(filename) 3)打开工作表:ws = sheet_by_name(sheet_name) ws = sheet_by_index(index_num) 4)读取工作表的属性信息(工作表名,工作表所有行数和列数)ws.name ws.nrows ws.ncols 5)读取工作表的内容: 读取一行:ws.row_values(rowx=index_num) 读取一列:ws.col_values(colx=index_num) 读取单元格:ws.cell(rowx, colx).value import xlrd
wb = xlrd.open_workbook('../data/login.xlsx')
ws1 = wb.sheet_by_name('Sheet1')
rows = ws1.nrows
cols = ws1.ncols
name = ws1.name
print('总行数:{}, 总列数:{}, 工作表名:{}'.format(rows, cols, name))
row1 = ws1.row_values(0)
print('第一行内容:', row1)
col1 = ws1.col_values(0)
print('第一列内容:', col1)
cell1 = ws1.cell(1, 0).value
print('A2单元格内容:', cell1)
3 openpyxl
-
介绍 全称:openpythonexcel 官网:https://openpyxl.readthedocs.io/en/stable/ 安装openpyxl库:pip install openpyxl -
读取Excel文件 1)导包:import openpyxl 2)打开Excel文件:wb = openpyxl.load_workbook(filename) 3)打开工作表:ws = wb.sheet_by_name(sheet_name) ws = wb.active ws = wb[sheet_name] 4)读取工作表的属性信息(工作表所有行数和列数)ws.max_row ws.max_colomn 5)读取工作表的内容: 读取一行:ws.iter_rows(max_row=1) 读取一列:ws.iter_cols(max_col=1) 读取单元格:ws.cell(row, col).value ws[单元格].value 读取所有内容:ws.values import openpyxl
wb = openpyxl.load_workbook('../data/login.xlsx')
ws = wb.active
rows = ws.max_row
cols = ws.max_column
print('总行数:{}, 总列数:{}'.format(rows, cols))
print('---------第一行内容---------')
for i in ws.iter_rows(max_row=1):
for j in i:
print(j.value, end='\t')
print()
print('---------第一列内容---------')
for i in ws.iter_cols(max_col=1):
for j in i:
print(j.value, end='\t')
print()
print('---------A2单元格内容---------')
cell1 = ws.cell(2, 1).value
print('通过单元格坐标:', cell1)
cell2 = ws['A2'].value
print('通过单元格名称:', cell2)
print('---------sheet所有内容---------')
print(list(ws.values))
-
向Excel文件写入数据
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
ws.append([1, 2, 3])
ws.append([4, 5, 6])
ws.cell(1,4).value = 'Pass'
ws.cell(2,4).value = 'Fail'
wb.save('excel.xlsx')
4 pandas
-
介绍 安装pandas库:pip install pandas -
读取Excel文件 1)导包:import pandas 2)读取Excel文件:wb = pd.read_excel(filename, sheet_name='sheet_name', header=0) 3)读取工作表的属性信息(行索引和列索引):wb.index wb.columns 4)读取工作表的内容: 根据行索引选择数据: 读取一行:wb.loc[[0]] 读取多行:wb.loc[[0, 2]] 读取连续的多行:wb.iloc[0:2] # 读取0到1行;iloc[行切边,列切片] 根据列索引选择数据: 读取一列:wb['col_name'] 读取多列:wb[['col_name1', 'col_name2']] 读取连续的多列:wb.iloc[:, 1:6] # 读取所有行,列是1到5列;iloc[行切边,列切片] 读取单元格:wb.iloc[row, col] 读取所有内容:wb.values 5)按条件选取表格数据:rows = wb[wb['col_name'] == 'col_value'] import pandas as pd
file = '../data/wf_Login.xlsx'
wb = pd.read_excel(file, sheet_name='TestLogin_WF', header=0)
print(wb)
print(wb.index)
print(wb.index[0])
print(wb.columns)
print(wb.columns[1])
print(wb['wfName'])
print(wb[['index', 'wfName']])
print(wb.iloc[:, 1:6])
row = [1]
print(wb.loc[row])
rows = [0, 2]
print(wb.loc[rows])
print(wb.iloc[0:2])
print(wb.values)
print(wb.iloc[1, 2])
prority = wb['prority'] == 'High'
print(prority)
print(wb[prority])
print(wb[wb['prority'] == 'High'])
rows = wb[wb['prority'] == 'High']
for row in rows.iterrows():
print(row[1]['wfName'])
5 如何在excel表格中描述多个用例
- 用Excel来表示测试用例
Excel中描述的信息不是单一的:
- 测试步骤:调用关键字,实现测试用例执行
- 测试属性:用例名称、前置条件、参数、变量、关系
框架除了要读取数据内容,还要解析数据内容。
5.1 制定解析规则
从excel加载复杂的数据结构,可以变为:dict, json, yaml 例如:
from openpyxl import load_workbook
from openpyxl.worksheet.worksheet import Worksheet
def read_excel(xls_path):
wb = load_workbook(xls_path)
ws = wb.active
return ws
re = read_excel('../data/test_excel.xlsx')
'''
重构目标:
1. 封装为函数,函数返回处理后的数据。
2. 清理垃圾数据,移除没用的None
3. 让数据更有可读性。
'''
def handle_excel(ws: Worksheet):
_suite = {
'info': {},
'case_list': []
}
_case_list = _suite['case_list']
_case = {
'info': {},
'steps': []
}
top_keys = filter(
lambda x: x is not None,
list(ws.iter_rows(max_row=1, values_only=True))[0])
for (
用例,
步骤,
步骤名,
关键字,
参数1,
参数2,
执行结果,
报告摘要
) in ws.iter_rows(min_row=2, values_only=True):
if 用例 == 0:
_suite['info'][步骤名] = 参数1
elif 步骤 == 0:
_case = {
'info': {},
'steps': [],
}
_suite['case_list'].append(_case)
_case['info'][步骤名] = 参数1
else:
_case['steps'].append(
{
'步骤名': 步骤名,
'关键字': 关键字,
'参数1': list(
filter(
lambda x: x is not None,
[
参数1,
参数2
]
)
)
}
)
return _suite
print(handle_excel(re))
'''
data = list(re.values)
data = data[1:] # 干掉第一行:切片
for d in data: # 逐行打印 >> 打包数据
if d[0] == 0:
# 这是分组信息
print('suite info:', d)
elif d[1] == 0 :
# 这是用例信息
print(' test case info:', d)
else:
# 这是用例步骤
print(' step:', d)
new_data = {} # 数据打包之后,传递给测试框架,创建测试用例并执行
'''
5.2 创建测试用例
ddt:已经有测试用例了,数据只是通过函数,决定用例的数量。 关键字驱动:没有测试用例,根据关键字自动创建测试用例。
|