一、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","lemonban")
#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","wb"),tester="xiaosongshu",description="描述信息",title="登录功能测试报告")
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-----")