unittest

Unittest 是 python 单元测试框架,类似 JUnit 框架。

Unittest 概述

test fixture

 一个测试用例环境的搭建和销毁是一个fixture,通过覆盖 test case 的 setUp() 和 tearDown() 实现。

test case 测试用例

  为一个完整的测试流程,包括测试区准备环境的搭建setup,执行测试代码 run,及测试后环境还原 teardown.

test suite 测试套件

  多个测试用例结合在一起为 test suite, test suite 也可嵌套 test suite.

test runner 测试运行器

  用来执行测试用例,run(test) 会执行 test suite/testcase中的 run(result) 方法。

test loader 测试加载器

  用来加载 test case 到 test suite 

setup 和 tearDown

方法分类

  • 类方法:只执行一次
  • 实例方法:每次运行用例都执行

执行顺序

  • setupClass > setUp > testA > tearDown > setup > test B >tearDown …> tearDownClass
  • test case之间按名称顺序加载

断言

在这里插入图片描述
示例:

import unittest


class TestCase01(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:
        print('setUpClass....')

    def setUp(self) -> None:
        print('setUp....')

    def test01(self):
        self.assertEqual(1+2, 3)

    def test02(self):
        self.assertGreater(1+2, 0)

    def tearDown(self) -> None:
        print('tearDown....')

    @classmethod
    def tearDownClass(cls) -> None:
            print('tearDownClass....')

if __name__ == '__main__':
    unittest.main

运行结果:

setUpClass....
setUp....
tearDown....
setUp....
tearDown....
tearDownClass....


Ran 2 tests in 0.002s

OK

Process finished with exit code 0

测试用例加载

测试用例类加载

import unittest


class TestCase01(unittest.TestCase):

    def test01(self):
        print('test01....')
        self.assertEqual(1+2, 3)

    def test02(self):
        print('test02....')
        self.assertGreater(1+2, 0)

class TestCase02(unittest.TestCase):

    def test03(self):
        print('test03....')
        self.assertEqual(1+2, 3)

    def test04(self):
        print('test04....')
        self.assertGreater(1+2, 0)


if __name__ == '__main__':
    loader = unittest.TestLoader()
    suite = unittest.TestSuite()
    suite.addTest(loader.loadTestsFromTestCase(TestCase01))
    suite.addTest(loader.loadTestsFromTestCase(TestCase02))

    runner = unittest.TextTestRunner()
    runner.run(suite)

测试用例模板加载

    suite.addTest(loader.loadTestsFromModule(TestCase01))
    suite.addTest(loader.loadTestsFromModule(TestCase02))

路径加载

import unittest
import os

if __name__ == '__main__':
    loader = unittest.TestLoader()
    suite = unittest.TestSuite()
    path = os.path.dirname(os.path.abspath(__file__))
    suite.addTest(loader.discover(path))
    runner = unittest.TextTestRunner()
    runner.run(suite)

逐条加载 --不推荐

if __name__ == '__main__':
    loader = unittest.TestLoader()
    suite = unittest.TestSuite()  
    case1= TestCase01("test01")
    case2 = TestCase01("test02")
    case3 = TestCase01("test03")
    case4 = TestCase01("test04")
    suite.addTest(case1)
    suite.addTest(case2)
    suite.addTest(case3)
    suite.addTest(case4)
    runner = unittest.TextTestRunner()
    runner.run(suite)

使用 unittest 重构测试用例

  • 继承的是用例 unittest.TestCase
  • init 修改为 setup
  • 将 assert 断言修改为 unittest 断言
  • 将关闭浏览器放到 teardown
  • 第二次测试需清空数据
  • 测试顺序加序号
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值