ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

单元测试框架(unittest)

2022-07-13 16:00:11  阅读:133  来源: 互联网

标签:__ 框架 res unittest 单元测试 test self def


单元测试框架(unittest)

  接口测试的本质:通过数据驱动测试类里面的函数 

  单元测试的本质:通过代码级别测试函数

  单元测试框架:unittest,pytest

  unittest类功能

    写用例:TestCase类

    加载并执行用例:

      TestSuite类:存储用例

      TestLoader类:找用例,加载用例,存到TestSuite中

      TestRunner类:执行用例

    断言,对比实际结果和期望结果:

       判定用例是否通过 断言 Assert

    测试报告:TextTestRunner类

  例子:

import unittest

class Demo:
    def add(self,a,b):
        return a+b

    def sub(self,a,b):
        return a-b

class TestDemo(unittest.TestCase):# 继承unittest里面的TestCase类
    """编写测试用例,一个用例就是一个函数,函数不能传参,只有self关键字
    所有的用例/函数,都是test开头,test_"""
    def test_demo1(self):
        res = Demo().add(1, 1)
        print('1+1=', res)

    def test_demo2(self):
        res = Demo().add(-1, -1)
        print('-1+-1=', res)

if __name__ == '__main__':
    unittest.main() #自测,自动收集当前文件中所有的测试用例来执行

  执行结果:.代表成功 E代码出错 F用例没过,失败了

  执行排序:根据ASCII编码排序 abcd.......xyz

  TestSuite类  

import unittest
from base import basic

class Demo:
    def add(self,a,b):
        return a+b

    def sub(self,a,b):
        return a-b

class TestDemo(unittest.TestCase):
    def test_demo1(self):
        res = Demo().add(1, 1)
        print('1+1=', res)

    def test_demo2(self):
        res = Demo().add(-1, -1)
        print('-1+-1=', res)

if __name__ == '__main__':
    suite = unittest.TestSuite() #存储用例
    #方法一:一个个用例/函数添加
    # suite.addTest(TestDemo('test_demo1')) #创建测试类的实例,参数是test名称
    # suite.addTest(TestDemo('test_demo2'))
    # runner = unittest.TextTestRunner()#执行
    # runner.run(suite)
    #方法二.1:TestLoader类
    # loader = unittest.TestLoader() #创建一个加载器实例
    # suite.addTest(loader.loadTestsFromTestCase(TestDemo))#具体到类
    # runner = unittest.TextTestRunner()
    # runner.run(suite)
    #方法二.2:TestLoader类
    loader = unittest.TestLoader()
    suite.addTest(loader.loadTestsFromModule(basic)) #具体到模块
    runner = unittest.TextTestRunner()
    runner.run(suite)

    *实例化一个类要不要传参数是根据什么决定的?初始化函数

  断言:判断期望值与实际值的比对结果 一致通过 不一致失败    

import unittest

class Demo:
    def add(self,a,b):
        return a+b

    def sub(self,a,b):
        return a-b

class TestDemo(unittest.TestCase):
    def test_demo1(self):
        res = Demo().add(1, 1)
        print('1+1=', res)
        # self.assertEqual(2,res,'计算错误')
        self.assertIsNone(res)

    def test_demo2(self):
        res = Demo().add(-1, -1)
        print('-1+-1=', res)
        # self.assertTrue(res)
        self.assertIn(res,[1,2,-2])

if __name__ == '__main__':
   unittest.main()

    self.assertEqual(期望值,结果值,断言失败可以抛出的错)

    self.assertTure(x) bool(x) is True

    self.assertIsNone(x) x is None

    self.assertIn(a,b) a in b

  执行 上下文管理器

    with open('test.txt','w+',encoding='UTF-8') as file:

      runner = unittest.TextTestRunner(stream=file,verbosity=0/1/2) 2是最详细的

      runner.run(suite)

    HTMLTestRunner类:测试报告

    import HTMLTestRunner

      with open('test_report.html','wb') as file:

        runner = HTMLTestRunner.HTMLTestRunner(stream=file,verbosity=0/1/2

              title='xx',description='xx',tester='xx') 2是最详细的

        runner.run(suite)

  单元测试内断言加异常处理

    try:

      self.assertEqual(-2,res,'报错')

    except AssertionError as e:

      print('xxxx{}'.format(e))

      raise e 异常处理完成后记得要抛出异常

  单元测试框架unittest内setUp和tearDown函数

    def setUp(self):

      每一条用例执行前执行

    def tearDown(self):

      每一条用例执行后执行

标签:__,框架,res,unittest,单元测试,test,self,def
来源: https://www.cnblogs.com/continuous-luck/p/16426336.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有