2017-12-21 4 views
5

콘솔 및 텍스트 파일에 로깅하기 위해 파이썬 logging module을 사용하고 있습니다. html 파일에 로그인하기 위해 HTMLTestRunner을 사용하고 있습니다. HTMLTestRunner를 사용하고있는 것 같아요.HTML 로거 (Python)

HTMLTestRunnerprint 문과 로깅 모듈은 인쇄 문을 인쇄하지 않습니다. 나는 html 파일 아래

내부 로깅 문을 얻을 수있는 방법이 htmlrunner 코드

runner = HTMLTestRunner.HTMLTestRunner(
       stream=outfile, 
       title='Test Report', 
       description='Regression Test Suite', 
       verbosity=3 
       ) 
result = runner.run(suite) 

이입니다 편집 : 나는 import unittest를 사용하고, 로깅을 위해 내가 import logging을 사용하고 있습니다. 사용중인 HTML 러너의 경우 import HTMLTestRunner

콘솔에 문을 인쇄 할 때 logging.infologging.debug을 사용하고 있습니다. 파이썬 print을 사용하여 print 문을 사용하면이 출력이 콘솔이나 로그에 표시되지 않습니다. 그러나 HTML 로깅의 경우 print 문과 stderr 문만 사용하고 있습니다.

내 쿼리 : HTMLTestRunner.HTMLTestRunnerlogging.debuglogging.info

+3

내가 도와하려고 싶지만, 난 몰라 계속할 충분한 정보를보십시오. 어떤 HTMLTestRunner를 사용하고 있습니까? https://pypi.python.org/pypi/HTMLTestRunner 또는 https://pypi.python.org/pypi/html-testRunner/ 또는 다른 것? 로거 명령문 예제,'HTMLTestRunner'에서보고 싶은 것, 그리고 실제로 보았던 것을 예제로 제시하십시오. –

+1

@JimDeLaHunt : 질문을 수정했습니다. 여전히 불분명 한 경우 알려 주시기 바랍니다. – Nitesh

+0

추가 세부 정보가 도움이됩니다. 그러나 실제 로깅과'print' 문과 함께 실제 테스트 케이스를 보여주십시오. 우리가 얻는 결과와 기대 한 결과를 보여주십시오. –

답변

5

현재 6 세이며, 유효 기간이 심각하다 사용하고있는 HTMLTestRunner 모듈을 사용하여 콘솔에 인쇄되어 문이있을 것이라는 점을 어떻게든지있다. 더 나은 옵션이 있습니다. html-testRunner 또는 pytestHTML reporting plugin이 활성화 된 더 나은 옵션이 있습니다.

: 당신이 패치를 준비하는 경우

그러나이 /를 HTMLTestRunner 구현을 변경, 우리가 (이 그것을 할 수있는 하나의 방법이다) 로깅 작업과 보고서에 표시되는 메시지를 만들기 위해해야 ​​할 일입니다
  • HTMLTestRunner 클래스 생성자에 새 logger 인수를 추가하고 로거에 새 핸들러를 첨부 :

    class HTMLTestRunner(Template_mixin): 
        def __init__(self, stream=sys.stdout, verbosity=1, title=None, description=None, logger=None): # CHANGE HERE 
         # ... 
    
         # CHANGE BELOW 
         self.log_capture = None 
         if logger: 
          self.log_capture = StringIO.StringIO() 
    
          ch = logging.StreamHandler(self.log_capture) 
          ch.setLevel(logging.DEBUG) 
    
          formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') 
          ch.setFormatter(formatter) 
    
          logger.addHandler(ch) 
    
  • 편집 HEADING_TMPL 템플릿 및 로깅 메시지에 대한 자리 표시자를 추가 S : 당신이있는 경우

    heading = self.HEADING_TMPL % dict(
        title = saxutils.escape(self.title), 
        parameters = ''.join(a_lines), 
        description = saxutils.escape(self.description), 
        logs='<br>'.join(self.log_capture.getvalue().split("\n")) if self.log_capture else "" 
    ) 
    
  • 는 예를 들어, 지금 import logging

