zephyr/scripts/schemas/twister/testsuite-schema.yaml
Dmitrii Golovanov b4d22420e9 twister: harness: recording: Allow multiple patterns
Extend Twister Harness 'recording' feature to allow multiple
regular expression patterns to extract different types of records
from test output.

Add 'merge' recording mode to collect all extracted data fields
into a single record object of the test instance.

Export to CSV file now takes all field names occurred in the collected
records, sort it alphabetically, and then use it for columns instead of
using only the first record's fields. This is done to address possible
situation when records have different set of fields.

Adjust Twister documentation and test suite to the above changes.

Signed-off-by: Dmitrii Golovanov <dmitrii.golovanov@intel.com>
2025-01-16 22:38:51 +01:00

268 lines
5.7 KiB
YAML

#
# Schema to validate a YAML file describing a Zephyr test platform
#
# We load this with pykwalify
# (http://pykwalify.readthedocs.io/en/unstable/validation-rules.html),
# a YAML structure validator, to validate the YAML files that describe
# Zephyr test platforms
#
# The original spec comes from Zephyr's twister script
#
schema;scenario-schema:
type: map
# has to be not-required, otherwise the parser gets
# confused and things it never found it
required: false
mapping:
"arch_exclude":
type: any
required: false
"arch_allow":
type: any
required: false
"vendor_exclude":
type: seq
required: false
sequence:
- type: str
"vendor_allow":
type: seq
required: false
sequence:
- type: str
"testcases":
type: seq
required: false
sequence:
- type: str
"build_only":
type: bool
required: false
"build_on_all":
type: bool
required: false
"depends_on":
type: any
required: false
"extra_args":
type: any
required: false
"extra_configs":
type: seq
required: false
sequence:
- type: str
"extra_conf_files":
type: seq
required: false
sequence:
- type: str
"extra_overlay_confs":
type: seq
required: false
sequence:
- type: str
"extra_dtc_overlay_files":
type: seq
required: false
sequence:
- type: str
"extra_sections":
type: any
required: false
"required_snippets":
type: seq
required: false
sequence:
- type: str
"filter":
type: str
required: false
"levels":
type: seq
required: false
sequence:
- type: str
enum: ["smoke", "unit", "integration", "acceptance", "system", "regression"]
"integration_platforms":
type: seq
required: false
sequence:
- type: str
"integration_toolchains":
type: seq
required: false
sequence:
- type: str
"ignore_faults":
type: bool
required: false
"ignore_qemu_crash":
type: bool
required: false
"harness":
type: str
required: false
"harness_config":
type: map
required: false
mapping:
"type":
type: str
required: false
"fixture":
type: str
required: false
"ordered":
type: bool
required: false
"pytest_root":
type: seq
required: false
sequence:
- type: str
"pytest_args":
type: seq
required: false
sequence:
- type: str
"pytest_dut_scope":
type: str
enum: ["function", "class", "module", "package", "session"]
required: false
"ctest_args":
type: seq
required: false
sequence:
- type: str
"regex":
type: seq
required: false
sequence:
- type: str
"robot_testsuite":
type: any
required: false
"robot_option":
type: any
required: false
"record":
type: map
required: false
mapping:
"regex":
type: seq
required: true
sequence:
- type: str
"merge":
type: bool
required: false
"as_json":
type: seq
required: false
sequence:
- type: str
"bsim_exe_name":
type: str
required: false
"min_ram":
type: int
required: false
"min_flash":
type: int
required: false
"modules":
type: seq
required: false
sequence:
- type: str
"platform_exclude":
type: any
required: false
"platform_allow":
type: any
required: false
"platform_type":
type: seq
required: false
sequence:
- type: str
enum: ["mcu", "qemu", "sim", "unit", "native"]
"platform_key":
required: false
type: seq
matching: "all"
sequence:
- type: str
"simulation_exclude":
type: seq
required: false
sequence:
- type: str
enum:
[
"qemu",
"simics",
"xt-sim",
"renode",
"nsim",
"mdb-nsim",
"tsim",
"armfvp",
"native",
"custom",
]
"tags":
type: any
required: false
"timeout":
type: int
required: false
"toolchain_exclude":
type: any
required: false
"toolchain_allow":
type: any
required: false
"type":
type: str
enum: ["unit"]
"skip":
type: bool
required: false
"slow":
type: bool
required: false
"sysbuild":
type: bool
required: false
type: map
mapping:
"common":
include: scenario-schema
# The sample descriptor, if present
"sample":
type: map
required: false
mapping:
"name":
type: str
required: true
"description":
type: str
required: false
# The list of testcases -- IDK why this is a sequence of
# maps maps, shall just be a sequence of maps
# maybe it is just an artifact?
"tests":
type: map
required: true
matching-rule: "any"
mapping:
# The key for the testname is any, so
# regex;(([a-zA-Z0-9_]+)) for this to work, note below we
# make it required: false
regex;(([a-zA-Z0-9_]+)):
include: scenario-schema