pytest属于三方包,仍然具有unittest的设计思想,但是需要了解它更多的实现,比如fixture固定设施,就有很多实现了,你只需要在【test_】开头的方法中加入对应的名称参数即可使用。
不过这样的话,很多东西都来自于pytest了,而且运行的时候,会自动捕获执行文件的【test_】开头的方法,作为测试案例,个人觉得这样的可控性较低,可能用于编写简单的测试案例还行吧。。
示例代码如下:
# 官网 https://docs.pytest.org/en/6.2.x/
# pytest 其实就是替换了 python 执行命令,
# 然后搜集执行的 py 文件中的 test_ 开头的方法,并执行起来
# 也可以使用【python -m pytest】来执行
# 这个东西主要是命令行执行 pytest my_pytest.py,不能在本文件直接执行(因为用的是python命令),
# 可以在运行中加参数【-m pytest】
# pytest -h 查询所有的 pytest 帮助
import pytest
def inc(x):
return x + 1
def test_answer():
assert inc(3) == 5
class TestClass:
def test_one(self):
x = "this"
assert "h" in x
def test_two(self):
x = "hello"
assert hasattr(x, "check")
# 已经配置好很多的固定设施,可以通过命令【pytest --fixtures】查询
# 下面演示使用【缓存文件夹】这个固定设施
# 然后通过 pytest 运行看看结果
def test_needsfiles(tmpdir):
print(tmpdir) # 打印 pytest 配置好的缓存文件夹位置
assert 0
if __name__ == '__main__':
"""
-m=xxx: 运行打标签的用例
-reruns=xxx,失败重新运行
-q: 安静模式, 不输出环境信息
-v: 丰富信息模式, 输出更详细的用例执行信息
-s: 显示程序中的print/logging输出
--resultlog=./log.txt 生成log
--junitxml=./log.xml 生成xml报告
"""
pytest.main(["-s", "-v", "my_pytest.py"]) # 调用pytest的main函数执行测试