unittest框架系列八(unittest的TestResult常用api说明)

TestResult

欢迎加入测试交流群:夜行者自动化测试(816489363)进行交流学习QAQ

–成都-阿木木


class unittest.TestResult

​ 此类用于编译有关那些测试成功和失败的信息。TestResult存储一组测试结果,TestCaseTestSuite保证结果正确记录。通常第三方的测试报告插件通过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.pytest_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>]
  • shouldStop:设置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属性设置为来调用此方法,用来中止正在运行的测试集
posted @ 2020-09-22 10:25  成都-阿木木  阅读(425)  评论(0编辑  收藏  举报