unittest框架系列八(unittest的TestResult常用api说明)
TestResult
欢迎加入测试交流群:夜行者自动化测试(816489363)进行交流学习QAQ
–成都-阿木木
class unittest.TestResult
此类用于编译有关那些测试成功和失败的信息。TestResult存储一组测试结果,TestCase
和TestSuite
保证结果正确记录。通常第三方的测试报告插件通过TestResult
生成测试报告。
使用如下代码进行测试:
#!/user/bin/env python
# -*- coding: utf-8 -*-
"""
------------------------------------
@Project : mysite
@Time : 2020/8/28 11:32
@Auth : chineseluo
@Email : 848257135@qq.com
@File : unittest_demo.py
@IDE : PyCharm
------------------------------------
"""
import unittest
import sys
class TestStringMethods(unittest.TestCase):
def setUp(self):
print("运行于测试方法前,主要用于环境初始化")
def tearDown(self):
print("运行于测试方法后,主要用户环境数据清理")
def test_upper(self):
print("this is a test_upper method")
self.assertEqual('foo'.upper(), 'FOO')
def test_isupper(self):
"""
这是一个描述
:return:
"""
print("this is a test_isupper method")
self.assertTrue('FOO'.isupper())
self.assertFalse('Foo'.isupper())
def test_error(self):
num = [1, 2, 3]
print(num[9])
self.assertEqual(num[0], 2)
def test_split(self):
print("this is a test_split method")
s = 'hello world'
self.assertEqual(s.split(), ['hello', 'world'])
# check that s.split fails when the separator is not a string
with self.assertRaises(TypeError):
s.split(2)
def fail(self, msg="test fail ha ha ha"):
print("用例执行错误信息:{}".format(msg))
if __name__ == '__main__':
unittest.main()
TestResult
实例具有以下属性:
errors
:返回一个列表,每一个元组代表一个测试,其中的元组包含TestCase
实例和格式化回溯的错误字符串信息
import unittest
if __name__ == '__main__':
suite1 = unittest.TestSuite()
suite = unittest.defaultTestLoader.discover(start_dir="case", pattern="unittest_*.py", top_level_dir="../mysite")
result = unittest.TextTestRunner().run(suite)
print(result.errors)
结果为:
运行于测试方法前,主要用于环境初始化
运行于测试方法后,主要用户环境数据清理
运行于测试方法前,主要用于环境初始化
this is a test_isupper method
运行于测试方法后,主要用户环境数据清理
运行于测试方法前,主要用于环境初始化
this is a test_split method
运行于测试方法后,主要用户环境数据清理
运行于测试方法前,主要用于环境初始化
this is a test_upper method
运行于测试方法后,主要用户环境数据清理
[(<case.unittest_demo.TestStringMethods testMethod=test_error>, 'Traceback (most recent call last):\n File "D:\\TestScriptDir\\python_web\\mysite\\case\\unittest_demo.py", line 40, in test_error\n print(num[9])\nIndexError: list index out of range\n')]
E...
======================================================================
ERROR: test_error (case.unittest_demo.TestStringMethods)
----------------------------------------------------------------------
Traceback (most recent call last):
File "D:\TestScriptDir\python_web\mysite\case\unittest_demo.py", line 40, in test_error
print(num[9])
IndexError: list index out of range
----------------------------------------------------------------------
Ran 4 tests in 0.001s
FAILED (errors=1)
failures
:返回一个列表,每一个元组代表一个测试,其中的元组包含TestCase
实例和格式化回溯的断言失败的测试字符串信息
入口run.py
:
import unittest
if __name__ == '__main__':
suite1 = unittest.TestSuite()
suite = unittest.defaultTestLoader.discover(start_dir="case", pattern="unittest_*.py", top_level_dir="../mysite")
result = unittest.TextTestRunner().run(suite)
print(result.failures)
修改unittest_demo.py
中的test_error
方法如下:
def test_error(self):
num = [1, 2, 3]
self.assertEqual(num[0], 2)
修改unittest_demo.py
中的test_upper
方法为如下:
def test_upper(self):
print("this is a test_upper method")
self.assertEqual('foo'.upper(), 'FO')
F..s
======================================================================
FAIL: test_error (case.unittest_demo.TestStringMethods)
----------------------------------------------------------------------
Traceback (most recent call last):
File "D:\TestScriptDir\python_web\mysite\case\unittest_demo.py", line 41, in test_error
self.assertEqual(num[0], 2)
AssertionError: 1 != 2
----------------------------------------------------------------------
Ran 4 tests in 0.001s
FAILED (failures=1, skipped=1)
运行于测试方法前,主要用于环境初始化
运行于测试方法后,主要用户环境数据清理
运行于测试方法前,主要用于环境初始化
this is a test_isupper method
运行于测试方法后,主要用户环境数据清理
运行于测试方法前,主要用于环境初始化
this is a test_split method
运行于测试方法后,主要用户环境数据清理
[(<case.unittest_demo.TestStringMethods testMethod=test_error>, 'Traceback (most recent call last):\n File "D:\\TestScriptDir\\python_web\\mysite\\case\\unittest_demo.py", line 41, in test_error\n self.assertEqual(num[0], 2)\nAssertionError: 1 != 2\n')]
- skipped:返回一个列表,每一个元组代表一个测试,其中的元组包含
TestCase
实例和格式化回溯的跳过测试的字符串信息
入口run.py
:
import unittest
if __name__ == '__main__':
suite1 = unittest.TestSuite()
suite = unittest.defaultTestLoader.discover(start_dir="case", pattern="unittest_*.py", top_level_dir="../mysite")
result = unittest.TextTestRunner().run(suite)
print(result.skipped)
修改unittest_demo.py
中的test_error
:
def test_error(self):
num = [1, 2, 3]
self.assertEqual(num[0], 1)
修改unittest_demo.py
的test_upper
:
@unittest.skip("跳过该测试")
def test_upper(self):
print("this is a test_upper method")
self.assertEqual('foo'.upper(), 'FOO')
结果:
...s
----------------------------------------------------------------------
Ran 4 tests in 0.000s
OK (skipped=1)
运行于测试方法前,主要用于环境初始化
运行于测试方法后,主要用户环境数据清理
运行于测试方法前,主要用于环境初始化
this is a test_isupper method
运行于测试方法后,主要用户环境数据清理
运行于测试方法前,主要用于环境初始化
this is a test_split method
运行于测试方法后,主要用户环境数据清理
[(<case.unittest_demo.TestStringMethods testMethod=test_upper>, '跳过该测试')]
Process finished with exit code 0
expectedFailures
:返回一个列表,每一个元组代表一个测试,其中的元组包含Testcase
实例和格式化回溯的预期测试失败的字符串信息
入口run.py
:
import unittest
if __name__ == '__main__':
suite1 = unittest.TestSuite()
suite = unittest.defaultTestLoader.discover(start_dir="case", pattern="unittest_*.py", top_level_dir="../mysite")
result = unittest.TextTestRunner().run(suite)
print(result.expectedFailures)
修改unittest_demo.py
文件的test_upper
:
@unittest.expectedFailure
def test_upper(self):
print("this is a test_upper method")
self.assertEqual('foo'.upper(), 'FO')
结果:
...x
----------------------------------------------------------------------
Ran 4 tests in 0.001s
OK (expected failures=1)
运行于测试方法前,主要用于环境初始化
运行于测试方法后,主要用户环境数据清理
运行于测试方法前,主要用于环境初始化
this is a test_isupper method
运行于测试方法后,主要用户环境数据清理
运行于测试方法前,主要用于环境初始化
this is a test_split method
运行于测试方法后,主要用户环境数据清理
运行于测试方法前,主要用于环境初始化
this is a test_upper method
运行于测试方法后,主要用户环境数据清理
[(<case.unittest_demo.TestStringMethods testMethod=test_upper>, 'Traceback (most recent call last):\n File "D:\\TestScriptDir\\python_web\\mysite\\case\\unittest_demo.py", line 28, in test_upper\n self.assertEqual(\'foo\'.upper(), \'FO\')\nAssertionError: \'FOO\' != \'FO\'\n- FOO\n? -\n+ FO\n\n')]
unexpectedSuccesses
:返回一个列表,每一个元组代表一个测试,其中的元组包含TestCase
实例和格式化回溯的预期测试失败但是成功的的字符串信息
入口run.py
:
import unittest
if __name__ == '__main__':
suite1 = unittest.TestSuite()
suite = unittest.defaultTestLoader.discover(start_dir="case", pattern="unittest_*.py", top_level_dir="../mysite")
result = unittest.TextTestRunner().run(suite)
print(result.unexpectedSuccesses)
结果:
...u
----------------------------------------------------------------------
Ran 4 tests in 0.000s
FAILED (unexpected successes=1)
运行于测试方法前,主要用于环境初始化
运行于测试方法后,主要用户环境数据清理
运行于测试方法前,主要用于环境初始化
this is a test_isupper method
运行于测试方法后,主要用户环境数据清理
运行于测试方法前,主要用于环境初始化
this is a test_split method
运行于测试方法后,主要用户环境数据清理
运行于测试方法前,主要用于环境初始化
this is a test_upper method
运行于测试方法后,主要用户环境数据清理
[<case.unittest_demo.TestStringMethods testMethod=test_upper>]
shouldSto
p:设置shouldstop
属性为true
时,停止测试,一般和测试套配合使用,例如:检查到某些测试的方法名异常,就立刻停止测试
import unittest
if __name__ == '__main__':
result = unittest.TestResult()
result.shouldStop=True
testsRun
:显示到目前为止的测试总数
入口run.py
:
import unittest
if __name__ == '__main__':
suite1 = unittest.TestSuite()
suite = unittest.defaultTestLoader.discover(start_dir="case", pattern="unittest_*.py", top_level_dir="../mysite")
result = unittest.TextTestRunner().run(suite)
print(result.testsRun)
结果:
...u
----------------------------------------------------------------------
Ran 4 tests in 0.000s
FAILED (unexpected successes=1)
运行于测试方法前,主要用于环境初始化
运行于测试方法后,主要用户环境数据清理
运行于测试方法前,主要用于环境初始化
this is a test_isupper method
运行于测试方法后,主要用户环境数据清理
运行于测试方法前,主要用于环境初始化
this is a test_split method
运行于测试方法后,主要用户环境数据清理
运行于测试方法前,主要用于环境初始化
this is a test_upper method
运行于测试方法后,主要用户环境数据清理
4
buffer
:如果设置为True
,测试成功,不显示输出,测试失败,显示输出
import unittest
if __name__ == '__main__':
result = unittest.TestResult()
result.buffer=True
-
failfast
:如果设置为true,在第一次失败的时候就调用stop()
,并且终止测试 -
tb_locals
:如果设置为true,则局部变量在回溯中显示 -
wasSuccessful()
:所有测试运行通过返回True
,否则返回False
入口run.py
:
import unittest
if __name__ == '__main__':
suite1 = unittest.TestSuite()
suite = unittest.defaultTestLoader.discover(start_dir="case", pattern="unittest_*.py", top_level_dir="../mysite")
result = unittest.TextTestRunner().run(suite)
print(result.wasSuccessful())
...u
----------------------------------------------------------------------
Ran 4 tests in 0.001s
FAILED (unexpected successes=1)
运行于测试方法前,主要用于环境初始化
运行于测试方法后,主要用户环境数据清理
运行于测试方法前,主要用于环境初始化
this is a test_isupper method
运行于测试方法后,主要用户环境数据清理
运行于测试方法前,主要用于环境初始化
this is a test_split method
运行于测试方法后,主要用户环境数据清理
运行于测试方法前,主要用于环境初始化
this is a test_upper method
运行于测试方法后,主要用户环境数据清理
False
stop()
:可以通过将此shouldStop
属性设置为来调用此方法,用来中止正在运行的测试集