Unity 机器学习代理工具包 (ML-Agents) 是一个开源项目,它使游戏和模拟能够作为训练智能代理的环境。
您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 

96 行
2.4 KiB

import os
import sys
import subprocess
import shutil
import xml.dom.minidom
from typing import NamedTuple
from .yamato_utils import get_base_path, get_unity_executable_path
def clean_previous_results(base_path):
"""
Clean up old results and make the artifacts path.
"""
artifacts_path = os.path.join(base_path, "artifacts/")
results_xml_path = os.path.join(base_path, "results.xml")
if os.path.exists(results_xml_path):
os.remove(results_xml_path)
if os.path.exists(artifacts_path):
os.rmdir(artifacts_path)
os.mkdir(artifacts_path)
class TestResults(NamedTuple):
total: str
passed: str
failed: str
duration: str
def parse_results(results_xml):
"""
Extract the test results from the xml file.
"""
stats = {}
dom_tree = xml.dom.minidom.parse(results_xml)
collection = dom_tree.documentElement
for attribute in ["total", "passed", "failed", "duration"]:
stats[attribute] = collection.getAttribute(attribute)
return TestResults(**stats)
def main():
base_path = get_base_path()
artifacts_path = os.path.join(base_path, "artifacts/")
results_xml_path = os.path.join(base_path, "results.xml")
print(f"Running in base path {base_path}")
print("Cleaning previous results")
clean_previous_results(base_path)
unity_exe = get_unity_executable_path()
print(f"Starting tests via {unity_exe}")
test_args = [
unity_exe,
"-batchmode",
"-runTests",
"-logfile",
"-",
"-projectPath",
f"{base_path}/Project",
"-testResults",
f"{base_path}/results.xml",
"-testPlatform",
"editmode",
]
print(f"{' '.join(test_args)} ...")
timeout = 30 * 60 # 30 minutes, just in case
res: subprocess.CompletedProcess = subprocess.run(test_args, timeout=timeout)
stats = parse_results(results_xml_path)
print(
f"{stats.total} tests executed in {stats.duration}s: {stats.passed} passed, "
f"{stats.failed} failed. More details in results.xml"
)
try:
# copy results to artifacts dir
shutil.copy2(results_xml_path, artifacts_path)
except Exception:
pass
if res.returncode == 0 and os.path.exists(results_xml_path):
print("Test run SUCCEEDED!")
else:
print("Test run FAILED!")
sys.exit(res.returncode)
if __name__ == "__main__":
main()