unittest框架

什么是框架?

框架英文单词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

 

上一篇:HashSet——add remove contains方法底层代码分析(hashCode equals 方法的重写)


下一篇:Sql Server添加用户