• unittest 框架


    最近在看unittest框架,总结一下自己看到的东西

    框架包括了几个内容:test case, test suite, test runner, test fixture

    盗用一下网上烂大街但是还不错的图

      好吧,图片插不进来

    最多废话一句,Python的unittest框架里都是用类来办事的(Python的其他框架应该也是,不过我现在没用到)

    test case的类是unittest.TestCase ; test suite的类是unittest.TestSuit; test runner的类是unittest.TextTestRunner;test fixture也是unittest.TestCase类

    1.首先最简单的,只用有test case就可以了

    # coding:utf-8
    import unittest
    
    class TestCaseTry(unittest.TestCase):
        def test_add(self):
            self.assertEqual(3,1+2)
    
        def test_minus(self):
            self.assertNotEqual(4,6-4)
    
    
    if __name__== "__main__" :
        unittest.main()

    如上代码,创建一个类,继承于unittest.TestCase, 里面定义函数,函数一定要以test开头;然后运行unittest.main(),TestCaseTry里面的两个函数就会变成用例执行;即使类和unittest不在一个文件也没关系,只要import了测试类就行,Python就是这么灵活

    2.test runner,首先我现在对testrunner的理解可能是肤浅的,以后如果深刻了我再来改;testrunner是为了testcase跑的更好 ,它可以加参数,比如说将test case结果记录到文件,(我现在也只是用到这个)

    把刚刚那个文件保存为testcase.py ;然后新建一个testrun.py 

    from testcase import TestCaseTry
    import unittest
    
    run=unittest.TextTestRunner()
    run.run(TestCaseTry("test_add"))

    跑一下,执行test_add这个测试函数,跟1没区别,下面区别来了

    (一)

    from testcase import TestCaseTry
    import unittest
    
    f=open("test_file.txt","w")
    run=unittest.TextTestRunner(stream=f,verbosity=2)
    run.run(TestCaseTry("test_add"))
    f.close()

    (二)

    from testcase import TestCaseTry
    import unittest
    
    with open("test_file.txt",'w') as f:
        run=unittest.TextTestRunner(stream=f,verbosity=2)
        run.run(TestCaseTry("test_add"))

    (一)和(二)效果一样,(一)是老方法,(二)是新方法,并且把异常处理都包含在with as里面了;效果就是创建了一个test_file.txt;把测试结果放进去了;verbosity是详细程度,注意

    TextTestRunner(stream=f,verbosity=2)参数

    文件内容

    test_add (testcase.TestCaseTry) ... ok
    
    ----------------------------------------------------------------------
    Ran 1 test in 0.000s
    
    OK

    3.test suite,可以看到2中的例子,我只能执行一个测试用例,怎么执行多个,且让他们有序执行呢,test suite就是答案

     首先需要将测试用例加到suite中,这里要用到unittest.TestLoader类

    loader=unittest.TestLoader()
    namelist=loader.getTestCaseNames(TestCaseTry)

    这里可以用getTestCaseNames函数也可以用类里的其他函数,如上就将类TestCaseTry里面的测试函数,都列到namelist列表中

    然后将列表中的测试函数,加到suite中,下边就不分开写了,放个整的程序

    import unittest
    from testcase import TestCaseTry
    #获取类中的测试用例
    loader=unittest.TestLoader()
    namelist=loader.getTestCaseNames(TestCaseTry)
    
    #将类中的测试用例加到suite中
    suite=unittest.TestSuite()
    for name in namelist:
        suite.addTest(TestCaseTry(name))
    
    #执行并写入文件
    with open("test_file.txt",'w') as f:
        run=unittest.TextTestRunner(stream=f,verbosity=2)
        run.run(suite)

    执行成功,log文件如下

    test_add (testcase.TestCaseTry) ... ok
    test_minus (testcase.TestCaseTry) ... ok
    
    ----------------------------------------------------------------------
    Ran 2 tests in 0.000s
    
    OK

    4.最后说说test fixture,说实话这个我也是看来的,不是太清楚到底啥意思,大概就是在TestCase 类中有两个函数,一个是setup()一个是teardown().用来用例开始时设置内容,用例运行结束时清理环境,要加载TestCaseTry类里面

    class TestCaseTry(unittest.TestCase):
        def setUp(self):
            self.a=3
        def test_add(self):
            self.assertEqual(self.a,1+2)
    
        def test_minus(self):
            self.assertNotEqual(3,self.a)

    setUP大概这么用,tearDown还不知道怎么用

    注意一点,Python里的类是这样写unittest.TestSuite,但是如果要创建一个类对象,一定要加括号这样写suite=unittest.TestSuite()

    以上

  • 相关阅读:
    ubuntu18 升级cmake
    开源镜像站汇总
    ubuntu18安装go
    tendermint框架及Tx执行流程
    常用python内置函数
    根据列号返回列名
    Valid Number
    Remove Duplicates from Sorted List II
    vector排序问题<unresolved overloaded function type>
    Spiral Matrix
  • 原文地址:https://www.cnblogs.com/mghhzAnne/p/8952119.html
Copyright © 2020-2023  润新知