- Pytest:帮助您编写更好的程序
- 完整的 Pytest 文档
- 安装和入门
- 使用和调用
- 在现有测试套件中使用 pytest
- 测试中断言的编写和报告
- Pytest 夹具:显式、模块化、可扩展
- 用属性标记测试函数
- MonkeyPatching / Mocking 模块和环境
- 临时目录和文件
- 捕获 stdout/stderr 输出
- 捕获警告
- 模块和测试文件的 Doctest 集成
- 跳过和 xfail:处理无法成功的测试
- 参数化夹具和测试功能
- 缓存:使用交叉测试运行状态
- UnitTest.TestCase 支持
- 运行为鼻子编写的测试
- 经典的 Xunit 风格设置
- 安装和使用插件
- 编写插件
- 登录
- 良好的集成实践
- 古怪的测试
- Pytest 导入机制和 sys.path/PYTHONPATH
- 设置 bash 完成
- API 引用
- _pytest.hookspec
- _pytest.python_api
- _pytest.outcomes
- _pytest.config
- _pytest.mark
- _pytest.recwarn
- _pytest.assertion
- _pytest.freeze_support
- _pytest.fixtures
- _pytest.cacheprovider
- _pytest.capture
- _pytest.doctest
- _pytest.junitxml
- _pytest.logging
- _pytest.monkeypatch
- _pytest.pytester
- _pytest.tmpdir
- _pytest.python
- _pytest.nodes
- _pytest.reports
- _pytest._code.code
- _pytest.config.argparsing
- _pytest.main
- pluggy.callers
- _pytest.config.exceptions
- py.test 2.0.0:断言++、UnitTest++、Reporting++、Config++、Docs++
- 示例和自定义技巧
- 配置
- 贡献开始
- 向后兼容策略
- Python 2.7 和 3.4 支持
- 企业版 pytest
- 项目实例
- 历史笔记
- 弃用和移除
- 发展指南
- 演讲和辅导
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
使用非 python 测试
在yaml文件中指定测试的基本示例
下面是一个例子 conftest.py
(摘自Ali Afshar的特殊用途 pytest-yamlwsgi 插件)。这个 conftest.py
将收集 test*.yaml
文件并将以自定义测试的形式执行yaml格式的内容:
# content of conftest.py import pytest def pytest_collect_file(parent, path): if path.ext == ".yaml" and path.basename.startswith("test"): return YamlFile.from_parent(parent, fspath=path) class YamlFile(pytest.File): def collect(self): # We need a yaml parser, e.g. PyYAML. import yaml raw = yaml.safe_load(self.fspath.open()) for name, spec in sorted(raw.items()): yield YamlItem.from_parent(self, name=name, spec=spec) class YamlItem(pytest.Item): def __init__(self, name, parent, spec): super().__init__(name, parent) self.spec = spec def runtest(self): for name, value in sorted(self.spec.items()): # Some custom test execution (dumb example follows). if name != value: raise YamlException(self, name, value) def repr_failure(self, excinfo): """Called when self.runtest() raises an exception.""" if isinstance(excinfo.value, YamlException): return "\n".join( [ "usecase execution failed", " spec failed: {1!r}: {2!r}".format(*excinfo.value.args), " no further details known at this point.", ] ) def reportinfo(self): return self.fspath, 0, f"usecase: {self.name}" class YamlException(Exception): """Custom exception for error reporting."""
您可以创建一个简单的示例文件:
# test_simple.yaml ok: sub1: sub1 hello: world: world some: other
如果你安装了 PyYAML 或者一个兼容的yaml解析器,您现在可以执行测试规范:
nonpython $ pytest test_simple.yaml =========================== test session starts ============================ platform linux -- Python 3.x.y, pytest-6.x.y, py-1.x.y, pluggy-0.x.y cachedir: $PYTHON_PREFIX/.pytest_cache rootdir: $REGENDOC_TMPDIR/nonpython collected 2 items test_simple.yaml F. [100%] ================================= FAILURES ================================= ______________________________ usecase: hello ______________________________ usecase execution failed spec failed: 'some': 'other' no further details known at this point. ========================= short test summary info ========================== FAILED test_simple.yaml::hello ======================= 1 failed, 1 passed in 0.12s ========================
你传球得一分 sub1: sub1
检查一次失败。显然在上面 conftest.py
您将希望实现对yaml值更有趣的解释。您可以用这种方式轻松地编写自己的特定于域的测试语言。
注解
repr_failure(excinfo)
调用以表示测试失败。如果创建自定义集合节点,则可以返回所选的错误表示字符串。它将被报告为(红色)字符串。
reportinfo()
用于表示测试位置,在 verbose
模式:
nonpython $ pytest -v =========================== test session starts ============================ platform linux -- Python 3.x.y, pytest-6.x.y, py-1.x.y, pluggy-0.x.y -- $PYTHON_PREFIX/bin/python cachedir: $PYTHON_PREFIX/.pytest_cache rootdir: $REGENDOC_TMPDIR/nonpython collecting ... collected 2 items test_simple.yaml::hello FAILED [ 50%] test_simple.yaml::ok PASSED [100%] ================================= FAILURES ================================= ______________________________ usecase: hello ______________________________ usecase execution failed spec failed: 'some': 'other' no further details known at this point. ========================= short test summary info ========================== FAILED test_simple.yaml::hello ======================= 1 failed, 1 passed in 0.12s ========================
在开发自定义测试集合和执行时,只需查看集合树也很有趣:
nonpython $ pytest --collect-only =========================== test session starts ============================ platform linux -- Python 3.x.y, pytest-6.x.y, py-1.x.y, pluggy-0.x.y cachedir: $PYTHON_PREFIX/.pytest_cache rootdir: $REGENDOC_TMPDIR/nonpython collected 2 items <Package nonpython> <YamlFile test_simple.yaml> <YamlItem hello> <YamlItem ok> ======================== 2 tests collected in 0.12s ========================
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论