参考:
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()