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


猜你喜欢

转载自www.cnblogs.com/kite123/p/11970345.html