Pytest 整理

pytest框架可以轻松编写小型测试,然后进行扩展以支持应用程序和库的复杂功能测试。

pytest框架可以轻松编写小型测试,然后进行扩展以支持应用程序和库的复杂功能测试。
pip install -U pytest  安装pytest
pytest --version       检查安装版本
pytest -q *.py         使用“quiet”报告模式执行测试功能
python -m pytest [...] 通过Python解释器调用测试


以下是测试功能的可能结果:
PASSED (.):测试成功。
FAILED (F):测试失败(或XPASS + strict)。
SKIPPED (s): 测试被跳过。 @pytest.mark.skip()或 pytest.mark.skipif()修饰器告诉pytest跳过测试
xfail (x):预期测试失败。@pytest.mark.xfail()
XPASS (X):测试不应该通过。 @pytest.mark.xfail(reason="always xfail")
ERROR (E):错误

pytest --fixtures   # shows builtin and custom fixtures

获取版本,选项名称,环境变量的帮助:
pytest --version   获取版本
pytest --fixtures  选项名称
pytest -h | --help 环境变量的帮助

在第一次(或N次)失败后停止:
pytest -x           第一次失败后停止执行
pytest --maxfail=2  第N次失败后停止执行

指定测试/选择测试:
1.在模块中运行测试
pytest test_mod.py
2.在目录中运行测试
pytest testing/
3.按关键字表达式运行测试
pytest -k "MyClass and not method"


按节点ID运行测试:
1.要在模块中运行特定测试:
pytest test_mod.py::test_func
2.在命令行中指定测试方法的示例:
pytest test_mod.py::TestClass::test_method
3.通过标记表达式运行测试
pytest -m slow   将运行@pytest.mark.slow装饰器修饰的所有测试

从包中运行测试
pytest --pyargs pkg.testing  将导入pkg.testing并使用其文件系统位置来查找和运行测试。


修改Python回溯打印:
pytest --showlocals #在tracebacks中显示局部变量
pytest -l           #显示局部变量(快捷方式)
pytest --tb=auto    #(默认)'long'追溯第一个和最后一个
                    #entry,但其他条目的'short'样式
pytest --tb=long    #详尽,信息丰富的回溯格式
pytest --tb=short   #较短的回溯格式
pytest --tb=line    #每次失败只有一行
pytest --tb=native  #Python标准库格式
pytest --tb=no      #no traceback
pytest --full-trace #原因很长的走线要在错误(长于打印--tb=long)。它还确保在KeyboardInterrupt(Ctrl + C)上打印堆栈跟踪。如果测试花费的时间过长,并且使用Ctrl + C中断它们以找出测试挂起的位置,这非常有用。默认情况下,不会显示任何输出(因为python会捕获KeyboardInterrupt)。通过使用此选项,您可以确保显示跟踪。

pytest -ra         #该-r标志可用于在测试会话结束时显示“简短测试摘要信息”,使大型测试套件可以轻松获得所有故障,跳过,xfails等的清晰图像。


pytest -rfs   只能查看失败和跳过的测试:
f - 失败了
E - 错误
s - 跳过了
x - xfailed
X - xpassed
p - 过去了
P - 通过输出
a - 除了 pP


PDB:
Python附带一个名为PDB的内置Python调试器
pytest --pdb 进入PDB提示符
通常,您可能只想在第一次失败测试中执行此操作以了解某种故障情况:
pytest -x --pdb   # 在第一次失败时降至PDB,然后结束测试会话
pytest --pdb --maxfail=3  # 在前三次失败时降至PDB
请注意,在任何失败时,异常信息都存储在 sys.last_value,sys.last_type和


在任何失败时,异常信息都存储在 sys.last_value,sys.last_type和sys.last_traceback。
import sys
sys.last_value
sys.last_type
sys.last_traceback


在测试开始时删除到PDB:
pytest --trace   pytest允许用户通过命令行选项在每次测试开始时立即进入PDB提示符.


设置断点:
在代码中设置断点,请在代码中使用本机Python 调用,pytest会自动禁用该测试的输出捕获:import pdb;pdb.set_trace():
1.其他测试中的输出捕获不受影响。
2.任何先前的测试输出已经被捕获并将被处理。
3.在同一测试中生成的任何后续输出都不会被捕获,而是直接发送到sys.stdout。请注意,即使在退出4交互式PDB跟踪会话并继续常规测试运行后发生的测试输出也是如此。


