测试文件:test_file_name.py
测试函数:test_function_name()
测试类:Test_class_name
「.」: Passed,测试通过
「F」:Failure,测试失败
「s」:Skip,测试未被执行
「x」:xfail,预期失败
「X」:xpass,预期失败但通过
「E」:Error,触发异常
-v/–verbose 测试结束输出详细的信息,最明显的区别就是每个测试用例都占一行,否则就是一个「.」
-q 简化输出信息 ,与–tb=line(仅打印异常代码位置)搭配
–help/-h 查看 pytest 用法,也可以展示新添加的插件的选项和用法
–collect-only 查看哪些用例会被执行
-k “name1 or name2” 指定希望运行的测试用例
-m mark_name 在函数上方标记@pytest.mark.mark_naem,可以运行相同标记的用例(自定义标记名),还可以使用 -m “mname1 and mname2” / “mname1 or mname2” 进行过滤, and or not 关键字
-x 默认测试失败继续执行之后的用例,加-x后可以立即停止
–maxfail 使用–maxfail=num 指定可以失败几次,–maxfail=1 与-x 效果一样
-s 允许终端在测试运行时输出某些结果
–lf last-failed 定位到最后一个失败的测试用例重新运行
–ff 运行完剩余的测试用例
-l 显示局部变量和其值
with pytest.raises(ErrorName)
@pytest.mark.skip()
@pytest.mark.skipif( expression )
加上这个注解的测试用例会直接跳过而不执行,运行时加上 -rs 可以显示跳过的原因
标记预期会失败的测试
@pytest.mark.xfail()
执行结果 x 代表 expected to fail,预期失败,实际也失败了
X 代表 expected to fail but passed,预期失败,但实际运行并没有失败
运行测试子集
运行单个目录下的所有测试,以目录作为 pytest 的参数即可
运行点个文件里的全部测试,以路径名加文件名作为 pytest 的参数即可
运行单个测试函数,只需要在文件名后面添加「::」符号和函数名,pytest tests/test.py::test_func_name
运行测试类需要在文件名后面添加「::」符号和类名
@pytest.mark.parametrize( argnames, argvalues ) 可以达到批量传送参数的目的
fixture 的优势在于用户在编写测试函数时可以只考虑核心测试逻辑,而不需要考虑测试前的准备工作。在 fixture 中的错误会被报告为 Error 而不是 Fail。
参考 https://www.jianshu.com/p/54b0f4016300
@pytest.fixture()装饰器用于声明函数是一个 fixture。如果测试函数的参数列表中包含 fixture 名,pytest 会检测到并在运行测试函数之前执行该 fixture。在编写测试函数的时候,可以将此函数名称做为传入参数,pytest将会以依赖注入方式,将该函数的返回值作为测试函数的传入参数
fixture 可以放在单独的测试文件里,但如果希望多个测试文件共享 fixture,可以在某个公共目录下新建一个 conftest.py 文件,将 fixture 放在其中
fixture 的调用
fixture 参数与返回值
fixture还可以带参数,可以把参数赋值给params,默认是None。对于param里面的每个值,fixture都会去调用执行一次,就像执行for循环一样把params里的值遍历一次。
fixture返回值默认是None,我们可以选择让fixture返回我们需要的东西。如果你的fixture需要配置一些数据,读个文件,或者连接一个数据库,那么你可以让fixture返回这些数据或资源。
fixture 会在测试函数之前运行,如果 fixture 包含 yield 那么系统会在 yield 处停止,转而运行测试函数,等测试函数执行完毕之后再回到 fixture 继续执行 yield 之后的代码,因此可将 yield 之前的代码视为配置过程(setup),将 yield 之后的代码视为清理过程(teardown)过程,无论测试过程中发生了什么,yield 之后的代码都会被执行。
–setup-show 可以实现看到测试过程中执行的是什么