unittest 框架

定义:是Python自带的一个单元测试框架,存放在Python安装目录的lib目录下

unittest的四个核心概念:

①测试用例 test case

②测试夹具 test fixture

③测试执行 test runner

④测试套件 test suite


1.test case测试用例书写规则

①.py文件名 必须是以test开头

②测试类 必须继承父类 unittest.TestCase 

③测试类名必须以Test开头 

④测试方法最好以test开头

⑤在当前测试文件执行测试代码时,使用: unittest.main()

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

⑥在测试类里可以有普通的方法,但是普通方法需要被测试方法调用

书写语法(如下):

# 导包
import unittest

class Testcase(unittest.TestCase):

    def test_01(self):
        print('测试方法的书写规则111')
    def test_02(self):
        print('测试方法的书写规则222')


#执行unittest的测试代码 使用unittest.main()
if __name__ == '__main__':
    unittest.main()


2.test fixture 测试夹具

2.1方法级别的测试夹具:

setup()  ---> 在每一个测试方法执行前 先执行的setup()的代码

teardown()---在每一个测试方法执行后 先执行的teardown()的代码

方法级别的夹具如:

#方法级别的测试夹具


# 导包
import unittest

class Testcase(unittest.TestCase):

    def test_01(self):
        print('测试方法的书写规则111')
    def test_02(self):
        print('测试方法的书写规则222')


#测试夹具--->方法级别
    def setUp(self) -> None:
        print('方法级别的夹具执行在方法前')
    def tearDown(self) -> None:
        print('方法级别的夹具执行在方法后')


#执行unittest的测试代码 使用unittest.main()
if __name__ == '__main__':
    unittest.main()



运行结果

2.2类级别的测试夹具

 setupClass()--->在执行类之前 执行夹具,需要@classmethod装饰

teardownClass()--->在执行类之后 执行夹具,需要@classmethod装饰

类级别的夹具如:

#类级别的测试夹具


# 导包
import unittest

class Testcase(unittest.TestCase):

    def test_01(self):
        print('测试方法的书写规则111')
    def test_02(self):
        print('测试方法的书写规则222')


    #测试夹具--->类级别
    @classmethod
    def setUpClass(cls) -> None:
        print('类级别的夹具执行在类前')
    @classmethod
    def tearDownClass(cls) -> None:
        print('类级别的夹具执行在类后')




#执行unittest的测试代码 使用unittest.main()
if __name__ == '__main__':
    unittest.main()

运行结果


3 .test runner 测试执行 和 test suite 测试套件

注意:在执行用例顺序中,默认按ASCII码顺序执行,所有建议方法名创建是后面可以加上序号,如:test_01(self):

测试套件:把需要执行的测试用例 放到一个套子

测试执行:使用测试执行去执行套子里的用例

测试执行和测试套件基本都是组合使用

语法

3.1 组合方式① (执行一条或多条用例)

语法:

①导包(新创建的.py文件)

import unittest

from 测试包名.测试用例模块名 import 测试用例类名

②套件

suite=unittest.TestSuite()

suite.addTest(测试类名("测试方法1字符串"))

suite.addTest(测试类名("测试方法2字符串"))

.....

③测试执行

runner=unittest.TextTestRunner()

runner.run(suite)

3.2组合方式②(添加所有测试用例套件)

语法:

①导包

import unittest

②添加所有测试套件

suite=unittest.defaultTestLoader.discover(start_dir,pattern)

start_dir:测试用例的路径目录名

pattern:选取测试用例执行的规则

③执行用例

runner=unittest.TextTest()

runner.run(suite)


4.断言

定义:常用在unittest中 , 判断预期结果和实际结果是否相符合, 一般断言都在测试方法中被调用

三种断言方法:

①self.assertEqual(a,b,msg='测试失败时打印的信息')    

断言a和b是否相等,相等则测试用例通过

assertTrue(x,msg='测试失败时打印的信息')

断言x是否True,是True则测试用例通过

③assertIn(a,b,msg='测试失败时打印的信息')

