1.单元测试
对功能/代码的最小单元进行测试。
对函数或者类当中的方法进行测试就是单元测试。
在python当中进行测试时,使用assert进行比较运算,而不是if...
语法:assert 预期结果 == 实际结果
当使用assert进行断言时,如果测试通过,程序正常执行,测试不通过会报错AssertionError
# if actual == expected: # print('ok') # else: # print('not ok') # assert 断言 assert actual == expected
在不使用任何框架的前提下,其实也是可以进行单元测试的,比如我们可以通过if判断、异常处理或者是其他的流程控制来表示测试是否通过。
def add(a, b):
# 被测函数,被测单元,被测功能
return a + b
# a=1 b=1 expected =2
def test_demo():
# 测试用例
actual = add(1, 1)
expected = 2
# if actual == expected:
# print('ok')
# else:
# print('not ok')
# assert 断言
assert actual == expected
test_demo()
# 在python当中进行测试时,使用assert,而不是if
# 当使用assert进行断言时,如果测试通过,程序正常执行,测试不通过会报错AssertionError
运行结果:
可以看出,测试通过,不返回任何数据。但如果测试不通过,会报错AssertionError,这时需要使用try...expect去捕获异常,才不会影响后续的代码运行。
def add(a, b):
# 被测函数,被测单元,被测功能
return a + b
# a=1 b=1 expected =2
def test_demo():
# 测试用例
actual = add(1, 1)
expected = 3
# if actual == expected:
# print('ok')
# else:
# print('not ok')
# assert 断言
assert actual == expected
test_demo()
# 在python当中进行测试时,使用assert,而不是if
# 当使用assert进行断言时,如果测试通过,程序正常执行,测试不通过会报错AssertionError
通过以上例子可以看出:在没有使用单元测试框架之前,我们确实可以做自动化测试,但需要手工做到以下几点:
1)测试用例函数,手工去调用测试函数;
2)当用例失败之后,需要加try捕获异常,才不会影响后续代码运行;
3)怎么去收集用例放到一个统一的模块里面;
4)还要手工写测试报告。
而使用单元测试框架,可以极大的简化我们对单元测试的过程,使用单元测试框架以后,框架会帮我们自动去收集用例,运行用例,生成报告。
2.单元测试框架
本质是提供一个工具的集合,我们直接使用就可以,使用手工完成的步骤它都可以自动完成。
unittest是python内置的单元测试框架,不需要安装;pytest是第三方单元测试框架,需要安装,但功能更强大。
unittest框架的特点:
1.带来的好处是便利;
2.但是学习成本也高,既定的框架都有相应的规则,我们使用它,就要遵守它的规则;
3.unittest也需要遵守很多规则。
unittest的几个概念:
- test case:测试用例
- test suite :测试集/测试套件 <