[翻译]pytest测试框架(一)
此文已由作者吴琪惠授权网易云社区发布。
欢迎访问网易云社区,了解更多网易技术产品运营经验。
纯官网译文而已。。。
pytest是一个成熟的、全功能的python测试工具。
pytest框架编写测试用例时,小的用例会变得更容易编写,但对于复杂的应用或者库应该更谨慎选择。
特征:
1.断言失败之后具备详细的失败信息(不无需记住self.asseer*的名字)
2.自动失败测试模块和方法
3.模块化组件,可用于管理小的或者参数化长时间存活的测试资源
4.可以在box外运行uniitest和nose测试组件
5.支持Python2.6+, Python3.3+, PyPy-2.3, Jython-2.5 (未测试)
6.丰富的插件架构,拥有超过150+个外部插件和人气活动的论坛社区
安装:
支持的python版本:Python 2.6,2.7,3.3,3.4,3.5, Jython, PyPy-2.3
支持的平台:Unix/Posix ,Windows
Pypi连接:pytest
安装命令:
pip install -U pytest
检查安装结果:
$ pytest --version
This is pytest version 3.0.6, imported from $PYTHON_PREFIX/lib/python3.5/site-packages/pytest.py
第一次运行一个简单的例子:
# content of test_sample.pydef inc(x):
return x + 1def test_answer():
assert inc(3) == 5
运行结果:
$ pytest
======= test session starts ========
platform linux -- Python 3.5.2, pytest-3.0.6, py-1.4.33, pluggy-0.4.0rootdir: $REGENDOC_TMPDIR, inifile:
collected 1 items test_sample.py F ======= FAILURES ========
_______ test_answer ________ def test_answer():> assert inc(3) == 5E assert 4 == 5E + where 4 = inc(3) test_sample.py:5: AssertionError
======= 1 failed in 0.12 seconds ========
上面的例子失败是因为func(3)不应该返回5,而是4
提示:你可以简单的使用 assert 语句来进行测试是否异常,pytest内置了详尽的断言,可只能的识别 assert表达式的中间项,你无需记住JUint那么多的传统方法
运行多个测试用例:
pytest会运行当前路径以及其子路径下的所有格式如 test_*.py 或者 *_test.py文件,通常遵循标准试验发现规则。
异常断言:
如果你想要assert一些抛出异常的代码,你可以使用raises,运行脚本,使用“quiet”静默模式(-q):
# content of test_sysexit.pyimport pytestdef f():
raise SystemExit(1)def test_mytest():
with pytest.raises(SystemExit):
f()
运行结果:
$ pytest -q test_sysexit.py
.1 passed in 0.12 seconds
在一个类中分组用例:
实际场景中,会遇到一个类中或者一个模块下有一些逻辑上有关联的用例组,举个例子:
# content of test_class.pyclass TestClass:
def test_one(self):
x = "this"
assert 'h' in x def test_two(self):
x = "hello"
assert hasattr(x, 'check')
上面两个用例,没有子类,因此我们可以直接使用文件名来运行:
$ pytest -q test_class.py
.F
======= FAILURES ========
_______ TestClass.test_two ________ self = <test_class.TestClass object at 0xdeadbeef> def test_two(self):
x = "hello"> assert hasattr(x, 'check')
E assert FalseE + where False = hasattr('hello', 'check') test_class.py:8: AssertionError1 failed, 1 passed in 0.12 seconds
第一个用例passed,第二个failed,并且我们可以情况的看着断言中的一些中间值,帮助我们理解错误原因。
功能测试用例:生成唯一的临时目录
功能测试经常需要创建一些文件,并将其传递给应用程序对象。pytest提供 Builtin fixtures/function 参数允许请求任意资源,例如唯一的临时目录:
# content of test_tmpdir.pydef test_needsfiles(tmpdir):
print (tmpdir)
assert 0
在函数中打印了参数 tmpdir,pytest会在执行测试方法之前,查找和调用一个fixture factory来创建资源。运行例子:
$ pytest -q test_tmpdir.py
F
======= FAILURES ========
_______ test_needsfiles ________ tmpdir = local('PYTEST_TMPDIR/test_needsfiles0') def test_needsfiles(tmpdir):
print (tmpdir)
> assert 0E assert 0test_tmpdir.py:3: AssertionError
--------------------------- Captured stdout call ---------------------------
PYTEST_TMPDIR/test_needsfiles01 failed in 0.12 seconds
在测试执行之前,一个 唯一的-单独的-测试-执行 临时路径被创建。
断言的前面的print内容也会打印出来,测试时可以多加print语句,保证异常时输出一些有用的信息。
以下命令可以看到更多的内置函数:
pytest --fixtures # shows builtin and custom fixtures
E:\0WORKS\MyPytest>py.test --fixtures
============================= test session starts =============================
platform win32 -- Python 2.7.10, pytest-3.0.4, py-1.4.31, pluggy-0.4.0rootdir: E:\0WORKS\MyPytest, inifile:plugins: html-1.11.0, rerunfailures-2.1.0collected 1 items
cache
Return a cache object that can persist state between testing sessions. cache.get(key, default)
cache.set(key, value) Keys must be a ``/`` separated value, where the first part is usually the
name of your plugin or application to avoid clashes with other cache users. Values can be any object handled by the json stdlib module.
capsys
Enable capturing of writes to sys.stdout/sys.stderr and make
captured output available via ``capsys.readouterr()`` method calls
which return a ``(out, err)`` tuple.
capfd
Enable capturing of writes to file descriptors 1 and 2 and make
captured output available via ``capfd.readouterr()`` method calls
which return a ``(out, err)`` tuple.
doctest_namespace
Inject names into the doctest namespace.
pytestconfig
the pytest config object with access to command line opts.
record_xml_property
Add extra xml properties to the tag for the calling test.
The fixture is callable with ``(name, value)``, with value being automatical
ly
xml-encoded.
monkeypatch
The returned ``monkeypatch`` fixture provides these
helper methods to modify objects, dictionaries or os.environ:: monkeypatch.setattr(obj, name, value, raising=True)
monkeypatch.delattr(obj, name, raising=True)
monkeypatch.setitem(mapping, name, value)
monkeypatch.delitem(obj, name, raising=True)
monkeypatch.setenv(name, value, prepend=False)
monkeypatch.delenv(name, value, raising=True)
monkeypatch.syspath_prepend(path)
monkeypatch.chdir(path) All modifications will be undone after the requesting
test function or fixture has finished. The ``raising``
parameter determines if a KeyError or AttributeError
will be raised if the set/deletion operation has no target.
recwarn
Return a WarningsRecorder instance that provides these methods: * ``pop(category=None)``: return last warning matching the category.
* ``clear()``: clear list of warnings See http://docs.python.org/library/warnings.html for information on warning categories.
tmpdir_factory
Return a TempdirFactory instance for the test session.
tmpdir
Return a temporary directory path object
which is unique to each test function invocation,
created as a sub directory of the base temporary
directory. The returned object is a `py.path.local`_
path object. ------------------ fixtures defined from pytest_html.plugin -------------------
environment
Provide environment details for HTML report ======================== no tests ran in 0.21 seconds =========================
网易云免费体验馆,0成本体验20+款云产品!
更多网易技术、产品、运营经验分享请点击。
相关文章:
【推荐】 Kubernetes在网易云中的落地优化实践
[翻译]pytest测试框架(一)的更多相关文章
- [翻译]pytest测试框架(二):使用
此文已由作者吴琪惠授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 调用pytest 调用命令: python -m pytest [...] 上面的命令相当于在命令行直接调用 ...
- pytest测试框架 -- 简介
一.pytest测试框架简介: (1)pytest是python的第三方测试框架,是基于unittest的扩展框架,比unittest更简洁,更高效. (2)pytest框架可以兼容unittest用 ...
- Pytest测试框架(一):pytest安装及用例执行
PyTest是基于Python的开源测试框架,语法简单易用,有大量的插件,功能非常多.自动检测测试用例,支持参数化,跳过特定用例,失败重试等功能. 安装 pip install -U pytest ...
- Pytest测试框架(二):pytest 的setup/teardown方法
PyTest支持xUnit style 结构, setup() 和 teardown() 方法用于初始化和清理测试环境,可以保证测试用例的独立性.pytest的setup/teardown方法包括:模 ...
- Pytest测试框架(三):pytest fixture 用法
xUnit style 结构的 fixture用于初始化测试函数, pytest fixture是对传统的 xUnit 架构的setup/teardown功能的改进.pytest fixture为测试 ...
- Pytest测试框架(五):pytest + allure生成测试报告
Allure 是一款轻量级.支持多语言的开源自动化测试报告生成框架,由Java语言开发,可以集成到 Jenkins. pytest 测试框架支持Allure 报告生成. pytest也可以生成juni ...
- 『德不孤』Pytest框架 — 1、Pytest测试框架介绍
目录 1.什么是单元测试框架 2.单元测试框架主要做什么 3.单元测试框架和自动化测试框架有什么关系 4.Pytest测试框架说明 5.Pytest框架和Unittest框架区别 (1)Unittes ...
- python pytest测试框架介绍二
在介绍一中简单介绍了pytest的安装和简单使用,接下来我们就要实际了解pytest了 一.pytest的用例发现规则 pytest可以在不同的函数.包中发现用例,发现的规则如下 文件名以test_开 ...
- Pytest 测试框架
一 . Pytest 简介 Pytest是python的一种单元测试框架. 1. pytest 特点 入门简单,文档丰富 支持单元测试,功能测试 支持参数化,重复执行,部分执行,测试跳过 兼容其他测试 ...
随机推荐
- 熟悉下apple 马甲包
一.什么是马甲包 马甲包是利用App store 规则漏洞,通过技术手段,多次上架同一款产品的方法.马甲包和主产品包拥有同样的内容和功能,除了icon和应用名称不能完全一致,其他基本一致. 二.为什么 ...
- WPF DataGrid实现分页显示
主要代码如下 /// <summary> /// 读取指定页面的数据 /// </summary> /// <param name="pagePerCount& ...
- 跨域资源共享/option 请求产生原因
https://blog.csdn.net/hfahe/article/details/7730944
- sql中从指定位置截取指定长度字符串
1. 字符串函数应用 --从指定索引截取指定长度的字符串 ,) --获取字符串中指定字符的索引(从1开始) select charindex(',','ab,cdefg') --实际应用中的语句 , ...
- Django 1.10.2 模型数据库操作
首先我的django 版本 >>> django.VERSION (1, 10, 2, u'final', 0) setting.py: DATABASES = { 'default ...
- 网页截图API接口,一键自动生成网页截图
背景 最近在开发一个小程序,其中有一个帮助模块,内容为帮助文章列表,文章内容为网站后台编辑的富文本格式.鉴于小程序的特殊性,其对html格式的富文本支持并不友好. 刚开始有人开发了wxparse插件, ...
- NoClassDefFoundError: net/sf/ezmorph/Morpher
使用import net.sf.json.JSONObject; json-lib-2.4-jdk15.jar时报这个错,各种查找,受到https://blog.csdn.net/chenleixin ...
- IPMI总结
http://www.chenshake.com/summary-of-ipmi/ 记忆的很清楚,2000年的时候,当时还是Compaq,推出第一款远程控制卡,当时听起来非常神奇.可以远程开机,关机, ...
- opennebula 补丁制作与补丁升级
参考文章:http://www.cnblogs.com/itech/archive/2009/08/19/1549729.htmlhttp://www.ibm.com/developerworks/c ...
- mybatis总结回顾
1.mybatis的介绍 轻量级数据持久层框架,替代hibernate 2.mybatis的入门 导包-->配置文件(类名.xml.SqlMapConfig.xml) 类名.xml:放映射.sq ...