使用内置断点功能:
Python 3.7引入了内置breakpoint()函数。Pytest支持使用breakpoint()以下行为:
1.当breakpoint()调用并PYTHONBREAKPOINT设置为默认值时,pytest将使用自定义内部PDB跟踪UI而不是系统默认值Pdb。
2.测试完成后,系统将默认返回系统Pdb跟踪UI。
3.随着--pdb传递给pytest,自定义内部PDB跟踪UI使用既breakpoint()和失败的测试/未处理的异常。
4.--pdbcls 可用于指定自定义调试器类。


分析测试执行持续时间:
pytest --durations=10  要获得最慢的10个测试持续时间的列表:
默认情况下,除非-vv在命令行上传递,否则pytest不会显示太小的测试持续时间(<0.01s)


创建JUnitXML格式文件:
要创建可由Jenkins或其他Continuous集成服务器读取的结果文件,请使用此调用:
pytest --junitxml=path   在path。创建XML文件。
3.1版中的新功能:
要设置根测试套件xml项的名称,可以junit_suite_name在配置文件中配置该选项:

[pytest]
junit_suite_name = my_suite

4.0版中的新功能。
JUnit的XML规范似乎表明"time"属性应报告的总测试执行时间,其中包括建立和拆除(1,2)。这是默认的pytest行为。要仅报告呼叫持续时间,请配置如下junit_duration_report选项:
[pytest]
junit_duration_report = call


-------------------------------
record_property:<警告:record_property 是一个实验性功能,将来可能会发生变化。>
版本2.8中的新功能。
在3.5版本中改为:Fixture从更名record_xml_property到record_property的用户属性现在适用于所有记者。 record_xml_property现已弃用。
如果要记录测试的其他信息,可以使用 record_property Fixture:
#the content of test_function.py
def test_function(record_property):
    record_property("example_key", 1)
    assert True
$pytest test_function.py --junitxml=./test_function.xml
多了:
<property name="example_key" value="1" />
或者
# content of test_function.py
import pytest
@pytest.mark.test_id(1501)
def test_function():
    assert True
$pytest test_function.py --junitxml=./test_function.xml
多了:
<property name="test_id" value="1501" />
------------------------------


------------------------------
record_xml_attribute:<record_xml_attribute是一个实验性功能,它的界面可能会被未来版本中更强大和更通用的东西取代。但是,将保留功能本身。>
版本3.4中的新功能。
要向testcase元素添加其他xml属性,可以使用 record_xml_attributefixture。这也可以用于覆盖现有值:
def test_function(record_xml_attribute):
    record_xml_attribute("assertions", "RE-1234")
    record_xml_attribute("classname", "custom_classname")
    print("hello world")
    assert True
多了:
<testcase classname="custom_classname" file="test_function.py" line="0" name="test_function" time="0.003" assertions="REQ-1234">
----------------------------


----------------------------
LogXML:add_global_property
3.0版中的新功能。
如果要在testsuite级别添加属性节点,该节点可能包含与您可以使用的所有测试用例相关的属性 LogXML.add_global_properties
----------------------------


----------------------------
将测试报告发送到在线pastebin服务:
pytest --pastebin=failed   为每个测试失败创建一个URL
这会将测试运行信息提交给远程粘贴服务,并为每个失败提供一个URL。您可以像往常一样选择测试,或者添加例如,-x如果您只想发送一个特定的故障。
pytest --pastebin=all  为整个测试会话日志创建URL,目前只实现粘贴到http://bpaste.net服务。
----------------------------


----------------------------
禁用插件
要在调用时禁用加载特定插件,请将该-p选项与前缀一起使用no:。
示例:禁用加载插件doctest,负责从文本文件执行doctest测试,调用pytest,如下所示:
pytest -p no:doctest
----------------------------

----------------------------
从Python代码中调用pytest:
pytest.main()  pytest直接从Python代码调用(像你从命令行调用“pytest”一样)
pytest.main(['-x', 'mytestdir']) (像 pytest -x mytestdir)
----------------------------


----------------------------
在测试中编写和报告断言:
断言assert声明:
def f():
    return 3
def test_function():
    assert f() == 4
----------------------------

----------------------------
关于预期异常的断言:
为了编写有关引发异常的断言,您可以pytest.raises像上面这样使用 上下文管理器:

 

 

 

 

 

 

 

 

 

 

pytest dirname --duration=3

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值