unittest -官网文档学习笔记-基本知识

官网文档地址如下:
https://docs.python.org/2.7/library/unittest.html?highlight=unittest#test-cases

unittest, 又叫PyUnit, 支持测试自动化,共享测试setup(setUp()方法)和shutdown(tearDown()方法)代码,可以组合测试用例为测试组件(suite)。

一些重要的概念:

test fixture:主要是setUp和cleanup, setUp用于一些初始化操作,cleanup主要用于用例执行完以后,将环境恢复到初始状态。比如我们可以将测试用例分组,相似的可以在同一个类下,共享一样的setup和cleanup,比如说执行前打开页面,创建用户,创建临时数据库等;执行用例后删除用户,关闭页面,等等。

只要setUp()执行了,不管test case是否执行,执行是否沟通,tearDown()都会执行。

test case: 最小测试单元。unittest提供类:TestCase

test suite:是测试用例或者test suite的组合。unittest提供类:TestSuite

test runner: 测试执行和输出。该对象提供一个方法:run(),可以接受TestCase或者TestSuite作为参数,返回测试结果。类:TestResult提供给用户作为结果对象。unittest提供类TextTestRunner。

举例练习如下:

import unittest
class TestPY(unittest.TestCase):
    #def setUp(self):
    
    #def tearDown(self):
    
    def test_upper(self):
        self.assertEqual('foo'.upper(),'FOO')
        
    def test_isupper(self):
        self.assertTrue('FOO'.isupper())
              
if __name__=="__main__":
    unittest.main()

结果:

Ran 2 tests in 0.000s

OK

代码最后两行替换为:

suite = unittest.TestLoader().loadTestsFromTestCase(TestPY)
unittest.TextTestRunner(verbosity=2).run(suite)

结果:

test_isupper (__main__.TestPY) ... ok
test_upper (__main__.TestPY) ... ok

----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK

只执行第一条case,最后两行代码更新如下:

注意:TestCase类有一个参数,MethodName=runTest;所以参数里要给出method name。

testcase = TestPY('test_upper')
runner = unittest.TextTestRunner(verbosity=2)
runner.run(testcase)

结果:

est_upper (__main__.TestPY) ... ok

----------------------------------------------------------------------
Ran 1 test in 0.000s

OK

Command-Line interface:

格式如下:

python -m unittest test_module1 test_module2
python -m unittest test_module.TestClass
python -m unittest test_module.TestClass.test_method

帮助:

python -m unittest -h

Test Discovery:

TestLoader.discover()

-v: verbose
-s: start directory(. default)
-p: pattern,常用(test*.py by default)

python -m unittest discover -s project_directory -p '*_test.py'
python -m unittest discover project_directory '*_test.py'

Test Suite练习:

原始练习代码最后两行可更新为:

suite = unittest.TestSuite()
suite.addTest(TestPY('test_upper'))
suite.addTest(TestPY('test_isupper'))
unittest.TextTestRunner().run(suite)

Skipping tests and expected failures:

Skipping tests: 用于skip某个test方法或者类。

使用方法如下:

class MyTestCase(unittest.TestCase):

    @unittest.skip("demonstrating skipping")
    def test_nothing(self):
        self.fail("shouldn't happen")

    @unittest.skipIf(mylib.__version__ < (1, 3),
                     "not supported in this library version")
    def test_format(self):
        # Tests that work for only a certain version of the library.
        pass

    @unittest.skipUnless(sys.platform.startswith("win"), "requires Windows")
    def test_windows_support(self):
        # windows specific testing code
        pass
@unittest.skip("showing class skipping")
class MySkippedTestCase(unittest.TestCase):
    def test_not_run(self):
        pass
原文地址:https://www.cnblogs.com/isister/p/4638743.html