288 words
1 minute
Unreal Engine 5 Test Template
Full config
<?xml version="1.0" encoding="UTF-8"?>
<template xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" uuid="458a0c4b-5c78-454f-b1fa-1e079051af72" xsi:noNamespaceSchemaLocation="https://www.jetbrains.com/teamcity/schemas/2021.1/project-config.xsd">
<name>Unreal Game Test</name>
<settings>
<options>
<option name="artifactRules" value="%teamcity.build.workingDir%\dist\Windows => Windows" />
<option name="buildNumberPattern" value="%version_name%.%build.counter%" />
<option name="checkoutMode" value="ON_AGENT" />
<option name="publishArtifactCondition" value="SUCCESSFUL" />
</options>
<parameters>
<param name="version_name" value="0.1.0" />
</parameters>
<build-runners>
<runner id="RUNNER_25" name="Build Editor" type="simpleRunner">
<parameters>
<param name="plugin.docker.imageId" value="eddiebeazer/unreal-engine:%UNREAL_ENGINE_VERSION%" />
<param name="plugin.docker.imagePlatform" value="windows" />
<param name="plugin.docker.pull.enabled" value="true" />
<param name="script.content" value="ue4 build Development Editor" />
<param name="teamcity.step.mode" value="default" />
<param name="use.custom.script" value="true" />
</parameters>
</runner>
<runner id="RUNNER_27" name="Test Game" type="simpleRunner">
<parameters>
<param name="plugin.docker.imageId" value="eddiebeazer/unreal-engine:%UNREAL_ENGINE_VERSION%" />
<param name="plugin.docker.imagePlatform" value="windows" />
<param name="script.content" value="ue4 test Project -- ReportOutputPath=%system.teamcity.build.workingDir%\Saved\Reports" />
<param name="teamcity.step.mode" value="default" />
<param name="use.custom.script" value="true" />
</parameters>
</runner>
<runner id="RUNNER_38" name="Parse Test Results" type="simpleRunner">
<parameters>
<param name="plugin.docker.imagePlatform" value="windows" />
<param name="plugin.docker.pull.enabled" value="true" />
<param name="script.content" value="unreal-ci jsonToXml -j %system.teamcity.build.workingDir%\Saved\Reports\index.json -o %system.teamcity.build.workingDir%\Saved\Reports\tests.xml -t %TEST_SUITE_NAME%" />
<param name="teamcity.step.mode" value="default" />
<param name="use.custom.script" value="true" />
</parameters>
</runner>
</build-runners>
<vcs-settings />
<requirements />
<build-triggers />
<build-extensions>
<extension id="perfmon" type="perfmon">
<parameters />
</extension>
<extension id="DockerSupport" type="DockerSupport">
<parameters>
<param name="login2registry" value="PROJECT_EXT_3" />
<param name="loginCheckbox" value="on" />
</parameters>
</extension>
<extension id="BUILD_EXT_7" type="xml-report-plugin">
<parameters>
<param name="xmlReportParsing.reportDirs" value="%system.teamcity.build.workingDir%\Saved\Reports\*.xml" />
<param name="xmlReportParsing.reportType" value="junit" />
</parameters>
</extension>
<extension id="jetbrains.agent.free.space" type="jetbrains.agent.free.space">
<parameters>
<param name="free-space-fail-start" value="true" />
<param name="free-space-work" value="50gb" />
</parameters>
</extension>
</build-extensions>
<cleanup />
</settings>
</template>
This template makes sure the editor is always building and runs functional tests. In the future this will also lint blueprints
- Build the editor. I use ue4cli to help with that
ue4 build Development Editor
- I run my functional tests.
ue4 test Project -- ReportOutputPath=%system.teamcity.build.workingDir%\Saved\Reports
- I then parse the report. Unreal Engine test report is in JSON, I created unreal-ci which is a cli tool that will then parse the JSON and output a JUnit xml file that can then be parsed by TeamCity/Jenkins
unreal-ci jsonToXml -j %system.teamcity.build.workingDir%\Saved\Reports\index.json -o %system.teamcity.build.workingDir%\Saved\Reports\tests.xml -t %TEST_SUITE_NAME%
Unreal Engine 5 Test Template
https://edwardbeazer.com/posts/unreal-engine-5-test-template/