成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

pytest插件探索——hook workflow

pubdreamcc / 2581人閱讀

摘要:會(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

相關(guān)文章

  • pytest插件探索——hook開(kāi)發(fā)

    摘要:所有的函數(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的官方文檔...

    shiguibiao 評(píng)論0 收藏0
  • 2021-09-03-接口自動(dòng)化-python+requests+pytest+csv+yaml+a

    摘要:本套代碼和邏輯是本人的勞動(dòng)成果,如果有轉(zhuǎn)載需要標(biāo)注,非常適合公司做項(xiàng)目的同學(xué)小白也可以學(xué)哦接口自動(dòng)化項(xiàng)目目錄公共方法的封裝如果不用配置文件可以使用這個(gè)方法進(jìn)行封裝但是有一定的缺陷可以不使用字典。這是在正常的命令行解析之前發(fā)生的。 ...

    李昌杰 評(píng)論0 收藏0
  • 帶你深入理解自動(dòng)化測(cè)試框架Pytest的配置文件!

    摘要:其中用到編程等,還需要花更多的精力去深入學(xué)習(xí),當(dāng)每項(xiàng)技能都能掌握到一定深度,才能稱為一個(gè)完整的知識(shí)體系。 都有哪些種類的配置文件 pytest.ini:pytes...

    wayneli 評(píng)論0 收藏0
  • Pytest+Allure使用問(wèn)題記錄

    摘要:?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ò)重裝最新版本并重裝包 ...

    番茄西紅柿 評(píng)論0 收藏2637
  • 這樣來(lái)輕松自定義 Jenkins 發(fā)行版!

    摘要:在內(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...

    RichardXG 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<