美文网首页
Python unnitest 测试框架

Python unnitest 测试框架

作者: 浪花三朵 | 来源:发表于2020-12-16 18:21 被阅读0次

    unittest核心工作原理

    unittest中最核心的四个概念是:test case, test suite, test runner, test fixture。
    下面我们分别来解释这四个概念的意思,先来看一张unittest的静态类图:


    unnitest
    • 一个TestCase的实例就是一个测试用例。什么是测试用例呢?就是一个完整的测试流程,包括测试前准备环境的搭建(setUp),执行测试代码(run),以及测试后环境的还原(tearDown)。元测试(unit test)的本质也就在这里,一个测试用例是一个完整的测试单元,通过运行这个测试单元,可以对某一个问题进行验证。

    • 而多个测试用例集合在一起,就是TestSuite,而且TestSuite也可以嵌套TestSuite。

    • TestLoader是用来加载TestCase到TestSuite中的,其中有几个loadTestsFrom__()方法,就是从各个地方寻找TestCase,创建它们的实例,然后add到TestSuite中,再返回一个TestSuite实例。

    • TextTestRunner(HTMLTestRunner)是来执行测试用例的,其中的run(test)会执行TestSuite/TestCase中的run(result)方法。测试的结果会保存到TextTestResult(HTMLTestResult)实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息。

    • 而对一个测试用例环境的搭建和销毁,是一个fixture。

    unittest实例

    import unittest
    
    
    class MyTest(unittest.TestCase):
        @classmethod
        def setUpClass(cls):
            print("环境已经准备好,执行所有用例开始")
    
        @classmethod
        def tearDownClass(cls):
            print("所有用例执行完毕")
    
        def setUp(self):
            print("start")
    
        def tearDown(self):
            print("end")
    
        def test_join(self):
            a = 5 + 1;
            self.assertEqual(a, 6)
            print(a)
    
        def test_join1(self):
            b = 5 + 2;
            self.assertEqual(b, 7)
            print(b)
    
        @unittest.skip
        def test_join2(self):
            b = 5 + 2;
            self.assertEqual(b, 10)
            print(b)
    
    
    if __name__ == "__main__":
        suite = unittest.TestSuite()
        tests = [MyTest("test_join"), MyTest("test_join1")]
        suite.addTests(tests)
        runner = unittest.TextTestRunner()
        runner.run(suite())
    
    
    import unittest
    
    #from facade.joinquntest import MyTest
    
    # suite = unittest.TestSuite()
    # suite.addTest(MyTest("test_join"))
    # suite.addTest(MyTest("test_join1"))
    # runner = unittest.TextTestRunner()
    # runner.run(suite)
    suit = unittest.defaultTestLoader.discover("./","join*.py")
    runner = unittest.TextTestRunner()
    runner.run(suit)
    

    skip装饰器一共有三个 unittest.skip(reason)、unittest.skipIf(condition, reason)、unittest.skipUnless(condition, reason),skip无条件跳过,skipIf当condition为True时跳过,skipUnless当condition为False时跳过。

    进阶——用HTMLTestRunner输出漂亮的HTML报告

    我们能够输出txt格式的文本执行报告了,但是文本报告太过简陋,是不是想要更加高大上的HTML报告?但unittest自己可没有带HTML报告,我们只能求助于外部的库了。

    HTMLTestRunner是一个第三方的unittest HTML报告库,首先我们下载HTMLTestRunner.py,并放到当前目录下,或者你的’C:\Python36\Lib’下

    源码附件地址HTMLTestRunner.py

    import unittest
    from facade.HTMLTestRunner import HTMLTestRunner
    import time
    
    cases = unittest.defaultTestLoader.discover("./facade/","join*.py")
    nowtime = time.strftime("%Y-%m-%d:%H:%M:%S")
    with(open('./reports/'+nowtime+'result.html', 'wb')) as fp:
        runner = HTMLTestRunner(
            stream=fp,
            title='自动化测试',
            description='无其他依赖'
        )
        runner.run(cases,rerun=0,save_last_run=False)
    
    

    HTMLTestRunner类说明:

    stream : 指定报告的路径
    title : 报告的标题
    description : 报告的描述
    run()方法说明:
    suit : 运行的测试套件
    rerun :重跑次数
    save_last_run :是否保存最后一个结果

    总结

    • unittest是Python自带的单元测试框架,我们可以用其来作为们自动化测试框架的用例组织执行框架。
    • unittest的流程:写好TestCase,然后由TestLoader加TestCase到TestSuite,然后由TextTestRunner来运行TestSuite,运行的结果保存在TextTestResult中,我们通过命令行或者unittest.main()执行时,main会调用TextTestRunner中的run来执行,或者我们可以直接通过TextTestRunner来执行用例。
    • 一个class继承unittest.TestCase即是一个TestCase,其中以 test开头的方法在load时被加载为一个真正的TestCase。
    • verbosity参数可以控制执行结果的输出,0 是简单报告、1 是一般报告、2 是详细报告。
    • 可以通过addTest和addTests向suite中添加case或suite,可以用TestLoader的loadTestsFrom__()方法。
    • 用 setUp()、tearDown()、setUpClass()以及 tearDownClass()可以在用例执行前布置环境,以及在用例执行后清理环境
    • 我们可以通过skip,skipIf,skipUnless装饰器跳过某个case,或者用TestCase.skipTest方法。
    • 参数中加stream,可以将报告输出到文件:可以用TextTestRunner输出txt报告,以及可以用HTMLTestRunner输出html报告。
      原文链接:https://blog.csdn.net/qq_33214066/article/details/107295051

    相关文章

      网友评论

          本文标题:Python unnitest 测试框架

          本文链接:https://www.haomeiwen.com/subject/dzlogktx.html