코 커버리지 출력을 패키지가 아닌 디렉토리로 제한 할 수 있습니까?
-
21-08-2019 - |
문제
내 sut은 다음과 같습니다.
foo.py
bar.py
tests/__init__.py [empty]
tests/foo_tests.py
tests/bar_tests.py
tests/integration/__init__.py [empty]
tests/integration/foo_tests.py
tests/integration/bar_tests.py
내가 달릴 때 nosetests --with-coverage
, 나는 오히려 무시할 모든 종류의 모듈에 대한 세부 정보를 얻습니다. 그러나 나는 그것을 사용할 수 없다--cover-package=PACKAGE
옵션 때문에 foo.py
& bar.py
패키지에 없습니다. (후에 실을 참조하십시오http://lists.idyll.org/pipermail/testing-in-python/2008-november/001091.html패키지에 넣지 않은 이유 때문에.)
커버리지 출력을 Foo.py & Bar.py로 제한 할 수 있습니까?
업데이트 -보다 더 나은 대답이 없다고 가정합니다 나디아아래에서 후속 질문을했습니다. "디렉토리의 모든 일치하는 파일 이름을 명령 줄 옵션으로 변환하기 위해 일부 (bash) 쉘 스크립트를 어떻게 작성합니까?"
해결책
다음과 같이 사용할 수 있습니다.
--cover-package=foo --cover-package=bar
코 소스 코드를 간단히 살펴 보았습니다. 이것은 라인입니다
if options.cover_packages:
for pkgs in [tolist(x) for x in options.cover_packages]:
다른 팁
당신이 사용할 수있는:
--cover-package=.
또는 환경 변수를 설정합니다
NOSE_COVER_PACKAGE=.
코로 테스트 1.1.2
최상위 파이썬 파일/패키지가 많이 있으며-포커 패키지를 사용하여 수동으로 나열하는 것이 성가신 것을 발견하므로 두 가지 별칭을 만들었습니다. 별명 nosetests_cover
-커버 패키지에 나열된 모든 최상위 파이썬 파일/패키지로 커버리지를 실행합니다. 별명 nosetests_cover_sort
동일한 작업을 수행하고 결과를 커버리지 백분율로 추가로 정렬합니다.
nosetests_cover_cmd="nosetests --with-coverage --cover-erase --cover-inclusive --cover-package=\$( ls | sed -r 's/[.]py$//' | fgrep -v '.' | paste -s -d ',' )"
alias nosetests_cover=$nosetests_cover_cmd
alias nosetests_cover_sort="$nosetests_cover_cmd 2>&1 | fgrep '%' | sort -nr -k 4"
메모:
- 이것은 내 .bashrc 파일에서 나온 것입니다. bash를 사용하지 않으면 적절하게 수정하십시오.
- 이들은 최상위 디렉토리에서 실행해야합니다. 그렇지 않으면 패키지 이름이 부정확하고 커버리지가 조용히 처리하지 못합니다 (즉,-포장 패키지가 잘못되었다고 말하는 대신 옵션을 전혀 제공하지 않은 것처럼 작동합니다).
- 현재 Ubuntu 13.10에서 Python 2.7.6, Nose 버전 1.3.0 및 커버리지 버전 3.7.1을 사용하고 있습니다. 이것은 내가이 명령을 테스트 한 유일한 설정입니다.
- 사용량에서, 필요에 맞지 않으면 -Cover-Erase 및 -Cover-inclusive를 제거하십시오.
- 반전 대신 정상 순서로 정렬하려면 교체하십시오.
-nr
~와 함께-n
정렬 명령에서. - 이 명령은 모든 최상위 파이썬 파일/패키지가 도트없이 명명되었다고 가정합니다 ( ".py"). 이것이 사실이 아닌 경우 아래 세부 정보 섹션을 읽고 명령 부분을 이해하고 명령을 적절하게 수정하십시오.
세부:
나는 이것들이 내가 원하는 결과를 달성하기위한 가장 효율적인 명령이라고 주장하지 않습니다. 그들은 내가 생각해 낸 명령 일뿐입니다. = p
설명해야 할 중요한 것은-포장 패키지에 대한 논쟁 일 것입니다. 다음과 같이 쉼표로 구분 된 최상위 파이썬 파일/패키지 이름 ( ".py"에서 벗어난) 목록을 작성합니다.
\$
- 탈출합니다$
이중 인용 문자열의 문자.$( )
- 내부에 포함 된 명령의 결과를 삽입합니다.ls
-현재 디렉토리에 모든 이름을 나열합니다 (최상위 파이썬 디렉토리 여야 함).| sed -r 's/[.]py$//'
- 목록에서 "foo_bar.py"를 "foo_bar"로 대체하십시오.| fgrep -v '.'
- 목록에서 점이없는 모든 이름을 제거합니다 (예 : foo_bar.pyc 및 notes.txt를 제거).| paste -s -d ','
-Newline-Separated에서 Comma-Separated로 목록을 변경합니다.
또한 분류를 설명해야합니다.
2>&1
- Stderr와 Stdout에 합류합니다.| fgrep '%'
- a없이 모든 출력 라인을 제거합니다%
캐릭터.| sort -nr -k 4
- 나머지 선을 4 번째 열 (커버리지 백분율의 열)별로 리버스 숫자 순서로 정렬합니다. 역 차수 대신 정상 순서를 원한다면 교체하십시오.-nr
~와 함께-n
.
이것이 누군가를 돕기를 바랍니다! =))
사용하는 경우 적용 범위 : PY 3.0, 그런 다음 표준 라이브러리 및 설치된 모든 패키지를 포함하여 기본적으로 Python 디렉토리의 코드가 무시됩니다.
나는 이것을 할 것이다 :
nosetests --with-coverage --cover-package=foo,bar tests/*
나는 제안 된 다른 사람들 에게이 해결책을 선호한다. 간단하지만 어떤 패키지를 보장하고 싶은지 명백합니다. Nadia의 답변은 훨씬 더 중복 된 타이핑과 관련이 있으며 Stuart의 답변은 SED를 사용하고 여전히 호출하여 패키지를 만듭니다. touch __init__.py
, 그리고--cover-package=.
나를 위해 작동하지 않습니다.
setup.cfg 로이 작업을 수행하려는 사람이라면 다음과 같습니다. 여러 패키지를 지정하는 방법을 알아내는 데 어려움이있었습니다.
[nosetests]
with-coverage=1
cover-html=1
cover-package=module1,module2
touch __init__.py; nosetests --with-coverage --cover-package=`pwd | sed 's@.*/@@g'`
당신은 그렇게 허용 된 답변을 향상시킬 수 있습니다 --cover-package=foo,bar