zoukankan      html  css  js  c++  java
  • 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)
        #执行测试套件
  • 相关阅读:
    Eclispe造成的tomcat占用端口 无法启动 强制终止进程 转载
    JavaScript在页面中的执行顺序(理解声明式函数与赋值式函数) 转载
    spket IDE插件更新地址
    SQL 语句外键 a foreign key constraint fails
    面试技能树 转载
    简单粗暴 每个servlet之前都插入一段代码解决 乱码问题
    记录一个因sqlmap导致的错误
    Java与数据库数据类型对应表
    乐观锁与悲观锁
    maven打的包中含源文件jar包
  • 原文地址:https://www.cnblogs.com/mpp0905/p/8636125.html
Copyright © 2011-2022 走看看