Python Unittest - Test Fixtures 测试夹具

一、什么是测试夹具

  • 定义单个或者多个测试所需的环境准备(setUp),以及环境清理(tearDown)。

  • 例:连接数据库,或者创建Selenium WebDriver driver实例

二、测试夹具有什么作用。

  • 为每一个测试用例提供用例测试环境准备和清理,为每一个用例提供干净的测试环境。
  • 为每一组测试提供用例测试环境准备和清理,为每一组测试提供干净的测试环境。

三、Unittest 三种测试夹具的使用例子。

1、 Unittest 测试夹具 setUp/tearDown

  • setUp 每个用例运行前执行
  • tearDown 每个用例运行后执行

test_example_one.py

# encoding:utf8


import unittest


class TestCaseOne(unittest.TestCase):

    def setUp(self):
        print('---每个用例运行前执行---')

    def tearDown(self):
        print('---每个用例运行结束后执行---')

    def test_case_one(self):
        print('--- 测试用例 1 ---')

    def test_case_two(self):
        print('--- 测试用例 2---')


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

运行结果

test_case_one (__main__.TestCaseOne) ... 
---每个用例运行前执行---
--- 测试用例 1 ---
---每个用例运行结束后执行---
ok

test_case_two (__main__.TestCaseOne) ... 
---每个用例运行前执行---
--- 测试用例 2---
---每个用例运行结束后执行---
ok

2、 Unittest 测试夹具setUpClass/tearDownClass

  • setUpClass 每个测试类里,执行一次,在所有用例运行前执行
  • tearDownClass 每个测试类里,执行一次,在所有用例运行后执行

test_example_two.py

# encoding:utf8

import unittest

class TestCaseOne(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        print('---每个测试类里,执行一次,在所有用例运行前执行---')

    @classmethod
    def tearDownClass(cls):
        print('---每个测试类里,执行一次,在所有用例运行后执行---')

    def test_case_one(self):
        print('--- 测试用例 1 ---')

    def test_case_two(self):
        print('--- 测试用例 2---')


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

运行结果

---每个测试类里,执行一次,在所有用例运行前执行---
test_case_one (__main__.TestCaseOne) ... --- 测试用例 1 ---
ok
test_case_two (__main__.TestCaseOne) ... --- 测试用例 2---
ok
---每个测试类里,执行一次,在所有用例运行后执---

3、 Unittest 测试夹具setUpModule/tearDownModule

  • setUpModule 每个模块里,执行一次,在所有用例运行前执行
  • tearDownModule 每个模块里,执行一次,在所有用例运行后执行

test_example_three.py

# encoding:utf8

import unittest

def setUpModule():
    print('--- 模块运行开始时 ,运行一次 ---')

def tearDownModule():
    print('--- 模块运行结束时 ,运行一次 ---')

class TestCaseOne(unittest.TestCase):

    def test_case_one(self):
        print('--- 测试用例 1 ---')

    def test_case_two(self):
        print('--- 测试用例 2---')

class TestCaseTwo(unittest.TestCase):

    def test_case_three(self):
        print('--- 测试用例 3 ---')

    def test_case_four(self):
        print('--- 测试用例 4---')




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

运行结果

--- 模块运行开始时 ,运行一次 ---
test_case_one (__main__.TestCaseOne) ... --- 测试用例 1 ---
ok
test_case_two (__main__.TestCaseOne) ... --- 测试用例 2---
ok
test_case_four (__main__.TestCaseTwo) ... --- 测试用例 4---
ok
test_case_three (__main__.TestCaseTwo) ... --- 测试用例 3 ---
ok
--- 模块运行结束时 ,运行一次 ---

### Github 源码地址: [https://github.com/SEtester/how_to_run_test_case](https://github.com/SEtester/how_to_run_test_case)


posted @ 2018-12-10 01:42  深圳-逸遥  阅读(1201)  评论(0编辑  收藏  举报