excel封装与应用:
ddt与excel的基本使用
```python
import unittest
from unittestreport import ddt, list_data
import openpyxl
from testcases.login import login_dxc
#创建工作簿对象
wookbook = openpyxl.load_workbook(r'E:\Study\datas\cases.xlsx')
#选择表单
sh = wookbook['login']
#按行读取login表单中所有的内容,并转换为列表
res = list(sh.rows)
#通过索引读取第一行数据
tetle = [i.value for i in res[0]]
#创建一个空列表
cases = []
#遍历除第一行之外的所有内容
for items in res[1:]:
ress = [i.value for i in items]
#打包为字典
dic = dict(zip(tetle, ress))
#添加到cases这个空列表中
cases.append(dic)
#使用ddt要在类名前@ddt
@ddt
class TestLog(unittest.TestCase):
#方法前@data
@list_data(cases)
#创建一个item参数用来接收cases的数据
def test_login_27(self, item):
# 准备用例数据,读取对应的数据,并识别字符串中的有效python表达式
expected = eval(item['expect'])
data = eval(item['data'])
# 调用功能函数
resss = login_dxc(**data)
#断言
self.assertEqual(expected, resss)
```
对操作excel数据处理模块的封装
```python
import openpyxl
#创建一个操作excel的类
class HandleXlsx:
def __init__(self, filename, sheetname):
"""
操作xlsx文件的封装
:param filename: 文件名或者路径
:param sheetname: 表单名
"""
self.filename = filename
self.sheetname = sheetname
def read_data(self):
"""
读取xlsx文件的方法
:return: 返回读取的内容并返回数据格式为列表嵌套字典的形式
"""
#加载工作簿对象
wookbook = openpyxl.load_workbook(self.filename)
sh = wookbook[self.sheetname]
#读取所有数据,转换为列表
res = list(sh.rows)
#获取第一行标题
title = [i.value for i in res[0]]
cases = []
#遍历除第一行之外的数据
for item in res[1:]:
data = [i.value for i in item]
dic = dict(zip(title, data))
cases.append(dic)
#返回读取的数据
return cases
def write_data(self, row, column, value):
"""
写入xlsx文件的方法
:param row: 写入的行
:param column:写入的列
:param value: 写入的内容
"""
#加载工作簿对象
wookbook = openpyxl.load_workbook(self.filename)
sh = wookbook[self.sheetname]
#写入数据
sh.cell(row=row, column=column, value=value)
wookbook.save(self.filename)
```
对封装的excel模块的使用
```python
import unittest
from unittestreport import ddt, list_data
from common.handle_excel import HandleXlsx
from testcases.login import login_dxc
@ddt
class TestLog(unittest.TestCase):
#读取数据,写在类里面有利于区分
res = HandleXlsx(filename=r'E:\Study\datas\cases.xlsx', sheetname='login')
cases = res.read_data()
@list_data(cases)
def test_login_27(self, item):
# 准备用例数据
expected = eval(item['expect'])
data = eval(item['data'])
# 调用功能函数
resss = login_dxc(**data)
number = item['case_id'] + 1
try:
self.assertEqual(expected, resss)
#捕获断言异常
except AssertionError as e:
#如果捕获到断言失败,则写入excel中
self.res.write_data(row=number, column=5, value='测试失败')
#抛出异常,让unittest捕获
raise e
else:
#如果没有断言异常,则写入excel中
self.res.write_data(row=number, column=5, value='测试通过')
```