• 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()


  • 相关阅读:
    CF 142B Tprimes
    CF 231A Team
    poj 2001 Shortest Prefixes ——字典树入门
    hdu 1039 Easier Done Than Said?
    poj 2528 Mayor's posters
    hdu 1061 Rightmost Digit
    poj 2503 Babelfish
    CF271 A. Beautiful Year
    poj 2752
    CF271 B. Prime Matrix
  • 原文地址:https://www.cnblogs.com/kite123/p/11970345.html
Copyright © 2020-2023  润新知