을 잊지 마세요 :

HEADING_TMPL = """<div class='heading'> 
<h1>%(title)s</h1> 
%(parameters)s 
<p class='description'>%(description)s</p> 
Logging output: 
<p class='logs'>%(logs)s</p> 
</div> 
""" # variables: (title, parameters, description) 
  • 변경 _generate_heading() 방법과 logs 자리를 작성 , 테스트에서 로그 메시지를 작성하는 logger 인스턴스를 사용하는 이런 종류의 테스트에서는 로거를로 전달할 수 있습니다 테스트를 실행 한 후 report.html

    import logging 
    import unittest 
    
    import HTMLTestRunner 
    
    logger = logging.getLogger() 
    logger.setLevel(logging.DEBUG) 
    
    
    class BasicTestCase(unittest.TestCase): 
        def test_one(self): 
         logger.info('Test message 1!') 
         self.assertEqual(1, 1) 
    
        def test_two(self): 
         """Extended description""" 
         logger.error('Test message 1!') 
         self.assertEqual(2, 2) 
    
    
    if __name__ == '__main__': 
        import sys 
        logging.basicConfig(stream=sys.stderr) 
    
        with open('report.html', 'w') as report_file: 
         runner = HTMLTestRunner.HTMLTestRunner(
          stream=report_file, 
          title='Test Report', 
          description='Regression Test Suite', 
          verbosity=3, 
          logger=logger 
         ) 
    
         suite = unittest.TestLoader().loadTestsFromTestCase(BasicTestCase) 
    
         result = runner.run(suite) 
         print(result) 
    

    내용 : 다음 보고서에 로그 메시지를 덤프 것은

    enter image description here

  • +0

    나는 당신의 솔루션을 시험해 보았습니다. 그러나 모든 로깅 정보 출력이 테이블 외부로 인쇄되고 있습니다. 귀하의 경우와 마찬가지로, 2 가지 테스트 케이스가 있지만 로깅 정보는 테이블 상단에 인쇄됩니다. 테이블에있는 각 테스트 케이스의 logging.info를 가져올 수 있습니까? 예 : basicTestCase의 세부 정보를 클릭하면 testcase1과 관련된 로깅 정보가 testcase1 세부 정보로 표시됩니다. 테스트 케이스 -2와 동일합니다. 그것은 가능합니까 – Nitesh

    +0

    @ Nitesh 예, 샘플 목적을 위해 머리글에 넣어. 테이블 행에 로그를 저장하려면 먼저 [REPORT_CLASS_TMPL 템플릿] (https://github.com/tungwaiyip/HTMLTestRunner/blob/master/HTMLTestRunner.py#L462)을 수정하여 로그에 기록 할 수 있도록해야합니다. 테이블 행 - 로그를위한 자리 표시자가 필요합니다. 그런 다음 자리 표시 자 [여기] (https://github.com/tungwaiyip/HTMLTestRunner/blob/master/HTMLTestRunner.py#L740)를 작성해야합니다. 좋아,하지만 그건 준비 단계 일 뿐이야. – alecxe

    +0

    @ Nitesh 그런 다음 테스트 방법별로 로깅 메시지를 그룹화하는 방법을 찾아야합니다. 로그 메시지 문자열을 구성하여 테스트 메소드 이름을 포함 할 수 있습니다. [this thread] (https://stackoverflow.com/q/10973362/771848)를 확인하십시오. 그런 다음,'self.log_capture.getvalue(). split ("\ n")'의 결과가 구문 분석되고 테스트 방법별로 그룹화되어야합니다.네가 내 생각을 이해할 수 있기를 바랍니다. 아이디어를 구현하는 데 도움이 필요하면 새 주제를 시작하는 것이 좋습니다. 다시 말해서,보다 현대적인 기자로 전환하는 것이 더 쉬울 것이라고 말했다. 감사. – alecxe