清秋2018

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

python 17篇 unittest单元测试框架

单元测试:开发程序的人自己测试自己的代码

unittest自动化测试框架

1、单元测试

复制代码
import unittest

def add(a,b):
    return a+b
# 在运行时不要用run unittest in xxx,否则不能生成测试报告
class TestAdd(unittest.TestCase):
    '''测试add方法'''
    def test_add_normal(self): # 测试用例必须以test开头
        '''正常测试加法用例'''
        result = add(1, 2)
        self.assertEqual(3, result)
    def test_add_error1(self):
        '''测试失败加法用例'''
        result = add(1, 2)
        self.assertEqual(4, result)
    def test_add_error2(self):
        '''测试失败加法用例有msg'''
        result = add(1, 2)
        self.assertEqual(5, result, '正常用例,没有通过')

    def test_param_add(self, a, b, c):
        result = add(a, b)
        self.assertEqual(c, result, '预期结果%s,实际结果%s' %(c, result))
if __name__ == '__main__':
    # 不产生测试用例,执行所有测试用例
    unittest.main()
复制代码

2、产生测试报告

2.1 HTMLTestRunnerNew

下载HTMLTestRunnerNew.py放到python的环境变量里

复制代码
import unittest
import HTMLTestRunner
import HTMLTestRunnerNew

def add(a,b):
    return a+b
# 在运行时不要用run unittest in xxx,否则不能生成测试报告
class TestAdd(unittest.TestCase):
    '''测试add方法'''
    def test_add_normal(self): # 测试用例必须以test开头
        '''正常测试加法用例'''
        result = add(1, 2)
        self.assertEqual(3, result)
    def test_add_error1(self):
        '''测试失败加法用例'''
        result = add(1, 2)
        self.assertEqual(4, result)
    def test_add_error2(self):
        '''测试失败加法用例有msg'''
        result = add(1, 2)
        self.assertEqual(5, result, '正常用例,没有通过')
    def test_param_add(self, a, b, c):
        result = add(a, b)
        self.assertEqual(c, result, '预期结果%s,实际结果%s' %(c, result))
if __name__ == '__main__':
    # 不产生测试用例
    # unittest.main()

    # 执行某条或几条测试用例
    # test_suit = unittest.TestSuite()
    # test_suit.addTest(TestAdd('test_add_error1'))
    # test_suit.addTest(TestAdd('test_add_normal'))

    # 执行某个类中所有测试用例
    test_suit = unittest.makeSuite(TestAdd)

    # 查找某个目录下的测试用例
    # test_suit = unittest.defaultTestLoader.discover('case', 'test*.py')

    with open('report.html', 'wb') as fw:
        runner = HTMLTestRunnerNew.HTMLTestRunner(stream=fw, title='tmz测试报告', description='tmz接口测试报告', verbosity=2)
        runner.run(test_suit)
复制代码

测试报告如何打开查看:

1.选中文件--右键--Copy Path...--拷贝路径--放到浏览器中打开

2.双击测试报告--在测试报告的html脚本中移动鼠标--会弹出浏览器的选项--选择对应的浏览器打开

执行的测试报告如图所示:

 

2.1 HTMLTestRunner

下载HTMLTestRunner.py放到python的环境变量里

复制代码
import unittest
import HTMLTestRunner
import HTMLTestRunnerNew

def add(a,b):
    return a+b
# 在运行时不要用run unittest in xxx,否则不能生成测试报告
class TestAdd(unittest.TestCase):
    '''测试add方法'''
    def test_add_normal(self): # 测试用例必须以test开头
        '''正常测试加法用例'''
        result = add(1, 2)
        self.assertEqual(3, result)
    def test_add_error1(self):
        '''测试失败加法用例'''
        result = add(1, 2)
        self.assertEqual(4, result)
    def test_add_error2(self):
        '''测试失败加法用例有msg'''
        result = add(1, 2)
        self.assertEqual(5, result, '正常用例,没有通过')
    def test_param_add(self, a, b, c, desc):
        self._testMethodDoc = desc
        result = add(a, b)
        self.assertEqual(c, result, '预期结果%s,实际结果%s' %(c, result))
if __name__ == '__main__':
    # 不产生测试用例
    # unittest.main()

    # 执行某条或几条测试用例
    # test_suit = unittest.TestSuite()
    # test_suit.addTest(TestAdd('test_add_error1'))
    # test_suit.addTest(TestAdd('test_add_normal'))

    # 执行某个类中所有测试用例
    test_suit = unittest.makeSuite(TestAdd)

    # 查找某个目录下的测试用例
    # test_suit = unittest.defaultTestLoader.discover('case', 'test*.py')

    with open('report.html', 'wb') as fw:
        runner = HTMLTestRunner.HTMLTestRunner(stream=fw, title = 'tmz测试报告',description= 'tmz接口测试报告',verbosity=2)
        runner.run(test_suit)
复制代码

测试报告如何打开查看:

1.选中文件--右键--Copy Path...--拷贝路径--放到浏览器中打开

2.双击测试报告--在测试报告的html脚本中移动鼠标--会弹出浏览器的选项--选择对应的浏览器打开

执行的测试报告如图所示:

3、参数化

复制代码
import unittest
import HTMLTestRunner
import HTMLTestRunnerNew
import parameterized

def add(a,b):
    return a+b
# 在运行时不要用run unittest in xxx,否则不能生成测试报告
class TestAdd(unittest.TestCase):
        @parameterized.parameterized.expand(
       [
        [1, 2, 3, '参数化说明1'],
        [-1, 2, 1, '参数化说明2'],
        [-1, 2, 2, '参数化说明3']
        ]
    )
    def test_param_add(self, a, b, c, desc):
        self._testMethodDoc = desc
        result = add(a, b)
        self.assertEqual(c, result, '预期结果%s,实际结果%s' %(c, result))
复制代码

 

posted on   清秋2018  阅读(97)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示