python单元测试
目录
3.较为繁琐的单元测试的写法:用户登录login_check.py
1.创建一个测试套件unittest.TestSuite()
3.执行测试用例(需要先创建一个测试运行程序TextTestRunner())
一、单元测试
1.定义:
对单个模块或者是单个类或者是单个函数进行测试
一般就是单元测试,集成测试,系统测试,验收测试
2.单元测试准备
测试用例,测试案件,测试运行程序,测试环境的准备和恢复
3.较为繁琐的单元测试的写法:用户登录login_check.py
def login_check(username=None,password=None):
"""
登录校验的函数
:param username:账号
:param password:密码
:return: dict type
"""
if username != None and password != None:
if username == "python26" and password == "lemon":
return {"code":0,"msg":"登录成功"}
else:
return {"code":1,"msg":"账号或密码不正确"}
else:
return {"code":1,"msg":"参数不能为空"}
#第一条用例
#入参:python26 密码:lemon
#预期结果:{"code":0,"msg":"登录成功"}
excepted={"code":0,"msg":"登录成功"}
#实际结果:
res=login_check("python26",password="lemon")
#判断预期是否等于实际结果:
if excepted==res:
print("用例执行成功")
else:
print("用例执行失败")
#断言assert
"""
断言条件不通过,会报错(断言异常)
断言条件通过,不会报异常。直接执行下一行代码
"""
assert excepted==res
二、unittest框架以及原理介绍
1.unittest框架最核心的四个概念:
- TestCase:一个testcase的实例就是一个测试用例
- TestSuite:多个测试用例集合在一起,TestLoader:是用来加载TestCase到TestSuite中的
- TextTestRunner:用来执行测试用例的
- fixture:测试用例环境的搭建合销毁。测试前准备环境的搭建(setUp),执行测试代码(run),以及测试后环境的还原(tearDown)
2.使用unittest进行单元测试
测试用例类:只要定义的类继承于unittest.TestCase那么这个类就说测试用例类
测试用例怎么写:在测试用例中定义以test开头的方法就是一条测试用例
unittest中评判断言是否通过的标准,是否出现断言错误
创建测试用例对象的时候,必须要传入用例的方法名
例子:case1=LoginTest("test_login_pass")
原因:
unittest单元测试例子:testcase.py
import unittest
from learning.unittest.login import login_check
class LoginTest(unittest.TestCase):
def test_login_pass(self):
# 正常登录
# 第一步:准备用例数据
# 入参
data = ("python26", "lemon")
# 预期结果
excepted = {"code": 0, "msg": "登录成功"}
# 第二步:获取实际结果
# 实际结果(传入参数,调用待测试的功能函数)
# 元组进行拆包*
res = login_check(*data)
# 第三步:比较预期结果和实际结果(断言)
# 断言预期和实际是否相等 assertEqual
self.assertEqual(excepted, res)
def test_user_is_none(self):
#账号为空
# 入参
data = (None, "lemon")
# 预期结果
excepted = {"code": 1, "msg": "参数不能为空"}
# 第二步:获取实际结果
# 实际结果(传入参数,调用待测试的功能函数)
# 元组进行拆包*
res = login_check(*data)
# 第三步:比较预期结果和实际结果(断言)
# 断言预期和实际是否相等 assertEqual
self.assertEqual(excepted, res)
# 创建测试用例对象的时候,必须要传入用例的方法名
case1=LoginTest("test_login_pass")
3.unittest的执行,测试用例的执行
- 测试套件:使用unittest.TestSuite这个类创建出来的对象就是测试套件
- 测试运行程序:使用unittest.TextTestRunner创建出来的对象,就是一个测试用例运行程序对象(执行用例的入口)
- 测试运行程序后面会用第三方的,不使用unittest自带的
- 用例加载对象:unittest.TestLoader
- 测试用例执行的顺序:根据测试用例的方法名,按照码进行排序的(不是根据定义的先后顺序进行的)
三、unittest单测步骤
1.创建一个测试套件unittest.TestSuite()
2.将测试用例加载到测试套件中
- 方法一:一条一条添加
#创建一个测试用例
case1=LoginTest("test_login_pass")
case2=LoginTest("test_user_is_none")
#将用例添加到套件中
suite.addTest(case1)
suite.addTest(case2)
- 方法二:通过测试用例类进行添加:先加载对象TestLoader() 再使用 loadTestsFromTestCase()方法
# 创建一个用例加载对象后,调用loadTestsFromTestCase()方法,通过测试用例类来调用
loader = unittest.TestLoader()
suite.addTest(loader.loadTestsFromTestCase(LoginTest)
-
方法三:通过用例模块来加载测试用例:先加载对象TestLoader() 再使用 loadTestsFromMoudle()方法
from learning.unittest import testcase #测试用例模块导入
loader = unittest.TestLoader()
suite.addTest(loader.loadTestsFromModule(testcase))
- 方法四:通过路径去进行加载(默认会加载该路径下所有以test开头的模块的测试用例)【注:也可通过pattern来控制需要进行执行的文件】
loader = unittest.TestLoader()
suite.addTest(loader.discover(r"D:\python\learning\unittest"),pattern="*.py")
#也可以写成测试用例类的默认加载器【unittest中默认的加载器】【扩展】
unittest.defaultTestLoader.discover(r"D:\python\learning\unittest",pattern="*.py")
3.执行测试用例(需要先创建一个测试运行程序TextTestRunner())
# 创建测试运行程序
runner = unittest.TextTestRunner()
runner=HTMLTestRunner(stream=open("report.html","wb"),title="26期测试报告",description="baobao",tester="想") # 以覆盖写入二进制方式,调用了第三方插件
# 执行测试套件中的测试用例
runner.run(suite)
4.例子
import unittest
from HTMLTestRunnerNew import HTMLTestRunner
from learning.unittest.testcase import LoginTest
# 第一步:创建一个测试套件
suite = unittest.TestSuite()
# 第二步:将测试用例加载到测试套件中
# 第一种:一条一条添加
"""
#创建一个测试用例
case1=LoginTest("test_login_pass")
case2=LoginTest("test_user_is_none")
#将用例添加到套件中
suite.addTest(case1)
suite.addTest(case2)
"""
# 第二种:通过测试用例类进行添加
"""
# 创建一个用例加载对象后,调用loadTestsFromTestCase()方法,通过测试用例类来调用
loader = unittest.TestLoader()
suite.addTest(loader.loadTestsFromTestCase(LoginTest))
"""
# 第三种:通过用例模块来加载测试用例
from learning.unittest import testcase #测试用例模块导入
loader = unittest.TestLoader()
suite.addTest(loader.loadTestsFromModule(testcase))
# 第四种:通过路径去进行加载(默认会加载该路径下所有以test开头的模块的测试用例)【注:也可通过pattern来控制需要进行执行的文件】
loader = unittest.TestLoader()
suite.addTest(loader.discover(r"D:\python\learning\unittest"),pattern="*.py")
#也可以写成测试用例类的默认加载器【unittest中默认的加载器】【扩展】
unittest.defaultTestLoader.discover(r"D:\python\learning\unittest",pattern="*.py")
# 第三步:执行测试用例(需要先创建一个测试运行程序)
# 创建测试运行程序
runner = unittest.TextTestRunner()
runner=HTMLTestRunner(stream=open("report.html","wb"),title="26期测试报告",description="baobao",tester="想") # 以覆盖写入二进制方式,调用了第三方插件
# 执行测试套件中的测试用例
runner.run(suite)
四、安装第三方库的文件
五、测试环境的搭建和销毁4种
def setUp(self):
print("该方法在每一条用例执行之前会调用")
def tearDown(self):
print("该方法在每一条用例执行之后会调用")
@classmethod
def setUpClass(cls):
print("该方法在测试类中的用例执行之前会调用")
@classmethod
def tearDownClass(cls):
print("该方法在测试类中的所有用例执行之后会调用")
if __name__ == "__main__":
unittest.main()