码迷,mamicode.com
首页 > 其他好文 > 详细

uinttest单元测试框架

时间:2021-03-04 13:06:23      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:步骤   用例   关于   项目   匹配   from   加载顺序   pat   project   

unittest是python中自带的单元测试框架,用来做单元测试
 
uinttestd的属性如下:
unitetest.TestCase :测试用例
 
unittest.TestSuite():多个测试用例集合在一起,创建测试套件
 
unitetest.defaultTestLoader:用来加载TestCase到TestSuite中的.通过该类下面的discover()方法可自动根据测试目录start_dir匹配查找测试用例文件(test*.py),并将查找到的测试用例组装到测试套件
unitetest.TextTextRunner:协调测试执行并向用户提供执行结果的组件,通过该类下面的run()方法来运行suite所组装的测试用例,入参为suite测试套件
 
unittest.skip():装饰器,当运行用例时,有些用例可能不想执行等,可用装饰器暂时屏蔽该条测试用例。一种常见的用法就是比如说想调试某一个测试用例,想先屏蔽其他用例就可以用装饰器屏蔽。
@unittest.skip(reason):无条件跳过装饰的测试,并说明跳过测试的原因。
@unittest.skipIf(reason):条件为真时,跳过装饰的测试,并说明跳过测试的原因。
@unittest.skipUnless(reason):条件为假时,跳过装饰的测试,并说明跳过测试的原因。
@unittest.expectedFailure(): 测试标记为失败。
 
 
TestCase类的属性如下:
setUp():setUp()方法用于测试用例执行前的初始化工作。如测试用例中需要访问数据库,可以在setUp中建立数据库连接并进行初始化。如测试用例需要登录web,可以先实例化浏览器。
 
tearDown():tearDown()方法用于测试用例执行之后的善后工作。如关闭数据库连接。关闭浏览器。
 
assert*():一些断言方法:在执行测试用例的过程中,最终用例是否执行通过,是通过判断测试得到的实际结果和预期结果是否相等决定的。
 
assertEqual(a,b,[msg=‘测试失败时打印的信息‘]):断言a和b是否相等,相等则测试用例通过。
assertNotEqual(a,b,[msg=‘测试失败时打印的信息‘]):断言a和b是否相等,不相等则测试用例通过。
assertTrue(x,[msg=‘测试失败时打印的信息‘]):断言x是否True,是True则测试用例通过。
assertFalse(x,[msg=‘测试失败时打印的信息‘]):断言x是否False,是False则测试用例通过。
assertIs(a,b,[msg=‘测试失败时打印的信息‘]):断言a是否是b,是则测试用例通过。
assertNotIs(a,b,[msg=‘测试失败时打印的信息‘]):断言a是否是b,不是则测试用例通过。
assertIsNone(x,[msg=‘测试失败时打印的信息‘]):断言x是否None,是None则测试用例通过。
assertIsNotNone(x,[msg=‘测试失败时打印的信息‘]):断言x是否None,不是None则测试用例通过。
assertIn(a,b,[msg=‘测试失败时打印的信息‘]):断言a是否在b中,在b中则测试用例通过。
assertNotIn(a,b,[msg=‘测试失败时打印的信息‘]):断言a是否在b中,不在b中则测试用例通过。
assertIsInstance(a,b,[msg=‘测试失败时打印的信息‘]):断言a是是b的一个实例,是则测试用例通过。
assertNotIsInstance(a,b,[msg=‘测试失败时打印的信息‘]):断言a是是b的一个实例,不是则测试用例通过。
 
Test fixture:对一个测试用例环境的搭建和销毁,是一个fixture,通过覆盖 TestCase的setUp()和tearDown()方法来实现。这个有什么用呢?比如说在这个测试用例中需要访问数据库,那么可以在setUp() 中建立数据库连接以及进行一些初始化,在tearDown()中清除在数据库中产生的数据,然后关闭连接。注意tearDown的过程很重要,要为以后的 TestCase留下一个干净的环境。关于fixture,还有一个专门的库函数叫做fixtures,功能更加强大
 
addTest(): addTest()方法是将测试用例添加到测试套件中,如下方,是将test_baidu模块下的BaiduTest类下的test_baidu测试用例添加到测试套件。
suite = unittest.TestSuite()
suite.addTest(test_baidu.BaiduTest(test_baidu))

 

 
# 创建测试套件
suite =unittest.TestSuite()

# 将测试用例添加到测试套件
# 方式一 添加单条用例
# suite.addTest(LoginTestCase,‘test_login_case_pass‘)

# 方式二 添加一个测试用例类中的所有用例
# loader:用来往测试套件中加载测试用例
# loader = unittest.TestLoader()
# suite.addTest(loader.loadTestsFromTestCase(LoginTestCase))

