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