6.2 KiB
6.2 KiB
Export Test Results
You can export test results in the JUnit XML format specified here. You can specify a file name to export to, or kick off an export in a post-run hook.
Setting the export file
There are two settings, the file name and a flag to include an epoch timestamp in the filename. The epoch timestamp will prevent runs from overwriting the last run's file.
- Gut Panel
- Set
Output Pathin the XML Output section in the Gut Panel - Check
Include Timestampif you want the timestamp to be included.
- Set
- Command Line
- Set
-gjunit_xml_fileto the path. - Add option
-gjunit_xml_timestampto include the timestamp.
- Set
.gutconfig.jsonFile"junit_xml_file":"user://results.xml""junit_xml_timestamp":false
- Inspector
- Set
Junit Xml Fileto the path. - Check
Junit Xml Timestampif you want the timestamp to be included.
- Set
Example Output
<?xml version="1.0" encoding="UTF-8"?>
<testsuites name="GutTests" failures="7" tests="17">
<testsuite name="res://test/resources/exporter_test_files/test_simple_2.gd" tests="3" failures="1" skipped="1">
<testcase name="test_pass" assertions="1" status="pass" classname="res://test/resources/exporter_test_files/test_simple_2.gd"></testcase>
<testcase name="test_fail" assertions="1" status="fail" classname="res://test/resources/exporter_test_files/test_simple_2.gd">
<failure message="failed">Cannot compare Int[1] to String["two"].
at line 7</failure>
</testcase>
<testcase name="test_pending" assertions="0" status="pending" classname="res://test/resources/exporter_test_files/test_simple_2.gd">
<skipped message="pending">this has text</skipped>
</testcase>
</testsuite>
<testsuite name="res://test/resources/exporter_test_files/test_simple.gd" tests="8" failures="4" skipped="2">
<testcase name="test_pending_with_text" assertions="0" status="pending" classname="res://test/resources/exporter_test_files/test_simple.gd">
<skipped message="pending">this has text</skipped>
</testcase>
<testcase name="test_parameterized_passing" assertions="4" status="pass" classname="res://test/resources/exporter_test_files/test_simple.gd"></testcase>
<testcase name="test_parameterized_failing" assertions="2" status="fail" classname="res://test/resources/exporter_test_files/test_simple.gd">
<failure message="failed">(call #1) [1] expected to equal [2]:
at line 25</failure>
</testcase>
<testcase name="test_fail_2" assertions="1" status="fail" classname="res://test/resources/exporter_test_files/test_simple.gd">
<failure message="failed">Cannot compare String["two"] to Int[2].
at line 13</failure>
</testcase>
<testcase name="test_pending_no_text" assertions="0" status="pending" classname="res://test/resources/exporter_test_files/test_simple.gd">
<skipped message="pending"></skipped>
</testcase>
<testcase name="test_pass_1" assertions="1" status="pass" classname="res://test/resources/exporter_test_files/test_simple.gd"></testcase>
<testcase name="test_pass_2" assertions="1" status="pass" classname="res://test/resources/exporter_test_files/test_simple.gd"></testcase>
<testcase name="test_fail_1" assertions="1" status="fail" classname="res://test/resources/exporter_test_files/test_simple.gd">
<failure message="failed">Cannot compare Int[1] to String["two"].
at line 10</failure>
</testcase>
</testsuite>
<testsuite name="res://test/resources/exporter_test_files/test_with_inner_classes.gd" tests="0" failures="0" skipped="0"></testsuite>
<testsuite name="res://test/resources/exporter_test_files/test_with_inner_classes.gd.TestClassOne" tests="3" failures="1" skipped="1">
<testcase name="test_pending_with_text" assertions="0" status="pending" classname="res://test/resources/exporter_test_files/test_with_inner_classes.gd.TestClassOne">
<skipped message="pending">this has text</skipped>
</testcase>
<testcase name="test_fail_1" assertions="1" status="fail" classname="res://test/resources/exporter_test_files/test_with_inner_classes.gd.TestClassOne">
<failure message="failed">Cannot compare Int[1] to String["two"].
at line 11</failure>
</testcase>
<testcase name="test_pass_1" assertions="1" status="pass" classname="res://test/resources/exporter_test_files/test_with_inner_classes.gd.TestClassOne"></testcase>
</testsuite>
<testsuite name="res://test/resources/exporter_test_files/test_with_inner_classes.gd.TestClassTwo" tests="3" failures="1" skipped="1">
<testcase name="test_pending_with_text" assertions="0" status="pending" classname="res://test/resources/exporter_test_files/test_with_inner_classes.gd.TestClassTwo">
<skipped message="pending">this has text</skipped>
</testcase>
<testcase name="test_fail_1" assertions="1" status="fail" classname="res://test/resources/exporter_test_files/test_with_inner_classes.gd.TestClassTwo">
<failure message="failed">Cannot compare Int[1] to String["two"].
at line 26</failure>
</testcase>
<testcase name="test_pass_1" assertions="1" status="pass" classname="res://test/resources/exporter_test_files/test_with_inner_classes.gd.TestClassTwo"></testcase>
</testsuite>
</testsuites>
Exporting results in post-run Hook
If you would like more control over exporting the results you can do so manually in a post-run hook. See Hooks for more information about setting up a post-run script.
Note that JunitXmlExport and gut are defined by the parent script res://addons/gut/hook_script.gd
extends GutHookScript
func run() # called automatically by Gut
var exporter = JunitXmlExport.new()
var filename = 'user://my_post_hook_results.xml'
var f_result = exporter.write_file(gut, filename)
if(f_result == OK):
gut.p(str("Results saved to ", filename))