(1) unregister プラグインの登録を解除します。
プラグインの登録プロセスは分析されており、登録解除のプロセスは簡単です。ここで簡単に確認できます。ここでの主な目的は、2 つの辞書 _name2plugin と _plugin2hookcallers から対応するプラグインを削除することです。プラグインの登録を解除するには、ソース コードは次のとおりです。
def unregister(self, plugin=None, name=None):
""" unregister a plugin object and all its contained hook implementations
from internal data structures. """
if name is None:
assert plugin is not None, "one of name or plugin needs to be specified"
name = self.get_name(plugin)
if plugin is None:
plugin = self.get_plugin(name)
# if self._name2plugin[name] == None registration was blocked: ignore
if self._name2plugin.get(name):
del self._name2plugin[name]
for hookcaller in self._plugin2hookcallers.pop(plugin, []):
hookcaller._remove_plugin(plugin)
return plugin
(2) set_blocked はブロック状態を設定します
このブロック状態の設定により、Pluggy をより柔軟にすることができます。たとえば、ほとんどのシナリオではプラグインを登録する必要がありますが、特定のシナリオでは、特定のプラグインがそれをサポートしていません。このとき、ブロック状態はプラグインシステムがより柔軟に使用できるように、一時的に設定することができます
def set_blocked(self, name):
""" block registrations of the given name, unregister if already registered. """
self.unregister(name=name)
self._name2plugin[name] = None
(3) is_blocked はプラグインがブロックされているかどうかを決定します。
def is_blocked(self, name):
""" return ``True`` if the given plugin name is blocked. """
return name in self._name2plugin and self._name2plugin[name] is None
(4) is_registered はプラグインが登録されているかどうかを判断します
def is_registered(self, plugin):
""" Return ``True`` if the plugin is already registered. """
return plugin in self._plugin2hookcallers
(5) get_plugin はプラグイン名に基づいてプラグイン オブジェクトを取得します。
def get_plugin(self, name):
""" Return a plugin or ``None`` for the given name. """
return self._name2plugin.get(name)
(6) get_name は、プラグイン オブジェクトに基づいてプラグイン名を取得します。
def get_name(self, plugin):
""" Return name for registered plugin or ``None`` if not registered. """
for name, val in self._name2plugin.items():
if plugin == val:
return name
(7)load_setuptools_entrypoints は、setuptools を通じてプラグインを登録します。
この方法に注意することが重要です。これは非常に重要です。グループ名を指定すると、プラグインを自動的に登録できます。現在の環境の他のパッケージに setuptools を通じて定義されたこのグループ名を持つモジュールがある限り、プラグインを登録できます。有名な自動テストフレームワーク pytest では、この機能はプラグインを「pytest11」グループに自動的に登録するために使用されます。ユーザーは pytest11 モジュールをカスタマイズすることで pytest の機能を強化することができ、非常に便利です。 . pytestのソースコードを変更する必要はありません
def load_setuptools_entrypoints(self, group, name=None):
""" Load modules from querying the specified setuptools ``group``.
:param str group: entry point group to load plugins
:param str name: if given, loads only plugins with the given ``name``.
:rtype: int
:return: return the number of loaded plugins by this call.
"""
count = 0
for dist in importlib_metadata.distributions():
for ep in dist.entry_points:
if (
ep.group != group
or (name is not None and ep.name != name)
# already registered
or self.get_plugin(ep.name)
or self.is_blocked(ep.name)
):
continue
plugin = ep.load()
self.register(plugin, name=ep.name)
self._plugin_distinfo.append((plugin, DistFacade(dist)))
count += 1
return count
PluginManager クラスにも簡単なメソッドがいくつかありますが、ここでは一つ一つ分析しませんが、これで pluggy のソースコード分析は完了です。
自動テストに関連する推奨チュートリアル:
2023 年最新の自動テスト独習チュートリアルは、初心者向けに 26 日間で始められる最も詳細なチュートリアルで、現在、このチュートリアルを学習して大手企業に入社した人が 300 名を超えています。 ! _bilibili_ビリビリ
Python自動テスト開発フレームワークの2023年最新集【フルスタック/実践/チュートリアル】集エッセンス、学習後の年収40W+_bilibili_bilibili
テスト開発に関連する推奨チュートリアル
2023 年にネットワーク全体で最高の Byte テスト開発責任者が現場で指導し、ゼロから年収 100 万のテスト開発エンジニアになれるよう指導します_bilibili_bilibili
postman/jmeter/fiddler テスト ツールのチュートリアルの推奨事項
JMeter インターフェイス テスト/インターフェイス自動テスト プロジェクトに関する実践的なチュートリアルの最も詳細なコレクション。jmeter インターフェイス テストを学習するには、一連のチュートリアルで十分です。 ! _bilibili_ビリビリ
2023 年に Fiddler でパケットをキャプチャする方法を独学するには、インターネット上で最も詳細なビデオ チュートリアル [Fiddler で 1 日でパケットをキャプチャする方法を学ぶ方法] を必ずご覧ください。 ! _bilibili_ビリビリ
2023 年には、ネットワーク全体が表彰されます。ステーション B でのポストマン インターフェイス テストの最も詳細な実践的な指導は、novices_bilibili_bilibili で学ぶことができます。
要約:
光学理論は役に立ちません。学んだことを実際に適用するには、それに従って練習する必要があります。このとき、いくつかの実際の事例から学ぶことができます。
お役にたてましたら、いいね、保存していただけると作者の励みになります。次回から素早く検索することも容易になります。
理解できない場合は、下の小さなカードを参照してください。ブロガーは、同じ考えを持つテスターと一緒に学び、改善することも望んでいます。
適切な年齢で、適切なポジションを選択し、自分の長所を最大限に発揮するように努めてください。
私は計画と要約が好きなので、自動テスト開発への道は各段階の計画と切り離すことができません。
テスト開発ビデオチュートリアルと学習ノート収集ポータル! !