unittest框架及原理
⼀、unittest框架及原理介绍
1、unittest最核⼼的四个概念
2、Unittest中TestCase类的⽤法
测试⽤例类:⾃⼰定义的类只要继承于unittest中的TestCase那么这个类就是⼀个测试⽤例类测试⽤例:测试⽤例类中,以test开头的⽅法就是⼀条测试⽤例⽤例执⾏通没通过的评判标准:断⾔异常import unittest
from Login import login_check
class LoginTestCases(unittest.TestCase): def test_login_pass(self):
#第⼀步:准备测试⽤例数据
#1、⽤例的参数:可⽤元组,列表和字典 data=(\"python24\ #2、预期结果
expected={\"code\":0,\"msg\":\"登录成功\ #第⼆步:执⾏功能函数,获取实际结果 result=login_check(*data)
#第三步:⽐对实际结果和预期结果 # assert expected==result
self.assertEqual(result,expected)
# 如果直接运⾏这个⽂件,就使⽤unittest中的main函数来执⾏测试⽤例if __name__ == '__main__': unittest.main()
3、Unittest中TestSuit类的⽤法
import unittest
#第⼀步:创建⼀个测试套件suit=unittest.TestSuite()
#第⼆步:将测试⽤例加载到测试套件中
#第1种,通过模块加载⽤例,把模块名作为参数,将该模块中所有测试⽤例全部加载到套件中#创建⼀个加载对象import Testcases
load=unittest.TestLoader()
suit.addTest(load.loadTestsFromModule(Testcases))
#第2种:通过测试⽤例类去加载,把模块中的测试类作为参数,将该测试⽤例类中所有测试⽤例加载到套件中import Testcases
load=unittest.TestLoader()
suit.addTest(load.loadTestsFromTestCase(Testcases.LoginTestCases))
#第3种,添加单条测试⽤例,先导⼊测试⽤例类,再创建⼀个测试类对象,把测试⽤例⽅法名作为参数(unittest.TestCase有参数为字符串类型)
from Testcases import LoginTestCases# 创建⼀个⽤例对象
# 注意点:通过⽤例类去创建测试⽤例对象的时候,需要传⼊⽤例的⽅法名(字符串类型)case=LoginTestCases(\"test_login_pass\")suit.addTest(case)
# 第4种,指定测试⽤例的所在的⽬录路径,把路径作为参数,将该路径下的所有⽤例加载到套件中loader = unittest.TestLoader()
suite.addTest(loader.discover(r\"⽤例⽂件所在的⽬录的绝对路径\"))#第三步:创建⼀个测试运⾏程序启动器#第1种:使⽤unittest⾃带的启动器runner=unittest.TextTestRunner()
#第四步:使⽤启动器去执⾏套件,把套件作为参数runner.run(suite)
4、使⽤TestRunerNew模块⽣成html测试报告
from HTMLTestRunnerNew import HTMLTestRunner#第三步:创建⼀个测试运⾏程序启动器
#第2种:使⽤HTMLTestRunner传⼊参数⽣产启动器
#参数1:打开测试报告⽂件,必须是html后缀的⽂件,模式\"wb\",以⼆进制模式覆盖写⼊,将句柄传给stream#参数2:verbosity=2为默认参数,可以不⽤填写#参数3:tester,报告中显⽰的测试⼈员#参数4:description,报告的描述信息#参数5:title,报告的标题
runner=HTMLTestRunner(stream=open(\"report.html\描述信息\登录功能测试报告\")
5、Unittest中fixture的使⽤
是写在测试⽤例类⾥⾯的,⽤于测试环境搭建或销毁
# 每条⽤例执⾏之前都会执⾏,⽤例的前置条件,以print输出的在测试报告中会显⽰出来def setUp(self):
print(\"⽤例{}开始执⾏--\".format(self))
# 每条⽤例执⾏之后都会执⾏,⽤例的后置处理,以print输出的在测试报告中会显⽰出来def tearDown(self):
print(\"⽤例{}执⾏结束--\".format(self))
# 当成测试⽤例类中的⽤例执⾏之前,会执⾏该⽅法,print输出的不在报告中显⽰,在控制台显⽰@classmethod
def setUpClass(cls):
print(\"-----setup---classs-----\")
# 当成测试⽤例类中的⽤例执⾏完毕,会执⾏该⽅法,print输出的不在报告中显⽰,在控制台显⽰@classmethod
def tearDownClass(cls):
print(\"-----teardown---classs-----\")