Gradle 및 D를 통해 테스트에 시스템 속성을 부여하는 방법
시스템 속성을 읽는 Java 프로그램이 있습니다.
System.getProperty("cassandra.ip");
그래들 빌드 파일이 있는데
gradle test -Pcassandra.ip=192.168.33.13
또는
gradle test -Dcassandra.ip=192.168.33.13
그러나 System.getProperty는 항상 null을 반환합니다.
내가 찾은 유일한 방법은 그것을 내 Gradle 빌드 파일에 추가하는 것이다.
test {
systemProperty "cassandra.ip", "192.168.33.13"
}
-D 경유로 하는 방법
-P 플래그는 그라들 속성용이고 -D 플래그는 JVM 속성용입니다.테스트가 새로운 JVM으로 분기될 수 있기 때문에 gradle로 전달된 -D 인수는 테스트에 전파되지 않습니다.이 동작은 확인되고 있는 것처럼 들립니다.
에서 systemProperty를 사용할 수 있습니다.test
지금까지와 같이 블록하지만, 수신 gradle 속성과 함께 전달함으로써 베이스로 합니다.
test {
systemProperty "cassandra.ip", project.getProperty("cassandra.ip")
}
또는 D를 통해 전달하고 있는 경우
test {
systemProperty "cassandra.ip", System.getProperty("cassandra.ip")
}
명령줄에 지정된 모든 속성을 gradle 스크립트로 다시 나열하고 싶지 않다는 점을 제외하고는 이 문제가 많이 발생했습니다.따라서 모든 시스템 속성을 테스트로 보냅니다.
task integrationTest(type: Test) {
useTestNG()
options {
systemProperties(System.getProperties())
}
}
테스트 JVM에 여러 시스템 속성을 전달해야 하는 경우가 있었습니다(관련되지 않은 속성을 모두 전달하고 싶지 않았습니다).상기의 회답에 근거해, 다음의 방법으로subMap
필요한 것을 필터링 할 수 있었습니다.
task integrationTest(type: Test) {
// ... Do stuff here ...
systemProperties System.getProperties().subMap(['PROP1', 'PROP2'])
}
이 예에서는PROP1
그리고.PROP2
gradle의 JVM에 존재하는 경우 전달됩니다.
테스트 JVM에 수많은 프로젝트 속성을 시스템 속성으로 전달하는 변종입니다.유연성을 높이기 위해 시스템 속성보다 프로젝트 속성을 선호합니다.
task intTest(type: Test) {
systemProperties project.properties.subMap(["foo", "bar"])
}
이는 명령줄에서 전달될 수 있습니다.
$ gradle intTest -Pfoo=1 -Pbar=2
테스트에서 검색된 항목:
String foo = System.getProperty("foo");
여기 나에게 효과가 있었던 것이 있다.
//in build.gradle file
tasks.withType(Test) {
systemProperties = [
ip: System.getProperty('ip', '192.168.33.13'),
]
}
task integrationTests(type: Test){
useTestNG()
}
TestNG를 사용하는 경우 다음과 같이 @Parameters 주석을 추가할 수 있습니다.
public class IpAddress {
@Test
@Parameters("ip")
public void printIpAddress(String ip) {
System.out.println(ip);
}
}
이제 gradlew 명령을 실행할 수 있습니다.
./gradlew clean -Dip="xx.xx.xx.xx" integrationTests --tests "IpAddress"
@DataProvider를 사용하여 테스트 데이터를 통과하려면 다음과 같이 전달하고 위의 gradle 명령을 실행하여 테스트를 수행합니다.
public class IpAddress {
@DataProvider(name = "GetIP")
private static Object[][] getIp() {
return new Object[][]{
//if -Dip is not provided in command, then by default it gets the value assigned in build.gradle file i.e.'192.168.33.13'
{System.getProperty("ip")},
};
}
@Test(dataProvider = "GetIP")
public void printIpAddress(String ip) {
System.out.println(ip);
}
}
그래서 오늘도 그 문제에 대해 우연히 알게 되었습니다.그 결과, 다음과 같은 일이 잘 풀렸습니다.
ext.env='prod'
test {
systemProperty 'env', System.properties['env'] ?: "${env}"
println "# test environment: " + systemProperties['env']
...
}
-Penv=dev를 사용하여 테스트 작업을 호출하면 인쇄물에 'dev' 값이 표시되며, 값을 보내지 않으면 'dev' 값이 표시되며, 이것이 예상 동작입니다.
이 값은 Java 측에서도 System.getProperty("env")를 사용하여 액세스할 수 있습니다.
이 문제에 대한 저의 결론은 입력값(파라미터)은 실제로 System 아래에 저장되어 있기 때문에 어느 System을 통해서도 접근이 가능하다는 것입니다.properties['env']또는 System.getProperty("env")의 경우 출력(시스템 속성)은 systemProperties 배열에 저장되며 systemProperties['env']를 통해 읽을 수 있습니다.
언급URL : https://stackoverflow.com/questions/21406265/how-to-give-system-property-to-my-test-via-gradle-and-d
'programing' 카테고리의 다른 글
MySQL에서 SQL 스크립트를 실행하는 방법 (0) | 2022.09.18 |
---|---|
날짜 개체에 시간을 추가하는 방법 (0) | 2022.09.18 |
MySQL ERROR 1045 (28000):사용자 'bill'@'localhost'에 대한 액세스가 거부되었습니다(암호: YES 사용). (0) | 2022.09.18 |
dll에 의해 노출된 모든 기능을 찾을 수 있는 방법이 있습니까? (0) | 2022.09.18 |
웹 개발자용 Linux 프리 인스톨 (0) | 2022.09.18 |