【python自动化框架搭建】python操作excel(第14天课堂笔记)

一、openpyxl介绍和安装:

安装方式:

pip install openpyxl

1、为什么要学操作excel

存测试数据:

  有时候大批量的数据,存在txt里面显然不是最佳的方式,我们可以存在excel里面去,第一方便我们存储数据和做数据,一方面方便我们读取数据,比较明朗,测试的时候就从数据库中读取出来,这点是非常重要的!

存测试结果:

  可以批量把结果存到excel中,也比较好整理数据点,比txt更好

2、安装openpyxl

puthon中与excel操作相关的模块

xlrd:从excel中读取数据,支持xls,xlsx

xlwt库:对excel进行修改操作、不支持对xlsx格式的修改

xlutils库:在xlwt和xlrd中,对一个已存在文件进行修改

openpyxl:主要针对xlsx格式的excel进行读取和编辑

官方说法:

网址:http://www.python-excel.org/

3、Excel中的三大对象:

WorkBook:工作簿对象

Sheet:表单对象

Cell:表格对象

 

excel表格内容:

 

# 导入unittest模块和注册模块函数
import unittest
from Day13_2020_03_04.pack01.homework_practice.register import register_test

class TestRegister(unittest.TestCase):
    """账号注册类"""
    # TestRegister中的init只能传递两个参数,需要重写父类TestRegister的init方法,添加一个参数
    # method_name:方法名,case_dat:用例
    def __init__(self,method_name,case_data):
        # 将参数传递给实例属性
        self.case_date = case_data
        # 对原来的__init__进行获取
        super().__init__(method_name)

    # 注册方法
    def test_register(self):
        # 将入参进行参数化,将字符串中的数据进行读取
        data = eval(self.case_date["data"])
        # 将预期结果参数化,将字符串中的数据进行读取
        excepted = eval(self.case_date["excepted"])
        # 第一步:调用功能函数,传入参数(实际结果),*data将元祖进行拆包
        result = register_test(*data)
        # 对比预期结果和实际结果
        self.assertEqual(excepted, result)

    def setUp(self):
        # 每一条测试用例执行之前都会执行
        print("{}开始执行了".format(self))
    def tearDown(self):
        # 每一条测试用例执行之后都会执行
        print("{}执行完了".format(self))
    @classmethod
    def setUpClass(cls):
        # 执行这个测试用例类中的测试用例之前会执行
        print("{}开始执行测试用例类执行完了".format(cls))
    @classmethod
    def tearDownClass(cls):
        # 执行测试用例类全部执行完了,就会执行该方法
        print("{}执行测试用例类全部执行完了,就会执行该方法".format(cls))

#  上面已经被注册的账号:python23
#  入参三个:  账号    密码1  密码2
#  账号未被注册过,两个密码一样才能注册成功,其他情况都注册失败,对应的结果如下:
# 注册成功               预期结果:{"code": 1, "msg": "注册成功"}
# 两次密码不一致         预期结果:{"code": 0, "msg": "两次密码不一致"}
# 账户已存在             预期结果:{"code": 0, "msg": "该账户已存在"}
# 密码不在6-18位之间     预期结果:{"code": 0, "msg": "账号和密码必须在6-18位之间"}
# 读取excel类
import  openpyxl
class ReadExcle(object):
    def __init__(self,filename,sheetname):
        self.filename = filename
        self.sheetname = sheetname
    def open(self):
        "打开工作薄和表单"
        self.wb = openpyxl.load_workbook(self.filename)
        self.sh = self.wb[self.sheetname]
    def read_date(self):
        "读取数据的方法"
        # 打开文件和工作薄
        self.open()
        # 将表单中的内容,按行获取所有的格子
        rows = list(self.sh.rows)
        # 创建一个空列表,用例存放所有的用例数据
        cases = []
        # 获取表头放到列表中
        title = []
        for c in rows[0]:
            title.append(c.value)
        # print(title)
        # 获取除表头以外的其他行的数据
        for r in rows[1:]:
            # 没遍历一行,创建一个列表,用例存放该行的数据
            data = []
            for c in r:
                data.append(c.value)
            # 将表头和该行的数据进行聚合打包,转换字典
            case_data = dict(zip(title, data))
            # 将该行的用例数据加入到cases这个列表中
            cases.append(case_data)
            print(cases)
        # 将读取好的数据返回回去
        return cases
    def write_data(self):
        "写入数据"
        pass
# 魔法变量
if __name__ =="__main__":
    read = ReadExcle("cases.xlsx","register")
    data = read.read_date()
    print(data)
"""
测试程序启动文件
第一步:创建一个测试套件(unittest.TestSuite)
第二步:将测试用例加入到测试套件中
第三步:创建一个测试运行程序对象(unittest.TextTestRunner)
第四步:通过运行程序,去执行测试套件中的测试用例
"""
from HTMLTestRunnerNew import HTMLTestRunner
import unittest
from Day14_2020_03_05.pack01.test_register_case import TestRegister
from Day14_2020_03_05.pack01.read_excel import ReadExcle

# 创建测试套件对象
suite = unittest.TestSuite()

# 优化测试用例的数据,通过列表不好管理测试用例数据
# cases = [
#     {"data": ("test_0001", "12345678", "12345678"), "excepted": {"code": 1, "msg": "注册成功"}},
#     {"data": ("test_0001", "12345678", "1234567"), "excepted": {"code": 0, "msg": "两次密码不一致"}},
#     {"data": ("python23", "1234567", "123456"), "excepted": {"code": 0, "msg": "该账户已存在"}
#      }
# ]
# 我们通过excel对测试数据进行读取
# python操作excel


# 加载用例到套件
# case_data = {"data": ("test_0001", "12345678", "12345678"), "excepted": {"code": 1, "msg": "注册成功"}}

# TestRegister中的init只能传递两个参数,需要重写父类TestRegister的init方法,添加一个参数
# 对前面的列表cases进行遍历,通过for循环去遍历测试用例数据,每遍历一次就通过测试用例类,去创建一个测试用例对象,然后加载到测试用例里面
read = ReadExcle("cases.xlsx", "register")
cases = read.read_date()
for case_data in cases:
    case = TestRegister("test_register",case_data)
    suite.addTest(case)

# # 第三种方法:将一个模块中的所有测试用例,加载到测试套件
# loader = unittest.TestLoader()
# # login_test_case 标黄不影响
# suite.addTest(loader.loadTestsFromModule(test_register_case))

# 第四种方法:通过一个目录,去导入改目录下的所有模块中的测试用例
# loader = unittest.TestLoader()
# r防止转义,注意测试用例的模块名称,要以test开头
# suite.addTest(loader.discover(r"D:projectclass23Day13_2020_03_04pack01homework_practice"))

"""
stream:测试文件名字
verbosity:
title:报告的标题
description:相关的描述
tester:测试人员姓名
"""
runner = HTMLTestRunner(stream=open("report.html","wb"),
                        verbosity=2,
                        title="python第二份测试报告",
                        description="注册类测试报告",
                        tester="chen")
# 第四步:通过运行程序,去执行测试套件中的测试用例
runner.run(suite)
原文地址:https://www.cnblogs.com/python-test001/p/12421956.html