python unittest自动化测试框架

一、unittest工作原理

unittest最核心的四部分是:TestCase,TestSuite,TestRunner,TestFixture

TestCase:用户自定义的测试case的基类,调用run()方法,会依次调用setUp方法、执行用例的方法、tearDown方法。

TestSuite:测试用例集合,可以通过addTest()方法手动增加Test Case,也可以通过TestLoader自动添加Test Case,TestLoader在添加用例时,会没有顺序。

TestRunner:运行测试用例的驱动类,可以执行TestCase,也可以执行TestSuite,执行后TestCase和TestSuite会自动管理TESTResult。

TestFixture:简单来说就是做一些测试过程中需要准备的东西,比如创建临时的数据库,文件和目录等,其中setUp()和setDown()是最常用的方法

整个的流程就是首先要写好TestCase,然后由TestLoader加载TestCase到TestSuite,然后由TestTestRunner来运行TestSuite,运行的结果保存在TextTestReusult中,整个过程集成在unittest.main模块中。

二、例子如下:

创建一个函数集MathMethod.py

class MathMethod:
    def add(a, b):
        return a + b

    def minus(a, b):
        return a - b

    def multi(a, b):
        return a * b

    def divide(a, b):
        return a / b

为上序方法写一个测试类TestMathMethod.py

import  unittest
#导入待测试的类
from 单元测试.MathMethod import MathMethod
class TestMathMethod(unittest.TestCase):
    def test_add_one(self):
        res=MathMethod.add(1,2)
        print("1+2的结果值是:",res)

    def test_add_two(self):
        res=MathMethod.add(0,0)
        print("0+0的结果值是:",res)

    def test_add_three(self):
        res=MathMethod.add(-1,-2)
        print("-1+-2的结果值是:",res)

class TestMath_Multi(unittest.TestCase):
    def test_multi_one(self):
        res=MathMethod.multi(1,2)
        print("1*2的结果值是:",res)
        self.assertEqual(2,res)

    def test_multi_two(self):
        res=MathMethod.multi(0,0)
        print("0*0的结果值是:",res)
        try:
            self.assertEqual(2, res)
        except Exception as e:
            print("{}出错了".format(e))
            raise e #异常处理完之后 要抛出去


    def test_multi_three(self):
        res=MathMethod.multi(-1,-2)
        print("-1*-2的结果值是:",res)

if __name__ == '__main__':
    unittest.main()

执行结果:
python unittest自动化测试框架_第1张图片

收集执行用例

在这里插入代码片
import  unittest
from HTMLTestReportCN import HTMLTestRunner
from  单元测试.testMathMethod import TestMathMethod#具体到类名

suite=unittest.TestSuite()#存储用例容器
#方法一:只执行一条用例
#suite.addTest(TestMathMethod('test_add_one'))

#方法二:testloader
loader=unittest.TestLoader()#创建一个加载器
#suite.addTest(loader.loadTestsFromTestCase(TestMathMethod))#某一个类名

#方法三
from 单元测试 import testMathMethod  #具体到模块名
suite.addTest(loader.loadTestsFromModule(testMathMethod))

#执行  上下文管理器
# with open ("test.txt",'w+',encoding='utf-8')  as fp:
#     runner=unittest.TextTestRunner(stream=fp,verbosity=0)
#     runner.run(suite)
# print(fp.close())

#生成HTML格式的测试报告
with open('report.html','w',encoding='utf-8') as fp:
    runner=HTMLTestRunner(stream=fp, verbosity=2,title='单元测试报告',description='第一次测试报告',tester='刘**')
    runner.run(suite)

测试报告截图:
python unittest自动化测试框架_第2张图片

你可能感兴趣的:(python,unittest)