Python3 — unittest框架的使用

参考:

Selenium自动化测试-unittest单元测试框架使用

unittest官方文档


一、前置条件(setUp)、后置条件(tearDown)和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添加的先后顺序执行

输出:

这是所有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)

二、同时运行多个.py文件中的测试用例

准备两个测试文件test_case01.py和test_case02.py(内容与上面类似),里面有需要执行的测试脚本。新建一个run_case.py,用来执行所有测试。

#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()

输出:(标有01的是test_case01.py里面的,02是test_case02.py里面的,将verbosity设为2后结果里也很容易分辨)

这是所有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

另外也可以遍历每个test_case*.py里面的case并将其添加到Test Suite中,最后一并执行,输出结果和上面一样。

#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()
发布了37 篇原创文章 · 获赞 47 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/u013378642/article/details/82386226