摘要:會調用向打印一些環境信息,比如插件版本,版本,操作平臺這些等。在執行之后調用執行的過程是否執行取決于是否需要創建執行的過程如果有。所有測試執行完畢之后,返回之前的階段。結束以后,整個退出之前的階段。
pytest插件開發需要熟悉一些常用的hook函數,官方對于這些hook有一份簡略的文檔(目前除了小部分hook目前缺乏文檔外,見這個issue),但是各個hook的調用邏輯沒有一個直觀的flowchart(這個也有人提了issue)
根據pytest core developer-Bruno Oliveira的提示,通過使用向pytest傳遞--debug選項然后運行測試,我們就可以在當前目錄得到一個類似如下內容的pytestdebug.log:
versions pytest-4.3.0, py-1.8.0, python-3.6.4.final.0
cwd=E:Devdebug_pytest
args=["tests est_setup.py", "--debug"]pytest_cmdline_main [hook]
? config: <_pytest.config.Config object at 0x000002119BA91080>
pytest_plugin_registered [hook]
? plugin:
? manager: <_pytest.config.PytestPluginManager object at 0x000002119B22BD30>
finish pytest_plugin_registered --> [][hook]
pytest_configure [hook]
? config: <_pytest.config.Config object at 0x000002119BA91080>
? pytest_plugin_registered [hook]...
經過多次反復測試分析debug文件,整理出了一個xmind的思維導圖:
鏈接: https://pan.baidu.com/s/1owWI... 提取碼: 69ks
另附pytest的個人總結xmind圖:
鏈接: https://pan.baidu.com/s/18l6J... 提取碼: uwnd
結合導圖再梳理一下(建議配合網盤里的xmind圖看),大體整個測試分成如下6個階段:
pytest_configure
插件和conftest.py文件配置初始化等,創建session。
pytest_sessionstart
創建session完以后,執行collection之前的階段。會調用pytest_report_header向terminal打印一些環境信息,比如插件版本,python版本,操作平臺這些等。
pytest_collection
測試用例收集以及生成測試輸入的過程,這里還可能包括根據keywords和marker篩選測試用例的過程。這個過程會涉及多次generate item的調用,主要關注如下調用:
pytest_generate_tests(metafunc): 生成測試項;
pytest_make_parametrize_id(config, val, argname):根據@pytest.mark.parametrize生成對應值;
pytest_collection_modifyitems(session, config, items):所有測試項收集完畢以后調用,一般用來進行重新排序和二次過濾。
pytest_deselected(items): 有測試項被關鍵字或者marker過濾掉的時候會被調用
注意: 通過::語法篩選測試用例的步驟是在之前生成測試用例階段完成的,并不是在deselected里面做的
pytest_runtestloop
執行篩選過的測試用例, 在pytest_runtest_protocol里面完成包括setup, call, teardown和log打印的過程。主要關注如下調用:
pytest_runtest_logstart(nodeid, location):開始執行一個新測試項的時候調用.
注:官方文檔的意思表述的有點模糊,并不是setup/call/teardown階段分別調用一次,就是函數命令一直的意思測試開始前打印一次
pytest_runtest_logfinish(nodeid, location): 結束執行一個測試項的時候調用.
注:同上
pytest_runtest_setup(item): 在pytest_runtest_call執行之前調用.
pytest_runtest_call(item): 執行實際的測試過程。
pytest_runtest_teardow(item, nextitem): 在pytest_runtest_call執行之后調用
pytest_fixture_setup(fixturedef, request):執行fixture的setup過程(是否執行取決于fixture是否需要創建).
pytest_fixture_post_finalizer(fixturedef, request): 執行fixture的teardown過程(如果有)。
pytest_runtest_makereport(item, call): 返回給定item和call對應的 _pytest.runner.TestReport 對象, 這里的call object我們一般不太接觸,_pytest/runner.py里面有具體的用法可以參考。
pytest_runtest_logreport(report): 在測試的setup/call/teardown階段report更新之后分別被調用到,可以用when屬性來區分不同階段。
pytest_report_teststatus(report, config): 返回各個測試階段的result, 可以用when屬性來區分不同階段。
pytest_sessionfinish
所有測試執行完畢之后,返回exit status之前的階段。會調用pytest_terminal_summary向terminal打印一些summary信息,比如pass, fail, error數量之類的總結信息。
pytest_unconfigure
session結束以后,整個process退出之前的階段。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/43437.html
摘要:所有的函數都使用的命名規則,以便于查找并且同其他函數區分開來。用來每個,保證被正確的定義。里還有一個選項,用來表示這個函數是個函數。自動注冊插件除了常規的方法注冊插件,同時提供了方法,允許通過自動注冊插件。 前言 參考官方的這篇文章,我嘗試翻譯其中一些重點部分,并且拓展了相關的pluggy部分的知識。由于pytest是在pluggy基礎上構建的,強烈建議先閱讀一下pluggy的官方文檔...
摘要:本套代碼和邏輯是本人的勞動成果,如果有轉載需要標注,非常適合公司做項目的同學小白也可以學哦接口自動化項目目錄公共方法的封裝如果不用配置文件可以使用這個方法進行封裝但是有一定的缺陷可以不使用字典。這是在正常的命令行解析之前發生的。 ...
摘要:其中用到編程等,還需要花更多的精力去深入學習,當每項技能都能掌握到一定深度,才能稱為一個完整的知識體系。 都有哪些種類的配置文件 pytest.ini:pytes...
摘要:問題大部分問題是因為安裝了導致的比如此時需要先卸載然后再安裝包已經安裝過的不用重復安裝。版本問題類似于這種一般是因為版本太高導致建議卸載現有版本并安裝較低版本的。后續重裝低版本出現如下報錯重裝最新版本并重裝包 ...
摘要:在內運行集成測試很長時間以來都是一個難題。為了復用已有的框架,我們需要打包一個自帶配置的文件,以便可以在現有的框架中運行集成測試。 今天,我打算給 Jenkins 管理員和開發者們介紹一個新的工具 Custom WAR Packager。該工具可以打包 Jenkins 的自定義 WAR 發行版、 Docker 鏡像以及 Jenkinsfile Runner 包。它可以打包 Jenkin...
閱讀 1671·2021-09-26 10:00
閱讀 2934·2021-09-06 15:00
閱讀 3537·2021-09-04 16:40
閱讀 2297·2019-08-30 15:44
閱讀 714·2019-08-30 10:59
閱讀 1882·2019-08-29 18:34
閱讀 3615·2019-08-29 15:42
閱讀 2292·2019-08-29 15:36