hello,今天和大家一起来了解下接口自动化中得ddt+excel操作
首先我们来安装一下ddt,命令:pip3 install ddt,ddt的本质其实是一个装饰器,主要是修饰类和修饰测试方法,废话不多说,直接上案例:
from ddt import ddt,data
import unittest
test_data=[[1,2,3],[4,5,6]]
@ddt
class TestDemo(unittest.TestCase):
@data(*test_data)
def test_01(self,item):
print(item)
if __main__=='__main__':
unittest.main()
输出结果:
[1,2,3]
[4,5,6]
接下来我们来学习下如何从excel中读出数据,这里我们先来介绍第一种方法openpyxl,下面是excel的格式
直接上代码:
from openpyxl import load_workbook
class Doexcel(object):
def __init__(self,file_name,sheet_name):
self.file_name=file_name
self.sheet_name=sheet_name
def get_data(self):
wb=load_workbook(self.file_name)#打开excel
sheet=wb[self.sheet_name]#定位excel中的sheet表单
test_data=[]
for x in range(2,sheet.max_row+1):
sub_data={}
sub_data['case_number'] = sheet.cell(i, 1).value
sub_data['case_title'] = sheet.cell(i, 2).value
sub_data['case_url'] = sheet.cell(i, 3).value
sub_data['case_method'] = sheet.cell(i, 4).value
sub_data['case_header'] = sheet.cell(i, 5).value
sub_data['case_body'] = sheet.cell(i, 6).value
sub_data['case_expect_result'] = sheet.cell(i, 7).value
sub_data['case_result'] = sheet.cell(i, 8).value
sub_data['test_result'] = sheet.cell(i, 9).value
test_data.append(sub_data)
return test_data
def write_back(self,i,result,Testresult):
wb=load_workbook(self.file_name)
sheet=wb[self.sheet_name]
sheet.cell(i,7).value=result
sheet.cell(i,8).value=Testresult
wb.save(self.file_name)
if __name__=='__main__':
Doexcel('xxxx.xlsx','Sheet').get_data()
这里需要注意得是,对于openpyxl需要使用得excel是xlsx格式得,同时openpyxl对于行和列都是从下边1开始,不像xlrd是从0开始得,另外上面得xlsx文件我是存放在当前目录里得,所以不需要绝对路径,对于上面有一些小知识点,上代码直接看:
from openpyxl import load_workbook
!:打开excel表
wb=load_workbook('xxx.xlsx')
2:定位表单
sheet=wb['Sheet1']
3:读取数据
res=sheet.cell(1,1).value
4:最大行
print(sheet.max.row)
5:最大列
print(sheet.max_column)
对于上面一个个循环在excel中找值,是否可以换一种方式,不需要手动添加列名,上代码:
from openpyxl import load_workbook
class Doexcel(object):
def __init__(self,file_name,sheet_name):
self.file_name=file_name
self.sheet_name=sheet_name
def do_excel(self):
open_file=load_workbook(self.file_name)
sheet_value=open_file[self.sheet_name]
# print(sheet_value)
data=[]
for x in range(1,sheet_value.max_row+1):
for y in range(1,sheet_value.max_column+1):
sheet_data={}
if x + 1 <= sheet_value.max_row:
sheet_name=sheet_value.cell(x,y).value
sheet_data[sheet_name]=sheet_value.cell(x+1,y).value
data.append(sheet_data)
print(data)
# return data.append(sheet_data)
if __name__ == '__main__':
Doexcel(r'这里填文件得绝对路径\xxx.xlsx', 'Sheet1').do_excel()