一组测试数据就代表一个用例,就是测试类下的一个方法
自动化测试之前,先有手工测试的用例,一般保存在excel,xmind,tapd
测试数据的运转:
通过手工写入excel
通过python读取excel数据
-用pip安装第三方库--openpyxl
-导入load_workbook:加载工作簿
sheet:工作表 cell:单元格 row:行 column:列
from openpyxl import load_workbook
-通过变量获取工作簿
wb = load_workbook(r"E:\lemmon-public\lesson\lesson14_测试数据分离和excel\xlsx\cases.xlsx")
得到工作簿
需要注意:
excel表格默认要放在跟它进行操作的py文件同一个目录下才能获取,不能像调用其他模块(py文件)一样操作,因为from..impirt只能导入python文件
如果是在A模块调用B模块的数据,而B模块是要获取excel文件的话,那么A模块和B模块所在的目录下,都必须要有这个excel文件,不然调用时候会报错
为了方便管理,我们会把excel文件存放在一个专门的目录下,所以在对excel进行操作的py文件里,获取工作簿时候需要用到excel文件的绝对路径
-获取表格(Sheet)
sheet= wb["Sheet1"]
print(sheet)
-获取一个表的全部值
data = list(sheet.values)
print(data)
sheet也是一个对象,获取对象属性,sheet.values 获取表格数据时候需要转换list类型
-获取一个单元格(cell)
cell = sheet.cell(row=2,column=1) #参数传入行和列
print(cell)
得出这是A2单元格
获取单元格的值
info = cell.value
print(info)
cell是一个对象,获取对象的属性就是cell.属性名
获取某一行的全部数据
rows_list=[]
for i in range(1, max_column + 1): # 遍历次数,一行的数据要根据有多少列来判断
cell_value = self.sheet.cell(row=row, column=i).value # 得到这一行里面相应列的单元格的值
rows_list.append(cell_value)
首先遍历整行数据,遍历次数根据列数来判断,所以先要获取总列数(max_column),每次获取列的单元格,添加到一个空表中
获取某一列的全部数据
column_list = []
for i in range(1,max_row+1):#遍历次数,一列的数据需要根据有多少行来判断
cell_value = sheet.cell(column=colum,row=i).value #得到这一列里面相应行的单元格的值
column_list.append(cell_value)
遍历整列数据,遍历次数根据行数来判断,所以先要获取总行数(max_row),每次取出行的单元格,添加到一个空表中
写入excel
def write_excel(row,column,value):
sheet.cell(row,column).value=value
wb.save(r"E:\lemmon-public\practice\login_cases.xlsx")
需要获取单元格,填入写入的行和列,然后再把写入内容填入value
之后需要手动保存,参数是文件的路径
-封装成类
from openpyxl import load_workbook
from config.config import case_file
class ExcelHandle:
def __init__(self,file_name,sheet_name):
# 得到工作簿
self.wb = load_workbook(file_name)
# 得到工作表
self.sheet = self.wb[sheet_name]
self.file_name = file_name
# 读取所有数据
def read_excel(self):
data = list(self.sheet.values) #得到一个列表,包括标题,值
key = data[0]
data_1 = [dict(zip(key, value))for value in data[1:]] #列表推导式,从列表第二个元素开始到最后都跟第一个元素合并字典
return data_1
#读取某行数据
def get_rows(self,row):
max_column = self.sheet.max_column # 获取总列数
rows_list = []
rows_list2 = []
if row == 1: # 只获取title的值
for i in range(1, max_column + 1): # 遍历次数,一行的数据要根据有多少列来判断
cell_value = self.sheet.cell(row=row, column=i).value # 得到这一行里面相应列的单元格的值
rows_list.append(cell_value)
return rows_list
elif row != 1: # 获取除title以外的行数,最后要跟title关联,合并成字典
for i in range(1, self.sheet.max_column + 1):
cell_value = self.sheet.cell(row=1, column=i).value
rows_list.append(cell_value)
for j in range(1, self.sheet.max_column + 1):
cell_value = self.sheet.cell(row=row, column=j).value
rows_list2.append(cell_value)
rows_info = dict(zip(rows_list, rows_list2))
return rows_info
#写入excel
def write_excel(self,row, column, value):
self.sheet.cell(row, column).value = value
self.wb.save(self.file_name)
#如果其他模块导入这个函数,下面代码不会执行
if __name__ == '__main__':
data1 = ExcelHandle(case_file,"recharge")
print(data1.read_excel())
print(data1.get_rows(2))
data1.write_excel(2,10,"成功")