zoukankan      html  css  js  c++  java
  • 测一个功能函数,以处理表格(用例)的方式来生成测试报告

    今天,给大家讲的是通过一张表格,进而处理,来测试一个简单的功能函数的代码逻辑是否有问题。今天讲的东西有很多是可以套用的,几乎就是模板

    首先我先给出要测的功能函数--登录的代码

    def login_check(username=None, password=None):
        """
        登录校验的函数
        :param username: 账号
        :param password:  密码
        :return: dict type
        """
        if username != None and password != None:
            if username == 'python31' and password == 'lemonban':
                return {"code": 0, "msg": "登录成功"}
            else:
                return {"code": 1, "msg": "账号或密码不正确"}
        else:
            return {"code": 1, "msg": "所有的参数不能为空"}

     这是开发人员写的,我们作为测试人员,要去对它进行白盒测试,检测代码的逻辑问题,有没有出错?但是,我们现在可以用简单的方法,表格来处理,在表格上写测试用例和传入数据,给出表格如下图:

    以上两者,是我们的前提准备条件,有了这两者,我们才开始写代码, 那么,如何来进行呢?

    一、把excel封装好的模板直接拿过来用

    import openpyxl
    
    
    class Excel:
        def __init__(self, filename, sheet_name):
            self.filename = filename
            self.sheet_name = sheet_name
    
        def open(self):
            # 第一步:将excel文件加载到一个工作簿对象中
            self.wb = openpyxl.load_workbook(self.filename)
            # 第二步:选择文件中的表单
            self.sh = self.wb[self.sheet_name]
    
        def read_data(self):
            """读数据"""
            self.open()
            res = list(self.sh.rows)
            # 获取第一行的单元格,用列表推导式来简写代码
            title = [c.value for c in res[0]]
            cases_data = []
            # 遍历除第一行之外所有的行
            for row in res[1:]:
                data = [c.value for c in row]
                case = dict(zip(title, data))
                cases_data.append(case)
            return cases_data
    
        def write_data(self, row, column, value):
            """写数据"""
            self.open()
            self.sh.cell(row=row, column=column, value=value)
            self.wb.save(self.filename)

    二、编写测试用例类

    1、定义测试类,再定义一个测试方法
    2、去excel中读取用例数据
    3、通过ddt实现数据驱动
    4、实现用例内部的逻辑

    import unittest
    from day_15.demo_处理表格示例 import myddt
    from day_15.demo_处理表格示例.hand_excel import Excel
    from day_15.demo_处理表格示例.login import login_check
    
    
    @myddt.ddt
    class TestLogin(unittest.TestCase):
        excel = Excel(r"C:UsersAdministratorPycharmProjectsexampleday_15demo_处理表格示例cases.xlsx", "login")
        cases_data = excel.read_data()
    
        @myddt.data(*cases_data)
        def test_login(self, item):
            # 准备数据
            data = eval(item["data"])
            expected = eval(item["expected"])
    
            # 调用被测的功能函数
            res = login_check(**data)
    
            # 获取用例所在表单的行号
            case_row = item["case_id"] + 1
            try:
                # 断言
                self.assertEqual(expected, res)
            except AssertionError as e:
                self.excel.write_data(row=case_row, column=5, value="失败")
                print("{}:用例执行失败,失败的信息如下:".format(item['title']))
                print(e)
                raise e
            else:
                self.excel.write_data(row=case_row, column=5, value="通过")
                print("{}:用例测试执行通过!!!".format(item['title']))
    
    
    if __name__ == '__main__':
        unittest.main()

     记得要引入ddt,修改ddt里面的源码

     

     三、跑程序run

    import unittest
    from unittestreport import TestRunner
    
    suite = unittest.defaultTestLoader.discover(r"C:UsersAdministratorPycharmProjectsexampleday_15demo_处理表格示例	estcase")
    runner = TestRunner(suite,
                        filename="report.html",
                        report_dir=".",
                        title='测试报告',
                        tester='excellent',
                        desc="excellent执行测试生成的报告",
                        templates=1   # 这里可以生成两个风格不同的报告,待会给大家看一下
                        )
    runner.run()

     最后把运行的结果给大家看一下:

     

     所以,其实就是这么几个步骤

    1.准备要测的函数和表格用例

    2.编写测试用例类,导入excel封装和ddt

    3.run跑程序

  • 相关阅读:
    flask多线程多协程操作
    flask介绍
    centos django+Nginx+uwsgi部署
    centos下运行python3.6+Django+mysql项目
    centos虚拟机下安装nginx
    redis安装
    路飞学城课程_课程详细_作业点评
    redis使用方式
    git命令学习
    组合&多态&封装
  • 原文地址:https://www.cnblogs.com/xj-excellent/p/13492846.html
Copyright © 2011-2022 走看看