2016-06-22 1 views
2

동안 호출하는 바인딩 된 메서드의 목록을하는 객체를 감안할 때. 이제 우리가 가지고있는 테스트 스크립트를 실행함으로써 얼마나 많은 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_userpost_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() 

답변

0

나도 몰라,하지만 당신은 확실히 파일을 직접 처리하여이 정보를 얻을 수 있습니다

은 내가 궁극적으로 달성하고자하는 것입니다.

AST 모듈을 살펴보십시오. 그것은 당신이 범위에 의해보고 된 모든 파일을 구문 분석하고 각 기능에 대한 라인의 범위를 생성 할 수 있습니다. 거기에서 어떤 라인을 실행했는지 확인해야합니다.

하지만 범위가 비슷할 필요가 있기 때문에 대신 지역 기능을보고하도록 적용 범위를 수정하는 것이 더 쉽습니다.

0

Coverage.py에는이 기능이 없습니다. trace 모듈을 사용해야하거나 메서드 이름을 얻기 위해 범위 결과를 후 처리해야합니다.

+0

동의합니다. 나는'trace'와'inspect' 모듈을 더 깊이 파고 있습니다. –

관련 문제