zoukankan      html  css  js  c++  java
  • python编写add,multiply方法测试用例并生成测试报告

    1.单元测试的本质

    单元测试的本质:测试函数,代码级别
    接口测试的本质:测试类里面的函数

    2. unittest 编写测试用例并生成测试报告

    功能测试:(1)编写测试用例,(2)执行测试用例,(3)对比实际结果与期望结果,(4)出具测试报告

    unittest测试思路:

    (1)写用例:TestCase
    (2)执行用例:TestSuite 存储用例,TestLoader 找用例,加载用例,存在(1)的TestSuite中
    (3)对比结果:断言 Assert
    (4)出具报告:TextTestRunner

    已知math_method.py代码如下:
    class MathMethod:
        def __init__(self,a,b):
            self.a  = a
            self.b  = b
    
        def add(self):
            return self.a + self.b
    
        def multiply(self):
            return self.a * self.b
    • 编写测试用例test_testcase.py代码如下:

    import unittest  # python自带
    from  math_method import MathMethod  # 测试的目标类
    
    # 写一个测试类,对math_method模块里面的类进行单元测试
    class TestAddMethod(unittest.TestCase):  # 继承unitest中的TestCase,用来写测试用例
        # 编写测试用例
        # 1.一个用例就是一个方法,不能传参,只要self关键字
        # 2.所有的用例(所用的函数/方法,必须以test开头 test_)
        def test_add_two_positive(self): # 两个正数相加 1+1
            res = MathMethod(1,1).add()
            print('1+1的结果是:',res)
        #     加断言,判断期望值与实际结果的比对,一致通过;不一致失败
        #     self.assertEqual(2, res, '1+1的结果出错了')  # 来自TestCase父类,第一个参数:期望值;第二个参数:实际结果;第三参数:失败返回结果
            try:
                self.assertEqual(2,res)  # 来自TestCase父类,第一个参数:期望值;第二个参数:实际结果;第三参数:失败返回结果
            except AssertionError as e:
                print('出错啦!断言结果是{0}'.format(e))
                raise e
    
        def test_add_two_zero(self):
            res = MathMethod(0,0).add()
            print('0+0的结果是:',res)
            # self.assertEqual(1,res,'不符合期望结果:0+0=1')
            try:
                self.assertEqual(1, res)
            except AssertionError as e:
                print('出错啦!断言结果是{0}'.format(e))
                raise e
    
        def test_add_two_negative(self):
            res = MathMethod(-1,-2).add()
            print('-1+(-2)的结果是:',res)
            self.assertEqual(-3,res)
    
    class TestMultiMethod(unittest.TestCase):  # 继承unitest中的TestCase,用来写测试用例
        # 编写测试用例
        # 1.一个用例就是一个方法,不能传参,只要self关键字
        # 2.所有的用例(所用的函数/方法,必须以test开头 test_)
        def test_multi_two_positive(self): # 两个正数相乘 1+1
            res = MathMethod(1,1).multiply()
            print('1*1的结果是:',res)
            self.assertEqual(1,res)
    
        def test_multi_two_zero(self):
            res = MathMethod(0,0).multiply()
            print('0*0的结果是:',res)
            self.assertEqual(0, res)
    
        def test_multi_two_negative(self):
            res = MathMethod(-1,-2).multiply()
            print('-1*(-2)的结果是:',res)
            self.assertEqual(2, res)
    
    
    if __name__ == '__main__':
        unittest.main()

    注意:

    (1)测试结果说明: .测试通过, E代码出错, F测试失败

    (2)按方法名称的ascii值由小到大顺序执行用例方法

    (3)鼠标放在方法旁边,只执行该鼠标位置的方法

    # 执行setUp:每条测试用例执行前执行setUp[有操作必须在执行用例前准备好,例如:连接数据库]
    # 执行tearDown:每条测试用例执行完毕后都会执行tearDown[有操作必须在执行用例完毕后要清除,例如:关闭数据库]
    • 执行测试用例并生成测试报告

    import unittest
    import HTMLTestRunner  # 写好一个模块,可以直接调用
    from test_testcase import TestAddMethod,TestMultiMethod
    
    suite = unittest.TestSuite()  # 存储用例
    # A class whose instances(实例) are single test cases. 这个类的实例是一个个测试用例。
    # 方法1 addTest 加载测试用例
    # 只执行一条,两个正数相加
    # suite.addTest(TestAddMethod('test_add_two_positive')) # 测试为:方法名
    
    # 方法2 TestLoader 加载测试用例
    loader = unittest.TestLoader()  # 创建一个加载器
    # (1)方法i 加载类中的全部用例
    # suite.addTest(loader.loadTestsFromTestCase(TestAddMethod)) #具体到类
    # (2)方法ii  加载模块类中的全部用例
    from auto_Testwork.class_unittest import class_unittest1  # 具体到模块
    suite.addTest(loader.loadTestsFromModule(class_unittest1))
    
    # 判断是否符合预期结果 assert(添加在测试用例中)
    
    # 出具测试报告
    
    # 方法1:执行测试用例,上下文管理器:执行完毕后自动关闭
    # runner = unittest.TextTestRunner()
    # with open('test.txt','w+',encoding='utf-8') as file:
    # file = open('test.txt','w+',encoding='utf-8')
    #     runner = unittest.TextTestRunner(stream=file,descriptions=None,verbosity=2) # stream:保存文件的位置 verbosity:0没有..F,1有..F,2详细输出
    #       runner.run(suite)
    # 方法2:生成HTML报告
    with open('test_report.html','wb') as file:
        runner = HTMLTestRunner.HTMLTestRunner(stream=file,
                                               verbosity=2,
                                               title='11.20MATH测试报告',
                                               description='MATH测试报告' )
    
        runner.run(suite)
    # file.close()
    
    
    if'__name__' == '__main__':
        unittest.TestCase()


  • 相关阅读:
    sqlserver 字符串拆分和取某分隔符之前的字符串
    三目运算符引发的一次事故
    SqlServer 查询死锁,杀死死锁进程*转载
    sql不带锁查询
    各种replace待续
    jmeter压力测试
    docker基础学习
    被动式pocscan扫描神器搭建
    (转)Ubuntu 17.04_64上搭建巡风扫描系统(资产信息漏洞扫描内网神器)
    (转)搭建本地 8.8 W 乌云漏洞库
  • 原文地址:https://www.cnblogs.com/kite123/p/11970345.html
Copyright © 2011-2022 走看看