软测入门(九)unit test

unit test

核心概念

  • TestCase:测试用例:用类的方式 组织对一个功能的多项测试
  • Fixture : 夹具,用来固定测试环境
  • TestSuite:测试套件:组织多个TestCase
  • TestRunner:测试执行:用来执行TestSuit,可以导出测试结果

入门

  • 类需要继承unittest.TestCase
  • 需要以test开头的实例方法,且不能有参数。

unittest是python自带的,需要额外去安装组件。

import unittest

class TestOne(unittest.TestCase):

    def test_01(self):
        print("这是test_01")

    def test_02(self):
        print("这是test_02")


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

断言

TestCase中有assert开头的方法,各种关系断言。

软测入门(九)unit test_第1张图片

软测入门(九)unit test_第2张图片

软测入门(九)unit test_第3张图片

import unittest

class TestOne(unittest.TestCase):

    def test_01(self):
        print("这是test_01")
        self.assertIn("a", "hello")

    def test_02(self):
        print("这是test_02")

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

子测试

可以用来执行多次相似的测试(参数不同)。并得到多次测试结果。

import unittest

class NumberTest(unittest.TestCase):

    def test_even(self):
        for i in range(0, 6):
            with self.subTest(i=i):
                self.assertEqual(i % 2, 0)

软测入门(九)unit test_第4张图片

当 i=1,3,5时断言失败,但不影响全部参数一组测试的执行。

夹具

  • 模块级别:文件被加载和销毁时执行
  • 类级别:类信息被加载和销毁时执行
  • 实例级别:每个实例中的方法被调用和执行完毕后执行
# @creator by wlh
# @date 2023/3/8 10:50

import unittest

# 模块级别
def setUpModule():
    print("setUpModule")
def tearDownModule():
    print("tearDownModule")

class TestOne(unittest.TestCase):

    # 类级别
    @classmethod
    def setUpClass(cls):
        print("setUpClass")
    @classmethod
    def tearDownClass(cls):
        print("tearDownClass")

    # 测试方法
    def test_01(self):
        print("这是test_01")
    def test_02(self):
        print("这是test_02")
	
    # 实例级别
    def setUp(self):
        print("setUp")
    def tearDown(self):
        print("tearDown")

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

测试套件 TestSuit

  • 添加单个测试方法
import unittest
from unittest import TextTestRunner
from unittestcode.test_unit_01 import TestOne

# 获取 套件实例
suite = unittest.TestSuite()
# 添加要测试的方法
suite.addTest(TestOne("test_01"))
# 获取runner实例
runner = TextTestRunner()
# 开始执行
runner.run(suite)

############################################################################
setUpModule
setUpClass
setUp
这是test_01
tearDown
tearDownClass
tearDownModule
  • 批量
# 添加要测试的方法  ---- 单量
# suite.addTest(TestOne("test_01"))

# 添加多个测试方法  ---- 批量
suite.addTests(map(TestOne, ["test_01", "test_02"]))
  • 全部
# @creator by wlh
# @date 2023/3/8 11:22
import unittest
from unittest import TextTestRunner
from unittest.loader import makeSuite
from unittestcode.test_unit_01 import TestOne

# 获取 套件实例
suite = unittest.TestSuite()
# 执行全部
suite.addTest(makeSuite(TestOne))
# 获取runner实例
runner = TextTestRunner()
# 开始执行
runner.run(suite)

TestLoader

通过指定规则,快速找到所有的测试用例(即一个TestSuite)

import unittest
from unittest import TextTestRunner

test_dir = "./"
# 获取 套件实例 找当前目录下所有的 test_ 开头的文件
suite = unittest.defaultTestLoader.discover(test_dir, pattern="test_*.py")
# 获取runner实例
runner = TextTestRunner()
# 开始执行
runner.run(suite)

测试报告

  • 安装第三方插件

    pip install html-testRunner
    
  • 执行测试,生成报告

    import unittest
    
    import HtmlTestRunner.runner
    
    test_dir = "./"
    # 获取 套件实例 找当前目录下所有的 test_ 开头的文件
    suite = unittest.defaultTestLoader.discover(test_dir, pattern="test_*.py")
    # 获取runner实例
    runner = HtmlTestRunner.runner.HTMLTestRunner()
    # 开始执行
    runner.run(suite)
    

    完毕后,当前目录下会生成一个 reports目录,然后报告都在这个目录下。

你可能感兴趣的:(自动化测试,python,开发语言,unittest)