# 方式三 添加一个模块中所有的测试用例
loader = unittest.TestLoader()
suite.addTest(loader.loadTestsFromModule(testcases))

# 方式四:添加一个路径(目录)下面的所有测试用例
# loader = unittest.TestLoader()
# suite.addTest(loader.discover(r"D:\zhuyy\test\unittest\test_data"))

# 如何去运行测试套件中的所有测试用例?
# 创建测试运行程序
# runner = unittest.TextTestRunner()
# runner.run(suite)

 

 
run(): run()方法是运行测试套件的测试用例,入参为suite测试套件
runner = unittest.TextTestRunner()
runner.run(suite)

 

 
使用unittest编写python的单元测试代码,包括如下几个步骤:
1、编写一个python类,继承 unittest模块中的TestCase类,这就是一个测试类
2、在上面编写的测试类中定义测试方法(这个就是指的测试用例),每个方法的方法名要求以 test 打头,没有额外的参数。 在该测试方法中 调用被测试代码,校验测试结果,TestCase类中提供了很多标准的校验方法,如 最常见的assertEqual。
3、执行 unittest.main() ,该函数会负责运行测试,它会实例化所有TestCase的子类,并运行其中所有以test打头的方法。
 
使用unittest框架编写测试用例思路----基本思路如下:
 
# coding=utf-8
#1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

#2.注释:包括记录创建时间,创建人,项目名称。
‘‘‘
Created on 2016-7-27
@author: Jennifer
Project:使用unittest框架编写测试用例思路
‘‘‘
#3.导入unittest模块
import unittest

#4.定义测试类,父类为unittest.TestCase。
#可继承unittest.TestCase的方法,如setUp和tearDown方法,不过此方法可以在子类重写,覆盖父类方法。
#可继承unittest.TestCase的各种断言方法。
class Test(unittest.TestCase): 
    
#5.定义setUp()方法用于测试用例执行前的初始化工作。
#注意,所有类中方法的入参为self,定义方法的变量也要“self.变量”
#注意,输入的值为字符型的需要转为int型
    def setUp(self):
        self.number=raw_input(Enter a number:)
        self.number=int(self.number)

#6.定义测试用例,以“test_”开头命名的方法
#注意,方法的入参为self
#可使用unittest.TestCase类下面的各种断言方法用于对测试结果的判断
#可定义多个测试用例
#最重要的就是该部分
    def test_case1(self):
        print self.number
        self.assertEqual(self.number,10,msg=Your input is not 10)
        
    def test_case2(self):
        print self.number
        self.assertEqual(self.number,20,msg=Your input is not 20)

    @unittest.skip(暂时跳过用例3的测试)
    def test_case3(self):
        print self.number
        self.assertEqual(self.number,30,msg=Your input is not 30)

#7.定义tearDown()方法用于测试用例执行之后的善后工作。
#注意,方法的入参为self
    def tearDown(self):
        print Test over
        
#8如果直接运行该文件(__name__值为__main__),则执行以下语句,常用于测试脚本是否能够正常运行
if __name__==__main__:
#8.1执行测试用例方案一如下:
#unittest.main()方法会搜索该模块下所有以test开头的测试用例方法,并自动执行它们。
#执行顺序是命名顺序:先执行test_case1,再执行test_case2
    unittest.main()

‘‘‘
#8.2执行测试用例方案二如下:
#8.2.1先构造测试集
#8.2.1.1实例化测试套件
    suite=unittest.TestSuite()
#8.2.1.2将测试用例加载到测试套件中。
#执行顺序是安装加载顺序:先执行test_case2,再执行test_case1
    suite.addTest(Test(‘test_case2‘))
    suite.addTest(Test(‘test_case1‘))
#8.2.2执行测试用例
#8.2.2.1实例化TextTestRunner类
    runner=unittest.TextTestRunner()
#8.2.2.2使用run()方法运行测试套件(即运行测试套件中的所有用例)
    runner.run(suite)‘‘‘
    
‘‘‘
#8.3执行测试用例方案三如下:
#8.3.1构造测试集(简化了方案二中先要创建测试套件然后再依次加载测试用例)
#执行顺序同方案一:执行顺序是命名顺序:先执行test_case1,再执行test_case2
    test_dir = ‘./‘
    discover = unittest.defaultTestLoader.discover(test_dir, pattern=‘test_*.py‘)
#8.3.2执行测试用例
#8.3.2.1实例化TextTestRunner类
    runner=unittest.TextTestRunner()
#8.3.2.2使用run()方法运行测试套件(即运行测试套件中的所有用例)
    runner.run(discover)   
‘‘‘

 

 
 
 

uinttest单元测试框架

标签:步骤   用例   关于   项目   匹配   from   加载顺序   pat   project   

原文地址:https://www.cnblogs.com/butaileng7/p/14474996.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!