中に呼び出されバウンドメソッドのリストを取得するにはどのようにオブジェクトを、与えられました。 これで、私たちが持っているテストスクリプトを実行することによって、いくつのapiがテストされているか(基本的には呼ばれているか)に関するカバレッジレポートを作成したいと考えています。質問は、このシナリオから来て、ランタイム
我々はすでにPythonの方法として、すべてのAPIを作る明確に定義されたクライアントマネージャを、持っています。 たとえば、api GET /user
があるとしたら、get_user
という方法でサーバーに実際のリクエストを送信します。
Pythonカバレッジ(実際にはpytest-covですが、これは同じことです)を使用してコードカバレッジのレポートを作成し、それに基づいてapiの数。しかし、それは正確ではなく、十分にはっきりしていません。
だから重要な問題は、実行時に呼ばれている束縛メソッドのリストを取得する方法があり、あります。
質問の例を示したいと思います。 2つのテストを実行した後
class Client(object):
def __init__(self):
pass
def get_user(self, user):
pass
def post_user(self, user):
pass
def delete_user(self, user):
pass
def test_get_user():
Client().get_user("user")
def test_post_user():
Client().post_user("user")
、どのように私はget_user
とpost_user
が呼び出されたとdelete_user
は、前回の実行中に呼び出されていなかったというレポートを取得することができます。 coverage.pyで実行中のテストは、多分私はそこから必要なものを分析することができ、実行されている私たちの行番号とファイルに関する十分な情報が得られますので、
一つの可能な解決策は、あります。
別の可能な解決策は、私が定義されClient
に呼び出されるメソッドを追跡することです。実際には、すべてのapisメソッドが私の場合は普通のメソッド、call_api
を呼び出す私の特定のケースで私の質問を解決しました。私は方法call_api
でinspect
を使用しています。get_user
が常にcall_api
の呼び出し元であると言うので、メソッド名を取得できます。ただし、このソリューションはこの特殊なケースでのみ機能し、一般的な解決策ではありません。
私もモジュールtrace
を見ましたが、私が望むものに近いと思われますが、残念ながらtracer(Trace instance)
を使用してコマンドまたは機能を実行する必要があります。私は最終的に達成したい何
は次のとおりです。
tracer = Trace(obj_to_trace)
tracer.start_trace()
# using obj_to_trace
tracer.end_trace()
tracer.get_called_methods()
私は 'trace'と' inspect'モジュールについて深く掘り下げています。 –