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 =&gt; 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

  1. Build the editor. I use ue4cli to help with that
ue4 build Development Editor
  1. I run my functional tests.
ue4 test Project -- ReportOutputPath=%system.teamcity.build.workingDir%\Saved\Reports
  1. 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/
Author
Edward Beazer
Published at
2023-08-04