编程语言
首页 > 编程语言> > python中操作excel文件及执行结果回写

python中操作excel文件及执行结果回写

作者:互联网

读写excel表格和结果回写

一、需求

二、实现流程

三、封装读取和写入excel的方法

import openpyxl

# 用来保存用例数据
class CaseData:
    pass

class ReadExcel(object):

    def __init__(self, filename, sheet_name):
        self.filename = filename
        self.sheet_name = sheet_name

    def open(self):
        """打开工作薄,选择表单"""
        self.workbook = openpyxl.load_workbook(self.filename)
        self.sheet = self.workbook[self.sheet_name]

    def close(self):
        """关闭工作薄对象,释放内存"""
        self.workbook.close()

    def read_data(self):
        self.open()
        # 按行获取所有的格子
        rows = list(self.sheet.rows)
        # 获取表头行数据
        title = []
        for r in rows[0]:
            title.append(r.value)

        # 创建一个空列表 用来存放所有的用例数据
        cases = []
        # 遍历除了表头剩余的行
        for row in rows[1:]:
            # 创建一个空列表,用来存储该行的数据
            data = []
            # 再次遍历该行的每一个格子
            for r in row:
                # 将格子中的数据,添加到data中
                data.append(r.value)
            case = dict(zip(title, data))
            cases.append(case)
        # 关闭工作薄
        self.close()
        return cases

    def read_data_obj(self):
        self.open()
        # 按行获取所有的格子
        rows = list(self.sheet.rows)
        # 获取表头行数据
        title = []
        for r in rows[0]:
            title.append(r.value)

        # 创建一个空列表 用来存放所有的用例数据
        cases = []
        # 遍历除了表头剩余的行
        for row in rows[1:]:
            # 创建一个空列表,用来存储该行的数据
            data = []
            # 再次遍历该行的每一个格子
            for r in row:
                # 将格子中的数据,添加到data中
                data.append(r.value)
            # 将表头和数据打包转换为列表
            case = list(zip(title, data))
            # 创建一个对象用来保存该行用例数据
            case_obj = CaseData()
            # 遍历列表中该行用例数据,使用setattr设置为对象的属性和属性值
            for k, v in case:
                setattr(case_obj, k, v)
            # print(case_obj,case_obj.__dict__)
            # 将对象添加到cases这个列表中
            cases.append(case_obj)
        # 关闭工作薄
        self.close()
        # 返回cases(包含所有用例数据对象的列表)
        return cases

    def write_data(self, row, column, value):
        # 打开工作薄
        self.open()
        # 写入数据
        self.sheet.cell(row=row,column=column,value=value)
        # 保存文件
        self.workbook.save(self.filename)
        # 关闭工作薄
        self.close()

四、运行程序

import unittest

from HTMLTestRunnerNew import HTMLTestRunner
from readexcel import ReadExcel
from testcases import LoginTestCase, RegisterTestCase

# 第一步,创建一个测试套件
suite = unittest.TestSuite()

# 第二步:将测试用例,加载到测试套件中

# 1、读取登录功能函数的用例数据,创建用例对象,添加到套件
excel = ReadExcel("cases.xlsx", "login")
cases = excel.read_data()
for item in cases:
    # 创建一个用例对象
    case = LoginTestCase("test_login", eval(item['data']), eval(item["expected"]), item["case_id"])
    suite.addTest(case)

# 2、读取注册功能函数的用例数据,创建用例对象,添加到套件
excel = ReadExcel("cases.xlsx", "register")
cases = excel.read_data()
for item in cases:
    case = RegisterTestCase("test_register", eval(item["data"]), eval(item["expected"]), item["case_id"])
    suite.addTest(case)

# 第三步:创建一个测试运行程序启动器
runner = HTMLTestRunner(stream=open("report.html", "wb"),  # 打开一个html格式报告文件,将句柄传给stream
                        tester="musen",  # 报告中示的测试人员
                        description="python24第二次作业报告",  # 报告中显示描述信息
                        title="24期上课的测试报告")  # 报告中的标题

# 第四步:使用启动器去执行测试套件
runner.run(suite)

标签:case,回写,python,self,excel,用例,cases,data
来源: https://www.cnblogs.com/blackzhou/p/12919764.html