The model build tools like gradle/maven provided a pretty easy way to run unit test and generate test summary. Also, gradle support to run unit test concurrently which improved performance a lot.
One of project is converting from ANT build to Gradle. However, one challenge of current project can't use gradle's multiple thread to run tests because some of test cases access the same database with conflict and can't run them at the same time. The existing ant solution was trying to group all tests as 3 collection to avoid the test conflict.
Unfortunately, gradle didn't support it by default because gradle will generate temp file with same name during test. So multiple test processes will lead to file access violation.
For simple purpose, I created 3 classes and the related test case as following:
and the test command is:
It will simulate the real project case and provide an easy way to verify quickly if our solution workable or not,
1. Firstly, in order to fix the test output file issue, the command above was added the --PtestStage to indicate which stage the tests are running.
2. Inside gradle, we set explicitly the bin folder for gradle
3. And add Task:generateReport as test's finalization.
The generateReport will collect all test bin files and create a full report including all tests result.
We are almost there to resolve the problem.
Moreover, jacoco report was added as well to support code coverage report. (I even used jacocoMerge to merge the final exec file. But looks like jacoco are smart enough to create incremental report during my test)
The full gradle.build file:
See the full implementation on my github: https://github.com/LeiZheng/multiple-tests
One of project is converting from ANT build to Gradle. However, one challenge of current project can't use gradle's multiple thread to run tests because some of test cases access the same database with conflict and can't run them at the same time. The existing ant solution was trying to group all tests as 3 collection to avoid the test conflict.
Unfortunately, gradle didn't support it by default because gradle will generate temp file with same name during test. So multiple test processes will lead to file access violation.
For simple purpose, I created 3 classes and the related test case as following:
and the test command is:
It will simulate the real project case and provide an easy way to verify quickly if our solution workable or not,
1. Firstly, in order to fix the test output file issue, the command above was added the --PtestStage to indicate which stage the tests are running.
2. Inside gradle, we set explicitly the bin folder for gradle
3. And add Task:generateReport as test's finalization.
The generateReport will collect all test bin files and create a full report including all tests result.
We are almost there to resolve the problem.
Moreover, jacoco report was added as well to support code coverage report. (I even used jacocoMerge to merge the final exec file. But looks like jacoco are smart enough to create incremental report during my test)
The full gradle.build file:
See the full implementation on my github: https://github.com/LeiZheng/multiple-tests
Comments
Post a Comment