pytest의 --collect-only 출력 개선
4244 단어 pythonopensourcepytest
pytest
는 특히 pytest-3.6.4 이상에서 볼 수 있는 조명기 섹션에서 몇 가지 문서 개선에 기여한 훌륭한 프로젝트입니다. 나는 pytest
에 기여하려고 시도했는데, 나는 몇 년 동안 행복한 사용자였기 때문에 이 프로젝트는 Python의 생태계에서 중요하고 Python 기반 프로젝트를 연습하고 싶습니다. 이제 더 많은 Kotlin 및 전문적으로 이동합니다.문제의 내용
그 메모에서, 나는 몇 주 전에
pytest
의 문제를 살펴보고 pytest
의 코드베이스에서 내 발을 적시기에 완벽한 문제를 발견했습니다. 문제#7701에서는 pytest
를 --collect-only
와 함께 사용하는 출력이 사용자에게 혼란을 주고 수집된 전체 그림을 얻으려면 테스트 실행 시작 부분까지 스크롤해야 한다고 언급했습니다.왜 이런 일이 발생합니까? 현재
--collect-only
, pytest
를 사용할 때 선택 해제된 테스트 수와 선택 해제하는 데 걸린 시간만 출력합니다. 예로서:# Taken from examples in #7701.
# pytest --collect-only
==== no tests ran in 1.66s ====
# pytest --collect-only -k filter
==== 544 deselected in 1.67s ====
이렇게 하면 발견된 테스트 수 및 수집된 테스트 수와 같은 몇 가지 중요한 정보가 누락됩니다. 게다가 문제를 복잡하게 하기 위해 출력은 테스트를 수집하지 않으면 "실행된 테스트 없음"이라고 표시되는데, 이는
--collect-only
테스트를 실행하지 않아야 하기 때문에 혼란스럽습니다.솔루션
출력을 덜 혼란스럽게 만들기 위해 기자는 다음과 같이 선택된 테스트의 수를 표시하는 출력이 있어야 한다고 제안합니다.
# Example from #7701.
# pytest --collect-only
==== 123 selected, no tests ran in 1.66s ====
# pytest --collect-only -k filter
==== 123 selected, 544 deselected in 1.67s ====
기자인 나와
pytest
의 관리자 중 한 명과 약간의 토론 끝에 다음과 같은 결론에 도달했습니다.no tests ran
를 제거해야 합니다. 우리는 다음과 같은 제안으로 끝을 맺었습니다.
=== 10/50 tests found (40 deselected) in 1.23s ===
=== 50 tests found in 1.23s ===
이렇게 하면 실행이 끝날 때 어떤 테스트가 수집, 선택 및 선택 해제되었는지에 대한 정확한 정보를 전달하여 이 정보를 매우 쉽게 읽을 수 있습니다. 또한
--collect-only
기능이 의미하는 압축되고 직관적인 버전입니다. 또한 이것은 -k
옵션을 사용하여 --collect-only
를 사용하는 동안 테스트를 필터링하는 경우에도 적용됩니다.만들어진 것
문제를 이해했기 때문에 코드베이스에서 이것이 변경이 필요한 부분과 기여하고 싶은 부분을 이해하고
--collect-only
의 출력을 개선하기 위해 변경하여 PR#7875을 열었습니다. 문서를 변경하고 새로운 동작과 일치하도록 테스트를 수정하는 것 외에도 src/_pytest/terminal.py
에 특정한 다음 논리를 추가하여 build_summary_stats_line
함수에서 --collect-only
를 변경했습니다. if self.config.getoption("collectonly"):
if self._numcollected == selected:
co_output = "%d %s found" % _make_plural(self._numcollected, "test")
else:
deselected = self._numcollected - selected
co_output = f"{selected}/{self._numcollected} tests found ({deselected} deselected)"
parts = [(co_output, {main_color: True})]
# Sticking with "0/0 tests found (0 deselected)" would be confusing.
if self._numcollected == 0:
parts = [("no tests found", {_color_for_type_default: True})]
# Sanity check for errors that might have ocurred. Otherwise, it
# will never let the user know that an error ocurred during
# collection.
if errors:
color = _color_for_type.get(key, _color_for_type_default)
markup = {color: True, "bold": color == main_color}
parts = [("%d %s" % _make_plural(errors, "error"), markup)]
아직 검토 중이고
pytest
에 PR이 많아서 병합될 때까지 시간이 조금 걸릴 수 있지만 프로젝트에 대한 좋은 기여라고 생각하고 흥미로운 도전이었습니다.pytest
또한 대부분 사전 예방적이며 가능한 한 쉽게 기여할 수 있도록 PR 및 문제를 안내하는 놀라운 코드 유지 관리자가 있습니다. 오픈 소스 생태계에서 초보자 기여에 대한 많은 걱정을 덜어줍니다.
Reference
이 문제에 관하여(pytest의 --collect-only 출력 개선), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/caramelomartins/improving-pytest-s-collect-only-output-2hh텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)