97 lines
6.2 KiB
Markdown
97 lines
6.2 KiB
Markdown
# Export Test Results
|
|
|
|
You can export test results in the JUnit XML format specified [here](https://llg.cubic.org/docs/junit/). You can specify a file name to export to, or kick off an export in a [post-run hook](Hooks).
|
|
|
|
## 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 Path` in the XML Output section in the Gut Panel
|
|
* Check `Include Timestamp` if you want the timestamp to be included.
|
|
* Command Line
|
|
* Set `-gjunit_xml_file` to the path.
|
|
* Add option `-gjunit_xml_timestamp` to include the timestamp.
|
|
* `.gutconfig.json` File
|
|
* `"junit_xml_file":"user://results.xml"`
|
|
* `"junit_xml_timestamp":false`
|
|
* Inspector
|
|
* Set `Junit Xml File` to the path.
|
|
* Check `Junit Xml Timestamp` if you want the timestamp to be included.
|
|
|
|
|
|
## Example Output
|
|
``` xml
|
|
<?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](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`
|
|
``` gdscript
|
|
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))
|
|
```
|