pytest原始碼1 pluggy簡介

2021-10-04 23:37:19 字數 1772 閱讀 9652

個人拙見,有錯請各位指出。

原始碼這個東西怎麼入手還是挺講究的,我打算從pytest的核心框架python pluggy出發,首先介紹下pluggy。

解讀過程主要按**邏輯走,不會按照原始碼分布去解讀,望理解。

如果的我的文章對您有幫助,不符動動您的金手指給個star,予人玫瑰,手有餘香,不勝感激。

github

官方是這麼介紹pluggy的

"this is the core framework used by thepytest,tox, anddevpiprojects."

「這是pytesttoxdevpi專案使用的核心框架。」

很顯然,這就是我們讀pytest原始碼要從它開始的原因。

pluggy一開始是作為pytest原始碼的一部分存在的,在後期被分離出來了,作為乙個外部的依賴來使用。

# -*- coding:utf-8 -*-

from pluggy import pluginmanager, hookspecmarker, hookimplmarker

hookspec = hookspecmarker(

"mypluggydemo_1"

)#乙個宣告hook method的類,每個hook method都需要用@hookspec來裝飾

hookimpl = hookimplmarker(

"mypluggydemo_1"

)#乙個plugin的實現,需要完整實現對應的hook方法,並通過@hookimpl來裝飾

class

hookspec

: @hookspec

defcalculate

(self, a, b)

:pass

class

hookimpl1

: @hookimpl

defcalculate

(self, a, b)

:return a + b

pm = pluginmanager(

"mypluggydemo_1"

)#建立pluginmanager物件

pm.add_hookspecs(hookspec)

pm.register(hookimpl1())

results = pm.hook.calculate(a=

1, b=5)

print

(results)

[6]
整個專案中需要保證乙個全域性唯一的project name(具體原因放到後面再講),此demo為mypluggydemo_1

hookspec是乙個宣告hook method的類,每乙個hook method需要用hookspec裝飾器裝飾

hookimpl1是乙個plugin的實現,需要完整實現對應的hook方法,並通過hookimpl裝飾器裝飾實現方法

**的核心邏輯是先建立乙個外掛程式管理物件pluginmanager,並在該物件上註冊hook物件hookspec和與之對應的plugin物件hookimpl1,然後通過pluginmanager自帶的hook屬性來呼叫對應的hook方法,傳入相關引數。

注意:呼叫hook方法時引數需以關鍵字的形式傳遞。

pytest原始碼 pytest原始碼目錄概要分析

pytest是什麼?pytest是乙個非常成熟的全功能的python測試框架。怎麼安裝?pip install pytest github專案位址在哪?pytest原始碼結構 在python安裝目錄的lib site packges下,分為pytest.py 和 pytest目錄 我們先看下pyte...

hadoop原始碼閱讀 1 原始碼目錄結構

由於版本的不同,可能部分目錄有些不同.bin 此目錄下為進行hadoop配置 執行以及管理的shell命令集合 c 此目錄下為linux下amd64 64位系統以及i386 32位系統提供的庫檔案集合 conf 此目錄下為執行與配置hadoop環境需要的配置檔案以及示例檔案集合,實際執行時可以對照此...

extend 的實現原始碼 (原始碼學習1)

目標 extend console.log add 1,2 是怎麼實現可以將add函式掛在jquery後面?jquery v1.12.4 1 jquery.extend jquery.fn.extend function 4 i 1,5 length arguments.length,6 deep ...