복붙노트

[PYTHON] 어떻게 print () 문을 behave (BDD)에서 볼 수 있습니까?

PYTHON

어떻게 print () 문을 behave (BDD)에서 볼 수 있습니까?

컨텍스트 : Python with Behave (BDD)를 사용하고 있습니다.

커맨드 라인 (테스트)이나 커스텀 main ()에서 테스트를 실행하든 테스트는 실행되고 콘솔에서 볼 수있는 유일한 출력은 표준 BDD 보고서입니다.

내 테스트에는 내 코드를 디버그하는 데 도움이되는 print () 문이 포함됩니다. 그러나, 나는 행동을 실행할 때 이러한 출력 문을 콘솔 출력에 표시하지 않습니다.

우리의 코드에 print 문을 "표시"할 수있는 방법이 있습니까?

내 주요()

config = Configuration()
if not config.format:
    default_format = config.defaults["default_format"]
    config.format = [ default_format ]
    config.verbose = True
r = runner.Runner(config)
r.run()

if config.show_snippets and r.undefined_steps:
    print_undefined_step_snippets(r.undefined_steps)

내 test.feature 파일 :

Feature: My test feature with the Behave BDD
    Scenario: A simple test
    Given you are happy
    When someone says hi
    Then you smile

내 test_steps.py 파일 :

from behave import given, when, then, step, model

@given('you are happy')
def step_impl(context):
    pass

@when ('someone says {s}')
def step_impl(context, s):
    context.message = s
    print("THIS IS NEVER DISPLAYED IN THE CONSOLE")
    pass

@then ('you smile')
def step_impl(context):
        assert(context.message == "hi")

해결법

  1. ==============================

    1.명령 줄에서 다음을 사용할 수 있습니다.

    명령 줄에서 다음을 사용할 수 있습니다.

    - 표준 출력이 즉시 인쇄되도록 캡처하지 않습니다.

    --no-capture-stderr 즉시 stderr 출력을 인쇄하십시오.

  2. ==============================

    2.나는 문서를 읽는 데 더 많은 시간을 보낸 후에 그것을 알아 냈다. 사실 아주 간단합니다. 기본적으로 테스트에 실패하지 않는 한 behave는 출력을 표시하지 않습니다 (즉, print () 사용). 테스트 결과에 관계없이 모든 출력을 강제로 표시하려면 (통과 / 실패) 기본 설정 중 일부만 변경하면됩니다. 이를 달성하는 가장 쉬운 방법은 프로젝트 디렉토리의 루트에 behave.ini라는 파일을 만들고 다음을 넣는 것입니다.

    나는 문서를 읽는 데 더 많은 시간을 보낸 후에 그것을 알아 냈다. 사실 아주 간단합니다. 기본적으로 테스트에 실패하지 않는 한 behave는 출력을 표시하지 않습니다 (즉, print () 사용). 테스트 결과에 관계없이 모든 출력을 강제로 표시하려면 (통과 / 실패) 기본 설정 중 일부만 변경하면됩니다. 이를 달성하는 가장 쉬운 방법은 프로젝트 디렉토리의 루트에 behave.ini라는 파일을 만들고 다음을 넣는 것입니다.

    파일 이름 : behave.ini

    [behave]
    stderr_capture=False
    stdout_capture=False
    

    다음 번에 동작 테스트를 실행하면 테스트가 통과했는지 실패했는지 여부에 관계없이 디버그 명령문의 모든 출력을 볼 수 있습니다.

  3. ==============================

    3.가장 먼저해야 할 일은 Xuan이나 Ben이 설명한 stdout (그리고 stderr) 캡처를 막는 것입니다.

    가장 먼저해야 할 일은 Xuan이나 Ben이 설명한 stdout (그리고 stderr) 캡처를 막는 것입니다.

    그러나, 그것을 모르는 사람들을 더럽힐 수있는 추가 합병증이 있습니다. 기본적으로 동작은 보고서를 색상으로 출력합니다. 이는 단계가 실행될 때 단계가 통과했는지 여부를 아직 알 수없는 중립적 인 색으로 단계의 행을 먼저 인쇄한다는 점에서 문제가됩니다. 단계가 완료되면 이스케이프 코드를 사용하여 이전 행을 새 색상으로 겹쳐 씁니다. 이 문제를 해결하기 위해 무언가를하지 않는다면, 행동은 단순히 print 서술문이 작성한 것을 덮어 씌울 수 있으며, 어떤 일이 발생했는지 파악하기 어려울 수 있습니다.

    다음 그림에서 나는 줄 끝에 괄호 안에 색을 넣을 것이다. 인쇄물을 사용하지 않으면 실행하기 전에 "무언가"단계가 다음과 같이 나타납니다.

    When do something [gray]
    

    그리고 한 번 실행하면 녹색 선으로 바뀝니다.

    When do something [green]
    

    behave는 터미널이 올라가서 새 색상으로 줄을 덮어 쓰게하는 이스케이프 시퀀스를 출력합니다. 문제 없습니다.

    단계에서 print "foo"를 입력하면 단계가 완료되기 직전에 터미널에 다음 내용이 포함됩니다.

    When do something [gray]
    foo
    

    그리고 나서 단계가 성공적으로 완료되면 터미널에 표시됩니다.

    When do something [gray]
    When do something [green]
    

    동일한 이스케이프 시퀀스로 인해 behave가 print 문에서 생성 된 출력을 덮어 씁니다.

    나는 stdout 캡처를 끄는 것 외에도이 문제를 해결하는 두 가지 방법을 사용했다.

  4. ==============================

    4.behave.ini는 나를 위해 작동하지 않습니다. 나는 선택한다.

    behave.ini는 나를 위해 작동하지 않습니다. 나는 선택한다.

  5. from https://stackoverflow.com/questions/25150404/how-can-i-see-print-statements-in-behave-bdd by cc-by-sa and MIT license