python单元测试
1、代码调试
-
print 输出调试
-
debug 打断点一行一行运行
-
assert 断言
def div(a, b): assert b != 0, "b的值为0" #满足条件 继续执行 #不满足条件 报错断言错误 输出错误描述提示 return a / b #res = div(1,10) res = div(1,10) print(res)
-
logging
-
pdb
可以调试代码 一行一行的执行如果想使用pdb进行调试 需要提前启动pdb 在Terminal上输入指令: python -m pdb 被调试的python文件 输入n 一行一行执行代码 输入p 变量名 可以查看变量的值 输入q结束调试
2、文档测试
#文档测试 测试的是注释
#导入doctest
import doctest
def hello(s1):
#输入3个'''回车就会出现
'''
:param s1 :接受一个参数
:return 返回这个参数
注意三个箭头后必须有一个空格
Example:
>>> print(hello('jack'))
jack
'''
return s1
#执行文档
docker.testmod()
3、单元测试
单元测试: 对一个函数/类/模块进行正确的校验
单元测试 – 测试功能是否能通过
import unittest
from func import binary_search
class test_binary_search(unittest.TestCase):
#校验开始
def setUp(self):
print('setUp...')
#校验结束
def tearDown(self):
print('tearDown...')
#测试我们的函数、类,函数名要以text_xxx开头
def test_binary_sch(self):
a=binary_search([1,2,3,4,5,6],3)
self.assertEqual(a,2)
#另一种常用的断言方法
#with self.assertRaises(KeyError):
#value = d['empty']
#是期待抛出指定类型的Error
if __name__ == '__main__':
unittest.main()
python -m unittest my_test(Py文件名)
#这是推荐的做法,因为这样可以一次批量运行很多单元测试,并且,有很多工具可以自动来运行这些单元测试。
setUp与tearDown可以在单元测试中编写两个特殊的setUp()和tearDown()方法。这两个方法会分别在每调用一个测试方法的前后分别被执行。setUp()和tearDown()方法有什么用呢?设想你的测试需要启动一个数据库,这时,就可以在setUp()方法中连接数据库,在tearDown()方法中关闭数据库,这样,不必在每个测试方法中重复相同的代码。
4、反射机制:通过字符串来操作对象/类/模块中的属性,方法
data = input("请输入要执行的方法名:")
res = hasattr(对象/类/模块名, data)
print(res) # True/False
if res:
f = getattr(对象/类/模块名, data)
print(f) #函数/属性值
#setattr 设置变量的值
setattr('对象/类/函数名',num,100)