ICode9

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

unittest框架

2022-02-15 14:35:49  阅读:172  来源: 互联网

标签:框架 unittest 测试用例 print suite 执行 def


什么是框架?

框架英文单词framework,为解决一类事情的功能集合。需要阿钊框架的规定去书写代码

什么是unittest框架

unittest是python自带的单元测试框架。

和pytest框架的区别:pytest框架是需要另外单独安装的

对于测试来说,他的作用是执行用例代码的框架。也就是说使用unittest框架来管理,运行多个测试用例的

TestCase(测试用例)

每个TestCase都是一个代码文件,在这个代码文件中,书写真正的用例代码

TestCase注意事项:

  • 测试用例类需要继承unittest.TestCase
  • 测试方法必须以test开头
  • 代码文件的名字必须按照标识符的规则来书写
  • 文件内容的开头,使用注释说明该文件的作用

代码示例:

import unittest#导包

class TestDemo(unittest.TestCase):#继承了testcase
    def test_case01(self):pass#方法名需要以test开头
        
    def test_case02(self):pass

 

TestSuite(测试套件)

testsuite是把测试用例汇总起来,需要配合TestRunner一起使用才能运行

import unittest

suite = unittest.TestSuite()#先将testsuite实例化,拿到一个suite对象

# 添加测试用例的方式有多种
#第一种添加方式,直接将测试用例类中的所有测试方法添加进来
suite.addTest(unittest.makeSuite(要执行的测试用例类名))

#第二种添加方式,一次添加一条用例,效率低。但是可以结合*(通配符)使用。
suite.addTest(测试类名('方法名'))

 

TestRunner(测试执行)

注意点:

  • 实例化执行对象时,unittest后面的是TextTestRunner()
import unittest
suite = unittest.TestSuite()#先将testsuite实例化,拿到一个suite对象
suite.addTest(unittest.makeSuite(要执行的测试用例类名))#添加测试用例

runner = unittest.TextTestRunner()#实例化一个执行对象
runner.run(suite)#调用执行对象中的run方法,将添加完测试用例的测试套件作为参数传过去。

 

TestLoader(测试加载)

TestLoader是什么:TesetLoader(测试加载),作用和TestSuite是一样的,是对TestSuite的补充,用来组装测试用例的

什么场景使用testloader:比如testcase的代码文件有很多

import unittest
#加上discover返回的是一个suite对象,不加的话是返回的是一个testloader对象。
#discover是查找的意思。
#接收两个参数,分别是用例路径和用例的文件名。
# 用例路径推荐使用相对路径;文件名可以结合通配符使用。如:test*,*.py。
suite = unittest.TestLoader.discover('用例所在的路径','用例的代码文件名')

# 这样写和前面也是一样的效果
suite = unittest.defaultTestLoader('用例所在的路径','用例的代码文件名')

runner = unittest.TextTestRunner()
runner.run(suite)

 

FixTure(测试夹具)

是一种代码结构

下面这些方法的名字是固定的,必须要这么写,且大小写也要保持一致。因其本质是重写了父类的方法,所以名字一定要保持一样。否则就不是重写的意义了。

方法级别的

在每个测试方法(测试用例)执行之前/之后都会自动调用的结构

代码示例

import unittest
class TestDemo(unittest.TestCase):
    def setUp(self):#在每个测试用例执行之前会先执行setUp里面的内容
        print('------setUp里面的内容-------')

    def tearDown(self):#在每个测试用例执行之后,会执行tearDown里面的内容
        print('------tearDown里面的内容------')

    def test_case01(self):
        print('第一条测试用例')

    def test_case02(self):
        print('第二条测试用例')

执行结果:
Ran 2 tests in 0.006s

OK
------setUp里面的内容-------
第一条测试用例
------tearDown里面的内容------
------setUp里面的内容-------
第二条测试用例
------tearDown里面的内容------

Process finished with exit code 0

 类级别的

在每个测试类中所有方法执行前后 都会自动调用的结构(在整个类执行之前和执行之后各一次)

import unittest
class TestDemo(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        print('-----类中方法执行前-----')

    @classmethod
    def tearDownClass(cls):
        print('-----类中方法执行后-----')

    def test_case01(self):
        print('第一条测试用例')

    def test_case02(self):
        print('第二条测试用例')

执行结果
OK

-----类中方法执行前-----
第一条测试用例
第二条测试用例
-----类中方法执行后-----

Process finished with exit code 0

 模块级别的fixture

在每个代码文件执行前后执行的代码结构

  什么是模块:每个代码文件都是一个模块

import unittest

def setUpModule():#在模块执行之前会先执行这个方法中的代码。方法名必须是这个
    print('---在模块执行前先执行这句话---')
    
def tearDownModule():#在模块执行之后会执行这个方法中的代码。方法名必须是这个
    print('---在模块执行之后要执行这句话')

class TestDemo(unittest.TestCase):
    def test_case01(self):
        print('第一条测试用例')

    def test_case02(self):
        print('第二条测试用例')

执行结果:
OK
---在模块执行前先执行这句话---
第一条测试用例
第二条测试用例
---在模块执行之后要执行这句话

Process finished with exit code 0

 

标签:框架,unittest,测试用例,print,suite,执行,def
来源: https://www.cnblogs.com/mingbo-1/p/15895446.html

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

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

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

ICode9版权所有