• 【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)
  • 相关阅读:
    c#扩展函数
    c# 正则匹配对称括号
    sqllocaldb 2016安装
    scrapy图片数据爬取
    Scrapy爬取全站数据并存储到数据库和文件中
    Scrapy基于终端指令的持久化存储
    nginx指定配置文件
    腾讯云安装python36
    Django部署腾讯云服务时候报错:SQLite 3.8.3 or later is required (found 3.7.17)
    flask打包下载zip文件
  • 原文地址:https://www.cnblogs.com/python-test001/p/12421956.html
Copyright © 2020-2023  润新知