unittest框架

本文详细介绍了单元测试的概念,包括白盒测试、unittest、pytest等测试框架的使用,以及测试用例的编写规范。重点讲解了unittest框架的setup、tearDown、setUpClass和tearDownClass方法,以及各种测试覆盖类型。通过示例代码展示了如何组织和执行单元测试用例,最后演示了unittest的四种执行方式。
摘要由CSDN通过智能技术生成

单元测试

白盒测试–开发进行测试,很少去做,迭代很快,不会做去代码层面的测试
单元测试的思想:
单元测试框架:unittest,pytest,nose,mock
输入输出的思想
uniitest 和 pytest
unittest 内置函数

单元测试的覆盖率:指标:代码覆盖率
单元测试覆盖类型:
语句覆盖,条件覆盖,判断覆盖,路径覆盖
语句覆盖:每行代码会被执行一遍
判断覆盖:每一个判断的测试 T or F
条件覆盖:每一个条件的测试 T or F ,测试用例的用例太多的
路径覆盖:覆盖所有可能的路径

unittest框架

:基于JUnit的思想,开发的框架
test fixture 测试的装饰,用例前用例后
test case
test suite 批量执行用例
test runner
编写规范:
测试模块首先import unittest
测试类必须继承 unittest.TestCase
测试方法必须以 test 开头

测试框架结构
setup用来为测试准备环境
teardown用来清理环境

类级别的方法,需要加上一个装饰器@classmethod
setupclass 所有case执行前准备一次环境,类之前执行
teardownclass 所有case执行结束后清理一次环境
@unittest.skip 方法不在本次执行

"""
@Time   :2021/10/28 13:15
@Author :Wesley
@File   :demo_a.PY
"""
"""
unittest框架
"""

import unittest



class TestStringMethods(unittest.TestCase):

    # 每个case执行前调用
    def setUp(self) -> None:
        print('setup')

    # 每个case执行结束调用
    def tearDown(self) -> None:
        print('teardown')

    # 整个类执行前调用
    @classmethod
    def setUpClass(cls) -> None:
        print('setupclass')

    # 整个类执行结束调用
    @classmethod
    def tearDownClass(cls) -> None:
        print('teardownclass')

    def test_abc(self):
        print('abc')

    def test_upper(self):
        self.assertEqual('foo'.upper(), 'FOO')

    def test_isupper(self):
        self.assertTrue('FOO'.isupper())
        self.assertFalse('Foo'.isupper())

    def test_split(self):
        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)


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


class Search:

    def search_fun(self):
        print('search')
        return True


class TestSearch(unittest.TestCase):

    # @classmethod
    # def setUpClass(cls) -> None:
    #     print('setupclass')
    #     cls.search = Search()
    #
    # @classmethod
    # def tearDownClass(cls) -> None:
    #     print('teardownclass')

    def setUp(self) -> None:
        print('setup')
        self.search=Search()

    def teardown(self) -> None:
        print('teardown')
        self.search=Search()


    def test_search1(self):
        print('testsearch1')
        search = Search()
        assert True == self.search.search_fun()

    def test_search2(self):
        print('testsearch2')
        search = Search()
        assert True == self.search.search_fun()

    def test_search3(self):
        print('testsearch3')
        search = Search()
        assert True == self.search.search_fun()




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

unittest执行用例


# 执行方式一:unittest.main()
if __name__ == '__main__':
    unittest.main()
# 执行方式二:unittest.testsuite
if __name__ == '__main__':
    suite = unittest.TestSuite()
    suite.addTest(TestSearch('test_search1'))
    unittest.TextTestRunner().run(suite)
# 执行方式三:执行某个测试类
if __name__ == '__main__':
    suite1 = unittest.TestLoader().loadTestsFromTestCase(TestSearch)
    suite2 = unittest.TestLoader().loadTestsFromTestCase(TestSearch)
    suite = unittest.TestSuite([suite1, suite2])
    unittest.TextTestRunner(verbosity=2).run(suite)
# 执行方式四:搜索test执行
if __name__ == '__main__':
    test_dir = '../testcases'
    discover = unittest.defaultTestLoader.discover(test_dir, pattern='test*.py')
    unittest.TextTestRunner(verbosity=2).run(discover)
'''
unittest执行用例过程
1,首先写好TestCase
2,然后由TestLoader加载TestCase到TestSuite
3,由TextTestRunner运行TestSuite
4,执行的结果保存在TextTestResult中
5,整个过程集成在unittest.main模块中
'''
    
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值