2011-01-21 4 views
11

나는 testng.xml 파일을 사용하여 정의 된 몇 가지 테스트를 Gradle에 실행 시키려고 시도하고있다. 내 testng.xml 파일은 다음과 같습니다.테스트 클래스와 주문을 위해 testng.xml 파일을 사용하도록 Gradle에 지시하려면 어떻게해야합니까?

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > 
<suite name="mySuite" verbose="1"> 

    <listeners> 
    <listener class-name="mypackage.MyListener" /> 
    <listener class-name="mypackage.TestOrderer" /> 
    </listeners> 

    <test name="Tests"> 
    <classes> 
     <class name="mytestpackage.CrazyTest1"/> 
     <class name="mytestpackage.CrazyTest2"/> 
     <class name="mytestpackage.CrazyTest3"/> 
    </classes> 
    </test> 
</suite> 

그래서이 파일이 필요한 이유는 무엇입니까? 테스트가 here과 비슷한 주석으로 정의 된 방식으로 구성되도록하고 싶습니다. 추측 하듯이 TestOrderer는 IMethodInterceptor입니다.

여기에 문제가 있습니다. Gradle이 내 testng.xml 파일을 인계 받아 테스트 디렉토리를 긁어서 실행하려는 테스트를 찾은 것 같습니다. 이 기능을 사용하지 않더라도 메서드를 적절하게 실행하지 못합니다. 여기에 내가해야한다고 생각하는 것이 있지만, 그렇지 않습니다. 이 ... 생각할 수없는 TestNG의 프로세스를 포크하고 실행하자,하지만 난 길을 나갈 Gradle을 얘기하는 방법을 알아낼 그냥 실행할 수 있어야처럼

test { 
    useTestNG() 
    options.suites("src/test/resources/crazyTestNG.xml") 
    # Adding 
    # scanForTestClasses = false 
    # causes zero tests to be executed, since the class names don't end in Test 
} 

보인다 내 테스트.

답변

1

Gradle TestNG 러너는 테스트 클래스가 지정되지 않은 경우이를 검사하거나 이름을 패턴 매칭하여 테스트 실행을 완전히 건너 뛸 것이라고 가정합니다.

대신 스위트 xml이 제공되었는지 여부를 고려해야합니다. 이 문제에 대해 jira 문제를 추가 할 수 있습니까?

주위에 한 가지 일이 모두 스위트 룸 XML 파일 사용하는 청취자를 지정하는 options.listener를 사용하지 않는 것입니다 :

test { 
    options.listeners << 'mypackage.MyListener' 
    options.listeners << 'mypackage.TestOrderer' 
} 

당신이 테스트 클래스를 지정하지 않아도이 방법과 당신은 그저 당신을 위해 그들을 찾을 수 있습니다.

+0

아니요 테스트 클래스를 지정해야합니다. TestNG 엔진의 특정 사용 사례로 인해 특정 순서로 실행되도록해야합니다. 스캔하면이 프로세스가 중단됩니다. –

0

이 방법은 testng.xml 파일을 사용하지 않지만 testNG 테스트 그룹을 에뮬레이션하고 JUnit 테스트 그룹을 Gradle 작업으로 생성 한 다음 빌드를 실행할 때 작업 실행을 순서대로 수동으로 주문할 수도 있습니다.

// in build.gradle 
task testGroupOne(type: Test) { 
    //include '**/*SuiteOne.*' 
    include '**/SuiteOne.class' 
    testReportDir = file("${reportsDir}/SuiteOne") 
    testResultsDir = file("${buildDir}/test-results/SuiteOne") 
} 

task testGroupTwo(type: Test) { 
    //include '**/*SuiteTwo.*' 
    include '**/SuiteTwo.class' 
    testReportDir = file("${reportsDir}/SuiteTwo") 
    testResultsDir = file("${buildDir}/test-results/SuiteTwo") 
} 

다음과 같은 빌드를 실행 Gradle을 testGroupTwo testGroupOne

6

을 나는 Gradle을에서 TestNG를 지원 ... 그것은 원시 TestNG를를 사용하는 것에 비해 가장 취소 아주 유연 것으로 밝혀 싫어. 그리고 나는 gradle을 만지작 거리며 피곤했다.

gradle runTests 다음

6

당신이 실행되는 테스트 스위트 (XML)를 구성하는 방법은 다음과 같습니다 내 솔루션 ... 실행 TestNG를 직접 내가 명령 줄에서 운영하는 Gradle을 작업

task runTests(type: JavaExec, dependsOn: 'classes') { 
    main = 'org.testng.TestNG' 
    classpath = files("./src/test/resources", 
         project.sourceSets.main.compileClasspath, 
         project.sourceSets.test.compileClasspath, 
         project.sourceSets.main.runtimeClasspath, 
         project.sourceSets.test.runtimeClasspath) 
    args = ["-parallel", "methods", "-threadcount", "1", "-d", "./build/test-output", "./src/test/resources/test.xml"] 
} 

를 사용하여 Gradle 작업 :

apply plugin: 'java' 

repositories { 
    mavenCentral() 
} 
dependencies { 
    // add the dependencies as needed 
    testCompile group: 'org.testng', name: 'testng', version:'6.8.8' 
    testCompile fileTree('lib') 
} 
test { 
    useTestNG() { 
     // runlist to executed. path is relative to current folder 
     suites 'src/test/resources/runlist/my_test.xml' 
    } 
} 
+0

기타 옵션은 [여기] (https://docs.gradle.org/current/groovydoc/org/gradle/api/tasks/testing/testng/TestNGOptions.html)에서 찾을 수 있습니다. – Nick

관련 문제