断言a是否在b中,在b中则测试用例通过

断言示例:

# 导包
import unittest

class Testcase(unittest.TestCase):
    def test_01(self):
        print('测试方法的书写规则111')
        self.assertEqual(1, 1, msg='测试失败')

    def test_02(self):
        print('测试方法的书写规则222')
        self.assertTrue(1==2, msg="测试失败")

    def test_03(self):
        print('测试方法的书写规则333')
        self.assertIn("1","123" , msg="测试失败")



#执行unittest的测试代码 使用unittest.main()
if __name__ == '__main__':
    unittest.main()

执行结果:


5.跳过测试 

直接跳过该测试方法(用例),不去执行它

常用的跳过测试方法/装饰器

@unittest.skip(reason):skip(reason)装饰器,无条件跳过装饰的测试,并说明跳过测试的原因。

@unittest.skipIf(reason):skipIf(condition,reason)装饰器,条件为真时,跳过装饰的测试,并说明跳过测试的原因。

@unittest.skipUnless(reason):skipUnless(condition,reason)装饰器,条件为假时,跳过装饰的测试,并说明跳过测试的原因。

@unittest.expectedFailure:测试标记为失败。

示例:

# 导包
import unittest

class Testcase(unittest.TestCase):
    def test_01(self):
        print('测试方法的书写规则111')
      
    def test_02(self):
        print('测试方法的书写规则222')
  
    def test_03(self):
        print('测试方法的书写规则333')
        

#跳过测试06-08
    @unittest.skip('没原因直接跳这条用例')
    def test_06jump(self):
        print('跳过测试1')

    @unittest.skipIf(1==1,"表达式为真,跳过这条用例")
    def test_07jump(self):
        print ('跳过测试2')

    @unittest.skipUnless(1==2,'表达式为假,跳过这条用例')
    def test_08jump(self):
        print ('跳过测试3')


#执行unittest的测试代码 使用unittest.main()
if __name__ == '__main__':
    unittest.main()

执行结果:


6.HTMLTestRunner 第三方插件 

注意:1.生成的报告应该放在Report里面  2.生成的报告应该以 .html结尾

示例:

​
# 报告的编写需要先导包
import unittest
import HTMLTestRunnerPlugins
import time
import os
# 实例化一个套件,传入测试类所在的目录 ,
suite=unittest.defaultTestLoader.discover("../Case",pattern="test*")


#实例话一个时间格式化
timename=time.strftime("%Y-%m-%d %H_%M_%S")  #放在HTML文件名前,成为文件名的一部分 这样文件名不会重复 ,但是格式必须是下划线或横线 不能是冒号: 否则会报错


#需要把HTML文件放到report ,所以HTML的路径必然是在report中---->导入os包

caseHTML_path=os.path.dirname(__file__) #获取当前目录
filename=caseHTML_path+'/'+timename+'filename.HTML'

with open(filename,"wb") as fq:
    #实例化一个HTMLTestRunner
    runner=HTMLTestRunnerPlugins.HTMLTestRunner(
        stream=fq,
        verbosity=2,
        title="测试报告标题",
        description="描述",
        tester="测试者"
    )
    runner.run(suite)

​

7.数据驱动

防止写重复的代码,有的用例只是参数不一样,其他代码完全一样,就可以通过在unittest里面需要使用 ddt 来提供参数化的功能 

使用:

ddt可以参数化读取列表嵌套列表或者列表嵌套字典的数据

①列表嵌套列表读取:

先在类前面加上: @ddt.ddt

在方法前面加上: @ddt.data(*列表嵌套列表)

                           @ddt.unpack

②列表嵌套字典读取:

先在类前面加上: @ddt.ddt

在方法前面加上: @ddt.data(*列表嵌套字典) 在方法里面使用一个形式参数来接收

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
后台采用apache服务器下的cgi处理c语言做微信小程序后台逻辑的脚本映射。PC端的服务器和客户端都是基于c语言写的。采用mysql数据库进行用户数据和聊天记录的存储。.zip C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值