Unittest测试框架

Unittest框架的组成:

test fixture、test case、test suite、test runner

 Unittest组成部分描述

test fixture:  测试固定组件,unittest框架中,一些有固定用法的组件 

test case :   测试用例,被执行测试的最小单元 

test suite:   测试套件,它是一个用例集,用来汇总应该一起执行的测试用例。 

test runner:测试运行器,它是一个设计测试执行方式的元件,主要对用户提供了输出结 果的展现方式。它可以用图标、文本、html等方式来展现测试结果

 

各个组成部分的运行逻辑关系:

 

 

 

注意:

TestCase就是Unittest框架执行的测试用例。

主要用法是,把测试用例编写在继承了TestCase的类中,通过unittest.main()来自动加载测试用例运行

靠背啦,注意点⚠️:

每个测试用例都默认用test开头,非test开头的用力不会去自动执行诶

每个测试用例的执行顺序都是按ASCLL码执行的哈, 🐎越小,越先跑

只有执行unittest.TestCase的类才会被unttest.main()运行哦 

实例:

import unittest

class UnittestDemo(unittest.TestCase):
    def test01(self):
        print("这是测试1")
    def test02(self):
        print("这是测试02")
if __name__ =="__main__":
    unittest.main()

 

给👴快速跳过啊喂! (跳过要执行的测试用例 

当我们希望跳过一些测试测试用例,不执行时,我们可以使用装饰器@unitest.skip("备注")来完成

import unittest # 导包
class XXX(unittest.TestCase):
    def test01(self):
print("执行测试用例1")
    @unittest.skip("demonstrating skipping")
    def test02(self):
print("执行测试用例2") def test03(self):
print("执行测试用例3")
if __name__ == '__main__':
    unittest.main()


 咱就说 要进入TestFixture 了哦

一共四个回合(以下没有先后顺序: 

TestFixture一般使用4个常见方法:setUp()、tearDown()、setUpClass()、tearDownClass()需要注意的是,在代码中,大小写严格区分。 

首先! 第一回合: setUp()

每运行一个测试用例之前,先运行的函数;主要用于设置一些配置信息,静态属性等等 

其次! 第二回合:setUp Class()

它是类方法,必须和@classmethod装饰器结合使用(unittest设计如此)实例化类后,会自动运行的方法,主要用于实例化类、设置某些环境配置如数据库连接 配置等等。 

再其次! 第三回合:tearDown() 

每运行完一个测试用例之后,后运行的函数;主要用于销毁每个测试用例之间的数据, 释放资源,还原数据 

最后! 最终回合! :tearDownClass ()

类中的代码全部运行完成后,会自动运行的方法,主要用于销毁类级别的资源,还原数据。 

import unittest
class MathDemo:
    def plus(self, x, y):
        return x + y
class TestFixtureDemo(unittest.TestCase):
    add = None
    def setUp(self):
        self.x = 1
        self.y = 1
    @classmethod
    def setUpClass(cls):
        cls.add = MathDemo()
    def tearDown(self):
        del self.x
del self.y
    @classmethod
    def tearDownClass(cls):
del cls.add
    def test01(self):
        result = self.add.plus(1, 2)
        print(result)
    def test02(self):
        result = self.add.plus(3, 5)
        print(result)
if __name__ == '__main__':
    unittest.main()

 

敲黑板啦! ! ! 🌟🌟🌟 🌟🌟断言

断言是让程序帮助人来判断,实际结果与预期结果的一种方法。

进行自动化测试中,只能通过断言来判断执行结果是否正确。所以,掌握断言技术是进行自动化测试的前提条件。

Python语言自带断言,但是应用时,会有许多不方便理解的地方。为了让我们能更方便的断 言数据,Unittest对Python的断言进行了多层封装,使断言更丰富,更容易使用。 

Unittest断言方法          作用

assertEqual(a,b)        检查a和b是否相等

assert True(X)         检查X是不是一个True

assertIs(a,b)          检查a和b是不是完全一样

assertIsNone(X)        检查X是不是一个none

assertIn(a,b)          检查a是不是在b的子集中

assertIsIn stance(a,b)      检查a,b两个对象,实例的类型是否相同

import unittest

class TestAssertDemo(unittest.TestCase):
def setUp(self):
self.list1,self.list2 = [1,4],[5,8]
self.a,self.b = 1,6

def test01_assertEqual(self):
self.assertEqual(self.a,self.b) # a和b相等
def test02_assertIs(self):
self.assertIs(self.list1,self.list2) #s是否相同
self.assertIs(self.a,self.b)
def test03_assertTrue(self):
self.assertTrue(self.list1,self.list2) #返回结果为True
def test04_assertIsNOne(self):
self.assertIsNone(self.a,int) #不为空
self.assertIsNone(self.list1,list)#不为空
def test05_assertIn(self):
self.assertIn(self.l1, self.l2) # l1 不是l2的子集
def test06_assertIsInstance(self):
self.assertIsInstance(self.a,int) # a是int整型
self.assertIsInstance(self.l1,list) # l1是list列表型
if __name__ =="__main__":
unittest.main()

 

 

 

 

posted @ 2022-04-11 21:54  TheBlueaa  阅读(351)  评论(0)    收藏  举报