Can anyone let me know how can I get the time taken by each of the unit tests in a unit test class in a single file via maven-surefire
? I have seen my tar
The maven-surefire-plugin
currently doesn't let you do this. It writes all the results in separate files. You could create a feature-request in its issue tracker, if you feel like this is a missing feature.
However you can use some Linux commands to convert the output to what you need. Here are some commands that turn the separate XML files into a single file that looks like what you want:
grep testcase target/surefire-reports/TEST-*.xml |
sed 's/.* name="\(.*\)" classname="\(.*\)" time="\(.*\)".*/\2#\1() - \3ms/g' |
sort -n -k 3 > output.txt
Update: Numeric sorting has problems with varying number of fraction
digits. Use awk
version below to solve this.
The same thing could be done with awk
a bit shorter and less cryptic:
grep -h testcase target/surefire-reports/TEST-*.xml |
awk -F '"' '{printf("%s#%s() - %.3fms\n", $4, $2, $6); }' |
sort -n -k 3 > output.txt
You have to execute these commands from the toplevel directory of your maven project after the surefire-reports were generated.
If you have multi-module project, use this instead:
find . -name TEST-*.xml -exec grep -h testcase {} \; |
awk -F '"' '{printf("%s#%s() - %.3fms\n", $4, $2, $6); }' |
sort -n -k 3 > output.txt
The resulting file is output.txt
and contains lines of the following format:
#() -
The result is sorted by consumed time.