문제

내 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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top