码迷,mamicode.com
首页 > 编程语言 > 详细

python + unittest 做单元测试之学习笔记

时间:2018-03-08 02:53:13      阅读:251      评论:0      收藏:0      [点我收藏+]

标签:tca   reg   method   软件   stl   操作   test   连接   关于   

单元测试在保证开发效率、可维护性和软件质量等方面有很重要的地位,所谓的单元测试,就是对一个类,一个模块或者一个函数进行正确性检测的一种测试方式。

这里主要是就应用 python + unitest 做单元测试做的一些学习笔记。

 

Unittest 提供了test cases, test suites, test fixtures,test runner:

  • test case :通过继承TestCase类,我们可以创建一个test,或者一组tests
  • test suites : 测试套件, 使用时要将test case 装载到测试套件里
  • test fixtures : setup + test case + teardown,每个test case执行的时候都会运行setUp->test_case->tearDown ,因此setUp 和 tearDown 可以用来做环境的初始化。例如,写一个有关数据操作的类,setUp放连接数据库,tearDown 放关闭数据库连接。

技术分享图片

一、unittest.main() 的使用

 

所有的test case 要以test开头,例如 def test_pass_case(self)

具体的单元测试例子如下:

import unittest
def calc(x,y):
    return x + y

class TestCalc(unittest.TestCase):
    def test_pass_case(self):
        ‘‘‘这是通过的测试用例‘‘‘
        print(这个是通过用例)
        res = calc(1,2)
        self.assertEqual(3,res)
        self.assertNotEqual(2,3)
    def setUp(self):#每个用例执行前都会执行它
        print(我是setUp)
    def tearDown(self):#每个用例运行之后都会执行它
        print(我是tearDown)

    @classmethod
    def setUpClass(cls):#所有的用例执行之前执行一次,setUp()前
        print(我是setupClass)#所有的用例都运行完之后执行一次,setDown 后
    @classmethod
    def tearDownClass(cls):#所有的用例执行之后执行一次,setDown()后
        print(我是teardownClass)
    def test_a(self):
        ‘‘‘这是普通的测试用例‘‘‘
        print(a)
    def test_fail_case(self):
        ‘‘‘这是失败的测试用例‘‘‘
        print(这个是失败的测试用例)
        res = calc(9,8)
        self.assertEqual(98,res)
    def test_haha(self):
        ‘‘‘这是哈哈‘‘‘
        self.assertEqual(1,2)

if __name__ == __main__:
    unittest.main()#它会帮你运行当前这个python里面所有的测试用例

 

由此可以看到,执行顺序是:静态方法 setUpClass()  -> setUp -> test case -> SetDown ->... -> SetUp -> testcase -> testDown -> 静态方法 setDownClass()。

所以可以用setUpClass、tearDownClass做所有用例的前置初始化和结束。

unittest.main()  #它会帮你运行当前这个python里面所有的测试用例

 

二、 应用 HTMLTestRunner 生成测试报告

if __name__ == __main__:
    suite = unittest.TestSuite()#定义一个测试套件
    suite.addTest(TestCalc(test_pass_case))#测试套件中添加测试用例
    suite.addTest(TestCalc(test_a))
    f = open(report.html,wb)#打开一个保存结果的html文件
    runner = HTMLTestRunner.HTMLTestRunner(stream=f,title=测试报告,description=测试情况)#生成执行用例的对象
    runner.run(suite)#运行

可以将某几个test case加入test suite ,这样生成的测试报告里只有这两个test case 的结果。

具体如下:

技术分享图片

可以将类里所有的test case加入test suite,如下

suite.addTests(unittest.makeSuite(TestCalc))#把类里面所有的测试用例加入测试套件

得到的测试报告结果为:

技术分享图片

三、针对整个项目的test case,生成测试报告

例如有以下的结构:

技术分享图片

 

test_buy 里关于购买的cases, test_login是关于login 的cases, test_reg是关于注册的cases, run_all_cases执行所有的cases

注意,在test_buy, test_login,test_reg里的case 需要以test 开头,这样才会被执行到,还有这三个文件不一定以test开头,这里只是为了方便才这么写的,但是必须得有相同的规则,比如这里的文件名都以test_ 开头。

run_all_cases.py代码如下所示:

import unittest,HTMLTestRunner
suite = unittest.TestSuite()
all_cases = unittest.defaultTestLoader.discover(.,test_*.py)#第一个参数:从哪个目录,第二个参数:定义规则
# for case in all_cases:
#     suite.addTests(case)
[suite.addTests(case) for case in all_cases]#列表生成式,和上面的注释写法一样
f = open(new_report.html,wb)#打开一个保存结果的html文件
runner = HTMLTestRunner.HTMLTestRunner(stream=f,title=测试报告,description=测试情况)#生成执行用例的对象
runner.run(suite)#运行

 

技术分享图片

四、集成jenkins,生成jenkins能识别的测试报告

这里就要用到  xmlrunner 模块,jenkins能识别xml格式。

runner = xmlrunner.XMLTestRunner(.)#当前目录

 

 以上就是对Unittest的简单总结,后续会持续更新。

python + unittest 做单元测试之学习笔记

标签:tca   reg   method   软件   stl   操作   test   连接   关于   

原文地址:https://www.cnblogs.com/nancyzhu/p/8525699.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!