目錄:
- 安裝及入門
- 使用和調用方法
- 原有TestSuite使用方法
- 斷言的編寫和報告
- Pytest fixtures:清晰 模塊化 易擴展
- 使用Marks標記測試用例
- Monkeypatching/對模塊和環境進行Mock
- 使用tmp目錄和文件
- 捕獲stdout及stderr輸出
- 捕獲警告信息
- 模塊及測試文件中集成doctest測試
- skip及xfail: 處理不能成功的測試用例
- Fixture方法及測試用例的參數化
- 緩存: 使用跨執行狀態
- unittest.TestCase支持
- 運行Nose用例
- 經典xUnit風格的setup/teardown
- 安裝和使用插件
- 插件編寫
- 編寫鉤子(hook)方法
- 運行日志
- API參考
- 優質集成實踐
- 片狀測試
- Pytest導入機制及sys.path/PYTHONPATH
- 配置選項
- 示例及自定義技巧
- Bash自動補全設置
API參考-Objects
對象(Objects)
CallInfo
*class *CallInfo
[source]
結果/異常信息是一個函數調用。
Class
*class *Class
[source]
基地: _pytest.python.PyCollector
收集器的測試方法。
collect
()[來源]
返回此集合節點的子項(項和收集器)列表。
Collector
*class *Collector
[source]
基地: _pytest.nodes.Node
收集器實例通過collect()創建子項,從而迭代地構建樹。
異常CollectError
[來源]
基地: Exception
收集期間出錯,包含自定義消息。
collect
()[來源]
返回此集合節點的子項(項和收集器)列表。
repr_failure
(*excinfo *)[來源]
表示集合失敗。
配置
class Config
[source]
訪問配置值,pluginmanager和插件鉤子。
option
=無
訪問命令行選項作為屬性。(已棄用),請getoption()
改用
pluginmanager
=無
一個pluginmanager實例
add_cleanup
(*func *)[來源]
添加一個在配置對象不使用時調用的函數(通常與pytest_unconfigure一致)。
classmethod fromdictargs
(option_dict,*args *)[source]
構造函數可用于子進程。
addinivalue_line
(名稱,行)[來源]
在ini-file選項中添加一行。該選項必須已聲明但可能尚未設置,在這種情況下,該行將成為其值中的第一行。
getini
(姓名)[來源]
從ini文件返回配置值。如果未通過先前parser.addini
調用(通常來自插件)注冊指定的名稱 ,則會引發ValueError。
,skip = False *)[source]
返回命令行選項值。
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 參數: |
-
name - 選項的名稱。您也可以指定文字
--OPT
選項而不是“dest”選項名稱。 - default - 如果不存在該名稱的選項,則為默認值。
-
skip - 如果選項不存在或具有None值,則為true raise pytest.skip。
|
getvalue
(name,*path = None *)[來源]
(不推薦使用,請使用getoption())
getvalueorskip
(name,*path = None *)[來源]
(不推薦使用,使用getoption(skip = True))
異常信息
class ExceptionInfo
(excinfo,striptext ='',*traceback = None *)[來源]
包裝sys.exc_info()對象并提供導航回溯的幫助。
*classmethod from_current
(exprinfo = None *)[來源]
返回與當前回溯匹配的ExceptionInfo
警告
實驗API
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 參數: | exprinfo - 一個文本字符串,幫助確定我們是否應該AssertionError
從輸出中剝離,默認為異常消息/__str__()
|
*classmethod *for_later
()[source]
返回一個未填充的ExceptionInfo
type
異常類
value
異常值
tb
異常原始追溯
typename
異常的類型名稱
traceback
追溯
exconly
(*tryshort = False *)[來源]
將異常作為字符串返回
當'tryshort'解析為True,異常是_pytest._code._AssertionError時,只返回異常表示的實際異常部分(因此'AssertionError:'從頭開始刪除)
errisinstance
(*exc *)[來源]
如果異常是exc的實例,則返回True
getrepr
(showlocals = False,style ='long',abspath = False,tbfilter = True,funcargs = False,truncate_locals = True,*chain = True *)[來源]
返回str()表示此異常信息。
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 參數: |
-
showlocals(bool) - 顯示每個回溯條目的本地人。忽略如果
style=="native"
。 - style(str) - long | short | no | native traceback style
- abspath(bool) - 如果路徑應更改為絕對路徑或保持不變。
-
tbfilter(bool) - 隱藏包含局部變量的條目
__tracebackhide__==True
。忽略如果style=="native"
。 - funcargs(bool) - 為每個回溯條目顯示固定裝置(用于傳統目的的“funcargs”)。
-
truncate_locals(bool) - 使用
showlocals==True
,確保本地可以安全地表示為字符串。 -
chain(bool) - 如果顯示Python 3中的鏈接異常。
|
在版本3.9中更改:添加了chain
參數。
match
(*regexp *)[來源]
將正則表達式'regexp'與異常的字符串表示形式匹配。如果匹配則返回True(這樣就可以寫'assert excinfo.match()')。如果不匹配則引發AssertionError。
FixtureDef
*class *FixtureDef
[source]
基地: object
工廠定義的容器。
FSCollector
*class *FSCollector
[source]
基地: _pytest.nodes.Collector
功能
class Function
[source]
基地:_pytest.python.FunctionMixin
,_pytest.nodes.Item
,_pytest.compat.FuncargnamesCompatAttr
功能項負責設置和執行Python測試功能。
originalname
=無
原始函數名稱,沒有任何裝飾(例如參數"[...]"
化為函數名稱添加后綴)。
3.0版中的新功能。
function
底層python'函數'對象
runtest
()[來源]
執行基礎測試功能。
setup
()[來源]
執行此測試功能的設置。
項目
class Item
[source]
基地: _pytest.nodes.Node
一個基本的測試調用項。請注意,對于單個函數,可能存在多個測試調用項。
user_properties
=無
user屬性是一個元組列表(名稱,值),用于保存此測試的用戶定義屬性。
add_report_section
(何時,關鍵,內容)[來源]
添加一個新的報表部分,類似于內部完成添加stdout和stderr捕獲的輸出:
item.add_report_section("call", "stdout", "report section contents")
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 參數: |
-
當(STR) -一個可能捕獲的狀態,
"setup"
,"call"
,"teardown"
。 -
key(str) - 部分名稱,可以隨意定制。Pytest使用
"stdout"
和"stderr"
內部。 -
content(str) - 作為字符串的完整內容。
|
MarkDecorator
*class MarkDecorator
(mark *)[source]
測試函數和測試類的裝飾器。應用時,它將創建MarkInfo
可以通過鉤子作為項目關鍵字檢索的對象 。MarkDecorator實例通常是這樣創建的:
mark1 = pytest.mark.NAME # simple MarkDecorator
mark2 = pytest.mark.NAME(name1=value) # parametrized MarkDecorator
然后可以作為裝飾器應用于測試功能:
@mark2
def test_function():
pass
調用MarkDecorator實例時,它會執行以下操作:
- 如果使用單個類作為其唯一的位置參數調用而沒有其他關鍵字參數,則它會將自身附加到類,以便自動應用于該類中的所有測試用例。
- 如果使用單個函數作為唯一的位置參數調用而沒有其他關鍵字參數,則會將MarkInfo對象附加到函數,其中包含已存儲在MarkDecorator內部的所有參數。
- 當在任何其他情況下調用時,它執行“假構造”調用,即它返回一個新的MarkDecorator實例,其原始MarkDecorator的內容使用傳遞給此調用的參數進行更新。
注意:上述規則阻止MarkDecorator對象僅存儲單個函數或類引用作為其位置參數,而不包含其他關鍵字或位置參數。
name
mark.name的別名
args
mark.args的別名
kwargs
mark.kwargs的別名
with_args
(** args,** kwargs *)[來源]
返回添加了額外參數的MarkDecorator
與調用不同,即使唯一參數是可調用/類,也可以使用它
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 返回: | MarkDecorator |
MarkGenerator
*class *MarkGenerator
[source]
MarkDecorator
對象的工廠- 作為pytest.mark
單例實例公開。例:
import pytest
@pytest.mark.slowtest
def test_function():
pass
將在MarkInfo
對象上設置一個“最慢” 的test_function
對象。
馬克
class Mark
(name:str,args,*kwargs *)[來源]
name
=無
商標名稱
args
=無
標記裝飾器的位置參數
kwargs
=無
標記裝飾器的關鍵字參數
combined_with
(其他)[來源]
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 參數: | 其他(馬克) - 與之結合的商標 |
| 返回類型: | 標記 |
通過附加aargs和合并映射來組合
Metafunc
class Metafunc
(definition,fixtureinfo,config,cls = None,module = None )[來源]
Metafunc對象被傳遞給pytest_generate_tests
鉤子。它們有助于檢查測試功能并根據測試配置或在定義測試功能的類或模塊中指定的值生成測試。
config
=無
訪問_pytest.config.Config
測試Session的對象
module
=無
定義測試函數的模塊對象。
function
=無
底層python測試功能
fixturenames
=無
測試功能所需的夾具名稱集
cls
=無
在或中定義測試函數的類對象None
。
parametrize
(argnames,argvalues,indirect = False,ids = None,*scope = None *)[來源]
使用給定argnames的argvalues列表向基礎測試函數添加新調用。在收集階段執行參數化。如果您需要設置昂貴的資源,請參閱設置間接,以便在測試設置時進行。
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 參數: |
- argnames - 以逗號分隔的字符串,表示一個或多個參數名稱,或參數字符串的列表/元組。
- argvalues - argvalues列表確定使用不同參數值調用測試的頻率。如果只指定了一個argname,則argvalues是值列表。如果指定了N個argnames,則argvalues必須是N元組的列表,其中每個tuple-element為其各自的argname指定一個值。
- indirect - argnames或boolean的列表。參數列表名稱(argnames的子集)。如果為True,則列表包含argnames中的所有名稱。對應于此列表中的argname的每個argvalue將作為request.param傳遞到其各自的argname fixture函數,以便它可以在測試的設置階段而不是在收集時執行更昂貴的設置。
- ids - 字符串ID列表或可調用的列表。如果字符串,則每個字符串對應于argvalues,以便它們是測試ID的一部分。如果將None作為特定測試的id給出,則將使用該參數的自動生成的id。如果是可調用的,它應該采用一個參數(單個argvalue)并返回一個字符串或返回None。如果為None,將使用該參數的自動生成的id。如果沒有提供id,它們將自動從argvalues生成。
-
范圍 - 如果指定,則表示參數的范圍。范圍用于按參數實例對測試進行分組。它還將覆蓋任何fixture函數定義的范圍,允許使用測試上下文或配置設置動態范圍。
|
模塊
*class *Module
[source]
基地:_pytest.nodes.File
,_pytest.python.PyCollector
測試類和函數的收集器。
collect
()[來源]
返回此集合節點的子項(項和收集器)列表。
節點
class Node
[source]
Collector的基類和測試集合樹的Item。收集器子類有子節點,Items是終端節點。
name
=無
父節點范圍內的唯一名稱
parent
=無
父收集器節點。
config
=無
pytest配置對象
session
=無
此節點所屬的Session
fspath
=無
收集此節點的文件系統路徑(可以是None)
keywords
=無
從所有范圍收集的關鍵字/標記
own_markers
=無
屬于此節點的標記對象
extra_keyword_matches
=無
允許添加額外的關鍵字以用于匹配
ihook
用于調用pytest鉤子的fspath敏感鉤子代理
warn
(警告)[來源]
發出此項目的警告。
除非明確禁止,否則將在測試Session后顯示警告
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 參數: | 警告(警告) - 要發出的警告實例。必須是PytestWarning的子類。 |
| 舉: | ValueError - 如果warning
實例不是PytestWarning的子類。 |
用法示例:
node.warn(PytestWarning("some message"))
nodeid
a :: - 表示其集合樹地址的分隔字符串。
listchain
()[來源]
從收集樹的根開始返回所有父收集器的列表。
add_marker
(marker,*append = True *)[來源]
動態地將標記對象添加到節點。
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 參數: | 標記(str
或pytest.mark.*
對象) - append=True
是否附加標記,如果False
插入位置0
。 |
iter_markers
(名稱=無)[來源]
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 參數: | name - 如果給定,則按name屬性過濾結果 |
迭代節點的所有標記
*for ... in iter_markers_with_node
(name = None *)[來源]
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 參數: | name - 如果給定,則按name屬性過濾結果 |
迭代節點的所有標記返回元組序列(節點,標記)
get_closest_marker
(名稱,默認=無)[來源]
返回與名稱匹配的第一個標記,從最近(例如函數)到更遠級別(例如模塊級別)。
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 參數: |
- 默認 - 找不到標記的回退返回值
-
name - 要過濾的名稱
|
listextrakeywords
()[來源]
在self和任何父母中返回一組所有額外的關鍵字。
addfinalizer
(*fin *)[來源]
在最終確定此節點時注冊要調用的函數。
只有在此節點在設置鏈中處于活動狀態時才能調用此方法,例如在self.setup()期間。
getparent
(*cls *)[來源]
獲取下一個父節點(包括ownelf),它是給定類的一個實例
解析器
class Parser
[source]
解析命令行參數和ini文件值。
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 變量: | extra_info - 泛型參數的字典 - >在處理命令行參數時出錯的情況下顯示的值。 |
getgroup
(name,description ='',*after = None *)[來源]
獲取(或創建)命名選項組。
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 名稱: | 選項組的名稱。 |
| 描述: | -help輸出的長描述。 |
| 后: | 其他組的名稱,用于排序-help輸出。 |
返回的組對象具有addoption
與簽名相同的方法,parser.addoption
但將在輸出中的相應組中顯示。pytest. --help
addoption
(** opts,** attrs *)[來源]
注冊命令行選項。
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 選擇采用: | 選項名稱,可以是短期或長期期權。 |
| ATTRS: | 相同的屬性,其中add_option()
所述的功能 argparse庫 接受。 |
在命令行解析選項在pytest配置對象上可用之后config.option.NAME
,NAME
通常通過傳遞dest
屬性來設置,例如 。addoption("--long", dest="NAME", ...)
parse_known_args
(args,*namespace = None *)[來源]
此時解析并返回具有已知參數的命名空間對象。
parse_known_and_unknown_args
(args,*namespace = None *)[來源]
解析并返回具有已知參數的名稱空間對象,此時其余參數未知。
addini
(name,help,type = None,*default = None *)[source]
注冊ini文件選項。
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 名稱: | ini-variable的名稱 |
| 類型: | 該變量的類型,可以是pathlist
,args
,linelist
或bool
。 |
| 默認: | 默認值,如果不存在ini-file選項但是被查詢。 |
可以通過調用來檢索ini變量的值 config.getini(name)
。
插件管理
class PluginManager
[source]
Core Pluginmanager類,用于管理插件對象的注冊和1:N鉤子調用。
您可以通過致電注冊新的掛鉤add_hookspec(module_or_class)
。您可以通過調用注冊插件對象(包含掛鉤) register(plugin)
。Pluginmanager初始化為在注冊的插件對象的dict名稱中搜索的前綴。
出于調試目的,您可以調用enable_tracing()
哪個隨后將調試信息發送到跟蹤幫助程序。
register
(插件,名稱=無)[來源]
如果名稱被阻止注冊,請注冊插件并返回其規范名稱或無。如果插件已注冊,則引發ValueError。
unregister
(plugin = None,*name = None *)[來源]
從內部數據結構取消注冊插件對象及其所有包含的鉤子實現。
set_blocked
(姓名)[來源]
阻止給定名稱的注冊,如果已經注冊,則注銷。
is_blocked
(姓名)[來源]
如果名稱博客注冊該名稱的插件,則返回True。
add_hookspecs
(*module_or_class *)[來源]
添加給定module_or_class中定義的新鉤子規范。如果相應地修飾了功能,則會識別它們。
get_plugins
()[來源]
返回已注冊的插件集。
is_registered
(插件)[來源]
如果插件已經注冊,則返回True。
get_canonical_name
(插件)[來源]
返回插件對象的規范名稱。請注意,插件可以使用由register(plugin,name)的調用者指定的其他名稱注冊。要獲取已注冊插件的名稱,請使用get_name(plugin)
。
get_plugin
(姓名)[來源]
返回給定名稱的插件或None。
has_plugin
(姓名)[來源]
如果注冊了具有給定名稱的插件,則返回True。
get_name
(插件)[來源]
注冊插件的返回名稱,如果未注冊,則返回None。
check_pending
()[來源]
驗證所有未針對鉤子規范驗證的鉤子是可選的,否則引發PluginValidationError
load_setuptools_entrypoints
(組,名稱=無)[來源]
從查詢指定的setuptools加載模塊group
。
<colgroup><col class="field-name" style="hyphens: manual;"><col class="field-body"></colgroup>
| 參數: |
list_plugin_distinfo
()[來源]
返回所有setuptools注冊插件的distinguishedfo / plugin元組列表。
list_name_plugin
()[來源]
返回名稱/插件對的列表。
get_hookcallers
(插件)[來源]
獲取指定插件的所有鉤子調用者。
add_hookcall_monitoring
(之前,之后)[來源]
在所有掛鉤的跟蹤功能之前/之后添加并返回一個撤銷功能,當被調用時,將刪除添加的跟蹤器。
before(hook_name, hook_impls, kwargs)
將在所有掛鉤調用之前調用并接收一個hookcaller實例,一個HookImpl實例列表和一個鉤子調用的關鍵字參數。
after(outcome, hook_name, hook_impls, kwargs)
接收相同的參數,before
但也接收一個`_Result``表示整個鉤子調用的結果的對象。
enable_tracing
()[來源]
啟用對鉤子調用的跟蹤并返回撤銷功能。
subset_hook_caller
(name,*remove_plugins *)[來源]
為命名方法返回一個新的_HookCaller實例,該方法管理除remove_plugins之外的所有已注冊插件的調用。
PytestPluginManager
*class *PytestPluginManager
[source]
基地: pluggy.manager.PluginManager
覆蓋pluggy.PluginManager
以添加特定于pytest的功能:
- 從命令行加載插件,加載插件中的
PYTEST_PLUGINS
env變量和pytest_plugins
全局變量; -
conftest.py
在啟動期間裝載;
addhooks
(*module_or_class *)[來源]
自2.8版以來已棄用。
請pluggy.PluginManager.add_hookspecs
改用。
parse_hookimpl_opts
(插件,名稱)[來源]
parse_hookspec_opts
(module_or_class,*name *)[來源]
register
(插件,名稱=無)[來源]
如果名稱被阻止注冊,請注冊插件并返回其規范名稱或無。如果插件已注冊,則引發ValueError。
getplugin
(姓名)[來源]
hasplugin
(姓名)[來源]
如果注冊了具有給定名稱的插件,則返回True。
pytest_configure
(*config *)[來源]
consider_preparse
(*args *)[來源]
consider_pluginarg
(*arg *)[來源]
consider_conftest
(*conftestmodule *)[來源]
consider_env
()[來源]
consider_module
(*mod *)[來源]
import_plugin
(modname,*consideration_entry_points = False *)[來源]
用插件導入插件modname
。如果consider_entry_points
為True,則還會將入口點名稱視為查找插件。
Session
*class *Session
[source]
基地: _pytest.nodes.FSCollector
異常Interrupted
基地: KeyboardInterrupt
發出中斷的測試運行信號。
異常Failed
基地: Exception
在測試運行失敗時發出停止信號。
*for ... in *collect
()[source]
返回此集合節點的子項(項和收集器)列表。
TestReport
class TestReport
[source]
基本測試報告對象(如果失敗,也用于設置和拆除調用)。
nodeid
=無
規范化的集合節點ID
location
=無
a(filesystempath,lineno,domaininfo)元組指示測試項的實際位置 - 它可能與收集的測試項不同,例如,如果方法是從不同的模塊繼承的。
keywords
=無
name - > value字典,包含與測試調用關聯的所有關鍵字和標記。
outcome
=無
測試結果,總是“通過”,“失敗”,“跳過”之一。
longrepr
=無
無或失敗表示。
when
=無
'setup','call','teardown'之一表示測試階段。
user_properties
=無
user屬性是一個元組列表(名稱,值),用于保存用戶定義的測試屬性
sections
=無
需要編組的額外信息對的列表。通過pytest用于添加從捕獲的文本和,但是可以通過其它的插件可用于任意信息添加到報表。(str, str)``stdout``stderr
duration
=無
只運行測試所花費的時間
classmethod from_item_and_call
(item,*call *)
使用標準項和調用信息創建和填充TestReport的工廠方法。
caplog
如果啟用了日志捕獲,則返回捕獲的日志行
版本3.5中的新功能。
capstderr
如果啟用了捕獲,則從stderr返回捕獲的文本
3.0版中的新功能。
capstdout
如果啟用了捕獲,則從stdout返回捕獲的文本
3.0版中的新功能。
count_towards_summary
試驗
如果此報告應計入測試Session結束時顯示的總計,則返回True:“1通過,1失敗等”。
注意
此功能被認為是實驗性的,因此請注意即使在修補程序版本中它也會發生變化。
head_line
試驗
返回此報告的longrepr輸出顯示的頭行,更常見的是在故障期間的回溯表示期間:
________ Test.foo ________
在上面的示例中,head_line是“Test.foo”。
注意
此功能被認為是實驗性的,因此請注意即使在修補程序版本中它也會發生變化。
longreprtext
只讀屬性,返回完整的字符串表示形式longrepr
。
3.0版中的新功能。
[_result ]
class _Result
(result,*excinfo *)
result
獲取此掛鉤調用的結果(DEPRECATED支持get_result()
)。
force_result
(結果)
強制結果result
。
如果掛鉤被標記為firstresult
單個值,則應設置否則設置(修改)結果列表。調用期間發現的任何異常都將被刪除。
get_result
()
獲取此掛鉤調用的結果。
如果鉤子被標記為firstresult
只有一個值,則返回結果列表。