十四、excel封装与应用

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='测试通过')
```

上一篇:app逆向入门分析——APP登陆请求参数


下一篇:学习笔记6