04-03 unitest--框架重要概念

测试开发 unittest 测试框架

框架的结构

unittest的入门学习

-----作者 老男孩教育 Robert讲师

前言

前面我们已经通过对unittest有过安装和运行,在脑海里对这个unittest的面目有个真实的印象。

知道它对于一个有python解释器的设备来说,是默认存在的,根本无需额外的安装步骤。

它的运行也是极其简单,一行命令就可以运行或者在ide里面也是一键就可以运行。

那么今天我们要更加深入的来了解它的内部机制,也就是unittest框架的基本概念。

概念一: 测试脚手架

专门的库fixtures()

运行用例需要的前提准备工作,还有 运行完成的清理工作。通过这个可以避免

例如: 对一个测试用例执行环境时需要的文件创建和销毁,

通常会有setUp,tearDown默认的函数。

import unittest

class MyTestClass(unittest.TestCase):

    def setUp(self) -> None:
        with open(file="tmp.txt" ,mode='w',encoding='utf-8') as fw:
            fw.write("OK")


    def tearDown(self) -> None:
        # with open(file="tmp.txt", mode='w') as fw:
        #     fw.write("")
        pass

    def test_day03(self):

        with open(file="tmp.txt" ,mode='r') as fw:
            fc =fw.read()
            print(fc)

        self.assertEqual(fc.strip(),"OK")
# 用pycharm  IDE运行结果如下
Ran 1 test in 0.003s

OK

Process finished with exit code 0

概念二: 测试用例

关键字: TestCase

最小单元,测试用例。无需多解释。

    def test_dat04(self):
        self.assertEqual(1000,int("1000"))

概念三: 测试套件

关键字: TestSuite

用法: unittest.TestSuite() 类

多个子用例组合起来就是一个套件。可以理解成用例组合,理解成TestCases。

下面例子中就有测试套件。

# 定义一个测试套件
def daysuite():
    tmp_suite =unittest.TestSuite()
    tmp_suite.addTests(MyTestClass.test_day03(),MyTestClass.test_dat04())

    return tmp_suite

概念四: 测试运行器

关键字: TestTestRunner

执行测试用例和输出测试结果的组件。

用法: unittest.TextTestRunner()类

    ruunner = unittest.TextTestRunner()
    ruunner.run(daysuite())

综合案例:

import unittest

class MyTestClass(unittest.TestCase):

    def setUp(self) -> None:
        with open(file="tmp.txt" ,mode='w',encoding='utf-8') as fw:
            fw.write("OK")


    def tearDown(self) -> None:
        with open(file="tmp.txt", mode='w') as fw:
            fw.write("")

    def test_day03(self):

        with open(file="tmp.txt" ,mode='r') as fw:
            fc =fw.read()
            print(fc)

        self.assertEqual(fc.strip(),"OK")

    def test_dat04(self):
        self.assertEqual(1000,int("1000"))


def daysuite():
    tmp_suite =unittest.TestSuite()
    tmp_suite.addTests(MyTestClass.test_day03(),MyTestClass.test_dat04())

    return tmp_suite

if __name__=="__main__":
    ruunner = unittest.TextTestRunner()
    ruunner.run(daysuite())
       
# 用法:
def daysuite():
    tmp_suite =unittest.TestSuite()
    tmp_suite.addTests(MyTestClass.test_day03(),MyTestClass.test_dat04())

    return tmp_suite

if __name__=="__main__":
    ruunner = unittest.TextTestRunner()
    ruunner.run(daysuite())

test runner 是一个用于执行和输出测试结果的组件。这个运行器可能使用图形接口、文本接口,或返回一个特定的值表示运行测试的结果。

执行结果如下:

(testops) C:\Users\Robert\PycharmProjects\testops>python -m unittest Stage5\06unittest\day04.py
.OK
.
----------------------------------------------------------------------
Ran 2 tests in 0.002s

OK

额外的unittest概念

概念五: 测试装载

TestLoder:

关键字: TestLoder

用法一: unittest.TestLoader.loadTestsFromTestCase("MyTestClass")

作用: 把单个或多个测试用例加载到测试套件中。

def daysuite():
    tmp_suite =unittest.TestSuite()
    tmp_suite = unittest.TestLoader.loadTestsFromTestCase("MyTestClass")

    return tmp_suite

unittest 源代码查看& 分析:

dir(unittest.TestLoader)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_find_test_path', '_find_tests', '_get_directory_containing_module', '_get_module_from_name', '_get_name_from_path', '_match_path', '_top_level_dir', 'discover', 'getTestCaseNames', 'loadTestsFromModule', 'loadTestsFromName', 'loadTestsFromNames', 'loadTestsFromTestCase', 'sortTestMethodsUsing', 'suiteClass', 'testMethodPrefix', 'testNamePatterns']

由此我们可以知道 加载测试用例的方法有 5+

概念六: 测试结果 (不要求掌握)

关键字: TextTestRusult

用法: 有歧义的东西

在测试结果中增加成果/失败,跳过等等操作。

结合httptestRunner来运行最好理解。这里不多少。

小结:

  1. 导入unittest模块
  2. 类名的第一个字母大写;
  3. 类要继承unittest.TestCase;
  4. 测试函数前必须加test,否则不会被当作测试用例来执行;
  5. setUp()和tearDown()方法每个测试用例都会执行;
posted @ 2019-10-23 22:30  小猿取经-林海峰老师  阅读(98)  评论(0编辑  收藏  举报