Python学习笔记|Python中Unittest框架

系统 2067 0

Unittest

1.环境

  • Unittest为Python内嵌的测试框架,不需要特殊配置,仅需要在 File---settings---Tools----Python Intergrated Tools 下配置框架为Unittest

2.编写规范

  • 需要导入 import unittest

  • 测试类必须继承unittest.TestCase

  • 测试方法以 test_开头

  • 模块和类名没有要求

3.Unittest介绍

            
              
import unittest

def add(x, y):
    return x + y

def sub(x,y):
    return x - y

class UnittestDemo(unittest.TestCase):

    def setUp(self):
        print("I an setup")

    def test_add(self):
        print("my first unit test demo----add")
        self.assertEqual(add(10,1),11,"assert equal")

    def test_sub(self):
        print("my first unit test demo----sub")
        self.assertEqual(sub(10, 1), 9, "assert equal2")

    @unittest.skip("i don't want to run this case.")
    def test_sub1(self):
        print("my first unit test demo----sub1")
        self.assertEqual(sub(10, 1), 9, "assert equal3")

    def tearDown(self):
        print("I an tearDown")

            
          
  • setUp及TearDown

方法级别的,类里面的每个方法调用一次

            
                  def setUp(self):
        print("I an setup")

            
          
  • setUpClass及tearDownClass

类级别的,类里面的所有方法仅执行一次

            
                   @classmethod
    def setUpClass(cls):
        print("I an setUpClass")  

            
          
  • setUpModule,tearDownModule

模块级别的,执行模块里面类中的所有方法仅执行一次

4.Unittest使用

            
              import unittest

from unittest_task import UnittestDemo
from HTMLTestRunner import HTMLTestRunner


suite=unittest.TestSuite()#创建用例集合
tests = [UnittestDemo("test_add"), UnittestDemo("test_sub"),UnittestDemo("test_sub1")]
suite.addTests(tests)


with open('HTMLReport.html', 'wb') as fi:
    runner = HTMLTestRunner(stream=fi,
                            title = 'MathFunc Test Report',
                            description='generated by HTMLTestRunner.',
                            verbosity=2
                            )
    runner.run(suite)

            
          
  • TestCase

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

  • TestSuite

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

  • TestLoader

用来加载TestCase到TestSuite中的

  • TestRunner

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

  • skip装饰器

跳过某个用例不执行

            
              @unittest.skip("i don't want to run this case.")


            
          

无条件跳过

            
                  unittest.skip(reason)

            
          

当condition为True时跳过

            
              unittest.skipIf(condition, reason)

            
          

当condition为False时跳过

            
              unittest.skipUnless(condition, reason)

            
          
  • self.skipTest('do not run this.')

5.Unittest生成报告

5.1 Unittest生成txt格式报告

            
              if __name__ == '__main__':
    suite = unittest.TestSuite()
 
    tests = [TestMathFunc("test_add"), TestMathFunc("test_minus"), TestMathFunc("test_divide")]
    suite.addTests(tests)
 
    with open('UnittestTextReport.txt', 'a') as  f:
        runner = unittest.TextTestRunner(stream=f, verbosity=2)
        runner.run(suite)
        

            
          

运行该文件,就会发现目录下生成了’UnittestTextReport.txt,所有的执行报告均输出到了此文件中。

verbosity参数可以控制执行结果的输出,0 是简单报告、1 是一般报告、2 是详细报告

5.2 Unittest生成html格式报告

            
              with open('HTMLReport.html', 'wb') as fi:
    runner = HTMLTestRunner(stream=fi,
                            title = 'MathFunc Test Report',
                            description='generated by HTMLTestRunner.',
                            verbosity=2
                            )
    runner.run(suite)



            
          

输出测试报告为HTML格式,unittest中htmltestrunner导出测试报告,可以修改htmltestrunner中的测试代码

其中,的python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO’如何解决见:https://www.cnblogs.com/testyao/p/5658200.html


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论