Python3 - using the unittest framework

reference:

Selenium automated test unit testing framework using -unittest

unittest official documents


First, the pre-conditions (the setUp), postconditions (the tearDown) and using Test Suite

#文件名:test_case01.py
#coding=utf-8
import unittest
class TestCase_01(unittest.TestCase): # 继承unittest.TestCase

    @classmethod
    def setUpClass(cls):
        print('这是所有case的前置条件01')

    @classmethod
    def tearDownClass(cls):
        print('这是所有case的后置条件01')

    def setUp(self):
        print('这是每条case的前置条件01')

    def tearDown(self):
        print('这是每条case的后置条件01')

    def testThird_01(self): # 测试用例的命名必须以test开头,否则不予执行
        print('01: 第三条case')

    def testFirst_01(self): 
        print('01: 第一条case')

    @unittest.skip('不执行这条case') # 跳过这条case
    def testSecond_01(self):
        print('01: 第二条case') 

    def testFourth_01(self):
        print('01: 第四条case') 

if __name__ == '__main__':
    # unittest.main() # 使用main()直接运行时,将按case的名称顺序执行
    suite = unittest.TestSuite()
    suite.addTest(TestCase_01('testThird_01')) # 将需要执行的case添加到Test Suite中,没有添加的不会被执行
    suite.addTest(TestCase_01('testSecond_01'))
    suite.addTest(TestCase_01('testFirst_01'))
    unittest.TextTestRunner().run(suite) # 将根据case添加的先后顺序执行

Output:

这是所有case的前置条件01
这是每条case的前置条件01
01: 第三条case
这是每条case的后置条件01
.s这是每条case的前置条件01
01: 第一条case
这是每条case的后置条件01
.这是所有case的后置条件01

----------------------------------------------------------------------
Ran 3 tests in 0.001s

OK (skipped=1)

Second, run multiple test cases .py files

Prepare two test files test_case01.py and test_case02.py (content similar to the above), there are test scripts to be executed. Create a run_case.py, used to perform all tests.

#run_case.py
#coding=utf-8
import unittest
import os

class RunCase(unittest.TestCase):
    def test_case(self):
        case_path = os.getcwd() #case所在路径
        discover = unittest.defaultTestLoader.discover(case_path,pattern="test_case*.py") 
        # discover相当于在指定的case所在的路径里寻找所有名称模式匹配pattern的文件并加载其内容
        runner = unittest.TextTestRunner(verbosity=2) # verbosity控制输出的执行结果的详细程度,可为0,1,2,其中0最简单,1是默认值,2最详细
        runner.run(discover)

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

:( marked with an output of 01 is test_case01.py inside, 02 is test_case02.py inside the verbosity to 2 years after the result is also very easy to distinguish)

这是所有case的前置条件01
testFirst_01 (test_case01.TestCase_01) ... 这是每条case的前置条件01
01: 第一条case
这是每条case的后置条件01
ok
testFourth_01 (test_case01.TestCase_01) ... 这是每条case的前置条件01
01: 第四条case
这是每条case的后置条件01
ok
testSecond_01 (test_case01.TestCase_01) ... skipped '不执行这条case'
testThird_01 (test_case01.TestCase_01) ... 这是每条case的前置条件01
01: 第三条case
这是每条case的后置条件01
ok
这是所有case的后置条件01
这是所有case的前置条件02
testFirst_02 (test_case02.TestCase_02) ... 这是每条case的前置条件02
02: 第一条case
这是每条case的后置条件02
ok
testSecond_02 (test_case02.TestCase_02) ... 这是每条case的前置条件02
02: 第二条case
这是每条case的后置条件02
ok
testThird_01 (test_case02.TestCase_02) ... 这是每条case的前置条件02
01: 第三条case
这是每条case的后置条件02
ok
这是所有case的后置条件02

----------------------------------------------------------------------
Ran 7 tests in 0.006s

OK (skipped=1)
.
----------------------------------------------------------------------
Ran 1 test in 0.021s

OK

Further may traverse each test_case * .py inside the case and added to the Test Suite, the last performed together, and outputs the same as above.

#run_case.py
#coding=utf-8
import unittest
import os

class RunCase(unittest.TestCase):
    def test_case(self):
        case_path = os.getcwd() #case所在路径
        discover = unittest.defaultTestLoader.discover(case_path,pattern="test_case*.py")
        runner = unittest.TextTestRunner(verbosity=2)
        # runner.run(discover)
        test_unit = unittest.TestSuite()
        for test_suite in discover:
            for test_case in test_suite:
                test_unit.addTest(test_case)
        runner.run(test_unit)

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

 

Published 37 original articles · won praise 47 · Views 100,000 +

Guess you like

Origin blog.csdn.net/u013378642/article/details/82386226