python测试框架-->pytest结合数据驱动-excel(六)
1、数据驱动的含义
数据驱动就是数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。简单来说,就是参数化的应用。数据量小的测试用例可以使用代码的参数化来实现数据驱动,数据量大的情况下建议大家使用一种结构化的文件(例如yaml,json、excel、csv等)来对数据进行存储,然后在测试用例中读取这些数据。
2、安装openpyxl 库
openpyxl官方文档: https://openpyxl.readthedocs.io/en/stable/
(1)命令行安装
# 在命令行安装pip install openpyxl
(2)在settings安装
3、openpyxl 库的操作步骤
- 读取工作簿
- 读取工作表
- 读取单元格
4、获取单元格中某个数据
在testdata目录下新建demo.xlsx和demo.py文件
demo.xlsx的内容如下:
demo.py内容如下:
import openpyxl# 第一步:获取工作簿book = openpyxl.load_workbook('demo.xlsx')# 第二步:获取工作表sheet = book.activeprint(sheet)# 第三步:获取单元格数据a_2 = sheet['A2'].valueprint("A1单元格是数据是:",a_2)c_3 = sheet.cell(column=3, row=3).valueprint("C3单元格是数据是:", c_3)# 获取多个单元格cells = sheet["A1":"C4"]print("表格的数据类型",type(cells),)print("表格数据为:",cells)
执行结果如下:
5、遍历表格所有的数据
demo.xlsx的内容如下:
test_demo.py的内容如下:
import openpyxldef test_get_excel(): # 获取工作簿 case = openpyxl.load_workbook('demo.xlsx') # 读取工作表 sheet = case.active # 遍历的数据放进values values = [] # row是行 for row in sheet: # line是列 line = [] #遍历每一行的数据 for cell in row: line.append(cell.value) values.append(line) print(values)
执行结果如下:
6、Pytest 参数化结合 Excel 文件
demo.xlsx的内容如下:
operation.py内容如下:
# perject:testdata# name:operation.py.py# date:2022-4-19def my_add(x, y): result = x + y return result
import openpyxlimport pytestfrom operation import my_adddef get_excel(): """ 解析Excel数据 :return: [[1, 1, 2],[3,6,9], [100, 200, 300]] """ # 获取工作簿 book = openpyxl.load_workbook("demo.xlsx") # 获取工作表sheet1 sheet = book.active # 读取数据,A1是第一个数据,C3是最后一个数据 cells = sheet["A1":"C3"] print(cells) values = [] # 遍历整个excel文件 for row in cells: data = [] # 遍历第一行,cell是列,row是行 for cell in row: data.append(cell.value) values.append(data) print(values) return valuesclass TestWithEXCEL: @pytest.mark.parametrize('x,y,expected', get_excel()) def test_add(self, x, y, expected): # int(x), int(y)是将转进来的数字转成整型 assert my_add(int(x), int(y)) == int(expected)
执行结果如下:
7、向表格写入数据
安装xlrd和xlutils
pip install xlrdpip install xlutils
import xlrdimport xlwtfrom xlutils.copy import copydef test_write(): rb = xlrd.open_workbook('demo.xlsx') r_sheet = rb.sheet_by_index(0) wb = copy(rb) sheet = wb.get_sheet(0) sheet.write(5,2,"string") wb.save('demo.xlsx')
使用python的xlrd读取Excel文件时,执行上述代码的报以下的问题:
xlrd.biffh.XLRDError: Excel xlsx file; not supported
在网上查了一些资料,报错原因是xlrd版本的问题,需要降低一下版本。pip install xlrd默认该包是指向python2。
解决方法:
pip3 install xlrd==1.2.0
再次执行又报错了,报错如下:
PermissionError: [Errno 13] Permission denied: 'demo.xlsx
在本地把demo.xlsx文件关掉就可以啦
以上是pytest结合数据驱动-excel的学习记录,希望能够帮助到你们~~