동안 호출하는 바인딩 된 메서드의 목록을하는 객체를 감안할 때. 이제 우리가 가지고있는 테스트 스크립트를 실행함으로써 얼마나 많은 api가 테스트되는지 (기본적으로, 호출되는지) 커버리지 리포트를 원합니다.어떻게 문제는이 시나리오에서 오는 런타임
이미 모든 API를 파이썬 메소드로 만드는 잘 정의 된 클라이언트 관리자가 있습니다. 예를 들어 api GET /user
을 가지고 있다고 가정하면 서버에 실제 요청을 보내는 get_user
메서드가 있습니다.
파이썬 커버리지 (실제로는 pytest-cov이지만 똑같은 것)를 사용하면 코드 커버리지에 대한 보고서를 얻을 수 있으며,이를 기반으로 몇 개의 api가 호출되는지에 대한 개념을 갖게 될 것입니다 . 그러나 정확하고 명확하지 않습니다.
그래서 중요한 질문은 런타임 중에 호출되는 바인딩 된 메서드의 목록을 가져 오는 방법이 있는지입니다.
나는이 질문을 설명하기 위해 예제를 제시하고자한다. 두 테스트를 실행 한 후
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
)를 호출하는 특정 케이스에서 내 질문을 해결했습니다. 나는 메서드에서 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' 모듈을 더 깊이 파고 있습니다. –