Hi noble Jenkins developers,

I am wondering how to make my unit tests (well, they're integration ones in 
reality, aren't they), based on Jenkins Unit test harness, faster.

I have like 35 tests, and it takes approximately 9 minutes to execute them. 
I want to reduce this time. I use the default Surefire settings, and if I 
try to play around with forking options like advised on Surefire page 
https://maven.apache.org/surefire/maven-surefire-plugin/examples/fork-options-and-parallel-execution.html,
 
I run into different problems.

For example, if I set configuration

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.17</version>
    <configuration>
        <systemProperties>
            <property>
                <name>hudson.udp</name>
                <value>33849</value>
            </property>
        </systemProperties>
        <reuseForks>true</reuseForks>
        <forkCount>5</forkCount>
    </configuration>
</plugin>

I get errors like 

Caused by: java.nio.file.FileSystemException: 
C:\Users\me\AppData\Local\Temp\hudson4898380288667948066test\jobs\test0\builds\2015-11-12_14-44-25\log:
 
The process cannot access the file because it is being used by another 
process.
        at 
sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:86)
        at 
sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
        at 
sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:102)
        at 
sun.nio.fs.WindowsFileSystemProvider.implDelete(WindowsFileSystemProvider.java:269)

If I use more sophisticated configuration like 

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.17</version>
    <configuration>
        <systemProperties>
            <property>
                <name>hudson.udp</name>
                <value>33849</value>
            </property>
        </systemProperties>
        <reuseForks>true</reuseForks>
        <forkCount>2</forkCount>
        <parallel>classes</parallel>
        <threadCount>5</threadCount>
    </configuration>
</plugin>

I get errors like:

testJobSetup(com.myproject.BuildStepConfigurationTest)  Time elapsed: 0.158 
sec  <<< ERROR!
java.lang.IllegalStateException: second instance
....

SEVERE: Timer task hudson.model.Queue$MaintainTask@a4da332 failed
java.lang.NullPointerException
        at hudson.model.Queue.maintain(Queue.java:994)
        at hudson.model.Queue$MaintainTask.doRun(Queue.java:2033)
....
testJobSetup2(com.myproject.BuildStepConfigurationTest)  Time elapsed: 
0.201 sec  <<< ERROR!
java.lang.NullPointerException: null
        at hudson.ProxyConfiguration.getXmlFile(ProxyConfiguration.java:202)
        at hudson.ProxyConfiguration.load(ProxyConfiguration.java:206)
        at jenkins.model.Jenkins.<init>(Jenkins.java:782)
        at hudson.model.Hudson.<init>(Hudson.java:82)
....

If I run tests with default Surefire settings, it takes about 9 minutes, 
but at least the tests run fine.

Are there any guidelines about how to make unit tests run as fast as 
possible? How to tune Surefire, etc.

Thanks in advance!

Regards,
Kirill.

-- 
You received this message because you are subscribed to the Google Groups 
"Jenkins Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jenkinsci-dev/54b4c9f0-8e30-489a-aaf4-d0e6bb87d28f%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to