8

나는 을 coverage.py과 함께 사용하여 테스트 스크립트의 파이썬 코드 범위를 추적합니다. 이 multiprocessing을 제외하고 아주 잘 작동파이썬 코드 커버리지 및 멀티 프로세싱

coverage run --parallel-mode --source=mysource --omit=*/stuff/idont/need.py ./mysource/tests/run_all_tests.py 
coverage combine 
coveralls --verbose 

: 나는 다음과 같은 명령을 사용합니다. 작업자 풀 또는 하위 프로세스에서 실행하는 코드는 추적되지 않습니다.

다중 처리 코드를 추적 할 가능성이 있습니까? 내가 누락 된 특정 옵션? 새 프로세스가 생성 될 때마다 적용을 시작하기 위해 다중 처리 라이브러리에 래퍼를 추가 할 수 있습니까?

편집는 :

내가 (그리고 jonrsharpe는 또한 monkey-patch for multiprocessing을 발견 :-).

그러나 이것은 나를 위해 작동하지 않습니다. 내 Tracis-CI 빌드가 시작 직후 거의 종료됩니다. 로컬 컴퓨터에서 문제를 확인한 후 멀티 프로세싱에 패치를 추가하면 메모리가 손상됩니다. 1GB 미만의 메모리를 사용하는 테스트의 경우이 수정으로 16GB 이상이 필요합니다.

EDIT2

:

원숭이 패치는 작은 수정 후 작업을 수행합니다 트릭을 config_file 분석 (config_file=os.environ['COVERAGE_PROCESS_START']) 를 않았다십시오. 이것은 부풀어 오른 기억의 문제를 해결했습니다. 따라서 해당 줄은 단순히 다음과 같이됩니다.

cov = coverage(data_suffix=True) 
+0

해당 하위 프로세스의 코드를 직접 테스트하지 않습니까? – jonrsharpe

+0

글쎄요, 대부분 그렇습니다. 그러나 유용하고 유용한 다중 처리가 사용되는 경우 (잠금 또는 다중 처리 대기열을 사용하여 데이터베이스 액세스를 래핑하여 직렬 데이터 저장을 시행하는 경우)에만 특정 부분이 있습니다. 그리고 나는이 코드가 성공적인 테스트로 인해 작동한다는 것을 알고 있습니다. 이것은 또한 작업복에 표시되는 것이 좋을 것입니다 :-) – SmCaterpillar

+1

http를 통해 https://bitbucket.org/ned/coveragepy/issue/117/enable-coverage-measurement-of-code-run-by를 참조하십시오. : //nedbatchelder.com/code/coverage/trouble.html – jonrsharpe

답변

6

적용 범위 4.0에는이 문제를 처리하기위한 명령 줄 옵션 --concurrency=multiprocessing이 포함되어 있습니다. 나중에 coverage combine을 사용해야합니다.

+2

나중에 'coverage combine'를 사용해야한다는 점을 지적 해 주셔서 감사합니다. '.coveragerc' 파일에서'concurrency = multiprocessing '이 왜 작동하지 않는지를 알아 내려고하면서 잠시 동안 바퀴를 돌리고있었습니다. –

0

적용 범위가 multiprocessing.Pool으로 작동하는지 확인하는 데 시간을 할애했지만 효과가 없었습니다.

나는 마침내 그게 효과가있는 수정안을 만들었습니다. 제가 잘못하면 누군가 지시를하면 행복 할 것입니다.

https://gist.github.com/andreycizov/ee59806a3ac6955c127e511c5e84d2b6

관련 문제