>백엔드 개발 >Golang >경합을 피하기 위해 여러 패키지에 대해 Go 테스트를 순차적으로 실행하는 방법은 무엇입니까?

경합을 피하기 위해 여러 패키지에 대해 Go 테스트를 순차적으로 실행하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-04 06:15:29274검색

How to Run Go Tests Sequentially for Multiple Packages to Avoid Contention?

Go: 여러 패키지에 대해 동시에 테스트 실행: 경합 해결

하위 디렉터리에서 여러 패키지를 테스트할 때 go 테스트를 사용하여 개별 테스트를 실행하면 성공합니다. . 그러나 go test ./...를 사용하여 모든 테스트를 동시에 실행하려고 시도하면 실패하게 됩니다. 이 문제는 공유 데이터베이스와 같은 공통 리소스에 액세스할 때 발생할 수 있는 경합으로 인해 발생합니다.

동일한 데이터베이스에서 여러 테스트가 동시에 실행되는 경우 개별 테스트 파일에 사용되는 전역 변수로 인해 경합이 발생할 수 있습니다. 이를 방지하려면 -parallel 1 플래그 사용을 고려하세요. 이렇게 하면 각 패키지 내에서 테스트가 순차적으로 실행됩니다.

-parallel 1을 사용하더라도 경합으로 인해 테스트가 여전히 실패할 수 있습니다. 이는 서로 다른 패키지의 테스트가 동시에 실행되고 있음을 나타냅니다. 패키지 간의 병렬 처리 가능성을 제거하려면 bash 스크립트 또는 별칭을 사용하여 테스트를 수동으로 실행하는 것이 해결 방법입니다. 다음 명령 시퀀스를 사용하면 됩니다.

find . -name '*.go' -printf '%h\n' | sort -u | xargs -n1 -P1 go test

이 명령은 *.go 파일이 포함된 고유한 하위 디렉터리를 나열하고 각 하위 디렉터리에서 순차적으로 go 테스트를 실행합니다.

대안으로 다음 쉘 스크립트 또는 별칭을 사용할 수 있습니다:

function gotest(){   find  -name '*.go' -printf '%h\n' | sort -u | xargs -n1 -P1 go test; }

gotest .를 실행하면 현재 디렉터리의 모든 테스트를 순차적으로 실행할 수 있습니다.

go test ./...만큼 간단하지는 않지만 이는 해결 방법을 사용하면 테스트가 패키지 전체에서 순차적으로 실행되어 병렬 테스트 실행으로 인해 발생하는 모든 경합 문제를 해결할 수 있습니다.

위 내용은 경합을 피하기 위해 여러 패키지에 대해 Go 테스트를 순차적으로 실행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.