python之unittest

unittest是单元测试的一个框架

在说unittest之前,先说几个概念:

TestCase 也就是测试用例

TestSuite 多个测试用例集合在一起,就是TestSuite

TestLoader是用来加载TestCase到TestSuite中的

TestRunner是来执行测试用例的,测试的结果会保存到TestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息

在写代码前,需要把两个文件拷贝到libraries中:HTMLTestRunner.py 和BeautifulReport.zip解压后的文件

接下来开始写代码


import unittest

class MyTest(unittest.TestCase):#继承unittest.TestCase
    def tearDown(self):
        #每个测试用例执行之后操作
        print("teardown1111")
    def setUp(self):
        #每个测试用例执行之前操作
        print("setup2222")
    def test_run01(self):
        # 测试用例
        self.assertEqual(1,1)
    def test_run02(self):
        self.assertIn('a', 'mapeipei')

if __name__=='__main__':
    unittest.main()#运行所有的用例


 

下面是一些常用的断言

assertEqual(a, b)     a == b      
assertNotEqual(a, b)     a != b      
assertTrue(x)     bool(x) is True      
assertFalse(x)     bool(x) is False      
assertIsNone(x)     x is None     
assertIsNotNone(x)     x is not None   
assertIn(a, b)     a in b    
assertNotIn(a, b)     a not in b

接下来我们导入HTMLTestRunner(这个模块需要自己安装!)来生成测试报告:

import unittest
import HTMLTestRunner

class MyTest(unittest.TestCase):#继承unittest.TestCase
    def tearDown(self):
        #每个测试用例执行之后操作
        print("teardown1111")
    def setUp(self):
        #每个测试用例执行之前操作
        print("setup2222")
    def test_run01(self):
        # 测试用例
        self.assertEqual(1,1)
    def test_run02(self):
        self.assertIn('a', 'mapeipei')
    def test_run03(self):
        self.assertEqual(2,2)

if __name__=='__main__':
    testsuit = unittest.TestSuite()#创建一个测试集合
    # testsuit.addTest(MyTest('test_run01'))#往测试套件中单个添加测试用例
    testsuit.addTest(unittest.makeSuite(MyTest)) #添加MyTets类下的所有用例
    f = open('res.html','wb')#打开一个保存结果的html文件
    runner = HTMLTestRunner.HTMLTestRunner(stream=f,title='测试报告',description='测试情况')
    #生成执行用例的对象
    runner.run(testsuit)
    #执行测试套件

假如我们有很多测试用例的py文件,都放在某个目录下,这时候需要把该目录下的测试用例全部执行,可以使用unittest.defaultTestLoader.discover

import unittest
import HTMLTestRunner

suite = unittest.TestSuite()#创建测试套件
all_case = unittest.defaultTestLoader.discover(u'E:\testpy\python-mpp\练习\0618练习\case','test_*.py')
#找到某个目录下所有已test开始的py文件里面的测试用例
for case in all_case:
    suite.addTests(case)#把所有的用例添加进来
fp = open('res02.html','wb')
runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title='all_tests',description='所有测试情况')
runner.run(suite)

上述产生的测试报告是html格式的,jenkins无法识别,显示不出来,那咱们就要产生一些Jenkins认识的测试报告,Jenkins认识xml格式的报告,那咱们就产生xml格式的呗,就需要用一个新的模块,xmlrunner,安装直接 pip install xmlrunner即可,代码如下:

if __name__=='__main__':
    testsuit = unittest.TestSuite()#创建一个测试集合
    # testsuit.addTest(MyTest('test_run01'))#往测试套件中单个添加测试用例
    testsuit.addTest(unittest.makeSuite(MyTest)) #添加MyTets类下的所有用例
    runner = xmlrunner.XMLTestRunner(output='report')#指定报告存放的目录
    runner.run(testsuit)
    #执行测试套件
原文地址:https://www.cnblogs.com/mpp0905/p/8636125.html