removed support of xml and json config.
Changed the evaluation pattern to $|x|.
This commit is contained in:
@@ -1,4 +0,0 @@
|
|||||||
<?xml version="1.0" ?>
|
|
||||||
<root>
|
|
||||||
<parameter name="func_param" value="param"/>
|
|
||||||
</root>
|
|
||||||
1
doc/examples/dummy/param_func.yaml
Normal file
1
doc/examples/dummy/param_func.yaml
Normal file
@@ -0,0 +1 @@
|
|||||||
|
func_param: param
|
||||||
@@ -2,10 +2,8 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
config_file:
|
config_file:
|
||||||
- param.xml
|
|
||||||
- param.yaml
|
- param.yaml
|
||||||
- param.json
|
- $(test_directory)/dummy/param_func.yaml
|
||||||
- $(test_directory)/dummy/param_func.xml
|
|
||||||
|
|
||||||
main:
|
main:
|
||||||
name: Test Sample number one
|
name: Test Sample number one
|
||||||
|
|||||||
@@ -1,4 +0,0 @@
|
|||||||
|
|
||||||
{
|
|
||||||
"global_loop_param_list": [["one", "two", "three"],[1, 2, 3]]
|
|
||||||
}
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
<?xml version="1.0" ?>
|
|
||||||
<root>
|
|
||||||
<!-- ****************************************************************************
|
|
||||||
Test configuration
|
|
||||||
**************************************************************************** -->
|
|
||||||
<parameter name="windows_prompt" value=">"/>
|
|
||||||
<parameter name="linux_prompt" value="$"/>
|
|
||||||
<parameter name="sequence" value="tm.tum"/>
|
|
||||||
</root>
|
|
||||||
@@ -2,7 +2,12 @@
|
|||||||
#****************************************************************************
|
#****************************************************************************
|
||||||
# Test configuration
|
# Test configuration
|
||||||
#**************************************************************************** -->
|
#**************************************************************************** -->
|
||||||
|
windows_prompt: >
|
||||||
|
linux_prompt: $
|
||||||
|
sequence: tm.tum
|
||||||
|
|
||||||
# loops parameters
|
# loops parameters
|
||||||
|
global_loop_param_list: [["one", "two", "three"], [1, 2, 3]]
|
||||||
global_loop_param_txt: ['one', 'two', 'three']
|
global_loop_param_txt: ['one', 'two', 'three']
|
||||||
global_loop_param_num: [1, 2, 3]
|
global_loop_param_num: [1, 2, 3]
|
||||||
|
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ sequences of tests can be called interactively.
|
|||||||
:caption: call a test in terminal mode
|
:caption: call a test in terminal mode
|
||||||
|
|
||||||
$ testium -m
|
$ testium -m
|
||||||
Configuration file loaded: /my/execution/path/param.xml
|
Configuration file loaded: /my/execution/path/param.yaml
|
||||||
[...]
|
[...]
|
||||||
================================================================================
|
================================================================================
|
||||||
====== Test configuration
|
====== Test configuration
|
||||||
|
|||||||
@@ -195,8 +195,8 @@ Export attribute
|
|||||||
key:
|
key:
|
||||||
- GID-1510554_step_1
|
- GID-1510554_step_1
|
||||||
report:
|
report:
|
||||||
reported_list: @| random.sample(range(0,20), k=10) |
|
reported_list: $| random.sample(range(0,20), k=10) |
|
||||||
reported_float: @| math.sqrt(float(1)) |
|
reported_float: $| math.sqrt(float(1)) |
|
||||||
reported_str: This is my reported sentence
|
reported_str: This is my reported sentence
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ Configuration files
|
|||||||
A configuration file can be specified in the `.tum` file or by the command line.
|
A configuration file can be specified in the `.tum` file or by the command line.
|
||||||
This configuration file is optional and must be a YAML file.
|
This configuration file is optional and must be a YAML file.
|
||||||
|
|
||||||
The type of file is recognized by the file name extension `.yaml`.
|
The configuration files must have the `.yaml` or `.yml` file name extension.
|
||||||
|
|
||||||
During the test script loading process, the values defined in these configuration files
|
During the test script loading process, the values defined in these configuration files
|
||||||
are added to the global variables and are then accessible from the test items and scripts
|
are added to the global variables and are then accessible from the test items and scripts
|
||||||
@@ -63,7 +63,7 @@ The parameter file can be specified in the `.tum` file root:
|
|||||||
|
|
||||||
parameter1: value1
|
parameter1: value1
|
||||||
parameter2: 1234
|
parameter2: 1234
|
||||||
parameter3: @| 12.34 * 2 |
|
parameter3: $| 12.34 * 2 |
|
||||||
parameter4:
|
parameter4:
|
||||||
- $(parameter1)
|
- $(parameter1)
|
||||||
- $(parameter3)
|
- $(parameter3)
|
||||||
@@ -106,8 +106,11 @@ Another possible usage of the global variables is to share persistent data betwe
|
|||||||
A library allowing python functions to access global variables is available from the
|
A library allowing python functions to access global variables is available from the
|
||||||
python scripts. See details in section :ref:`helper library<sec_python_helper_library>`.
|
python scripts. See details in section :ref:`helper library<sec_python_helper_library>`.
|
||||||
|
|
||||||
Apart from the value obtained from the param.xml file, the global varibles entries
|
Apart from the value obtained from the default `param.yaml` or defined configuration files,
|
||||||
contains also built-in specific value, and test item specific values.
|
the global variables entries contains also
|
||||||
|
|
||||||
|
* built-in specific value (see :ref:`below<sec_global_variables_builtin>`),
|
||||||
|
* values returned by test items.
|
||||||
|
|
||||||
.. _sec_global_variables_builtin:
|
.. _sec_global_variables_builtin:
|
||||||
|
|
||||||
@@ -202,7 +205,7 @@ The variable substitution is recursive and checks all the occurrences of the
|
|||||||
``$(x)`` pattern in a string.
|
``$(x)`` pattern in a string.
|
||||||
|
|
||||||
It is also possible to perform evaluation of python substrings during parameters passing.
|
It is also possible to perform evaluation of python substrings during parameters passing.
|
||||||
It is done by using the ``@| expr |`` pattern in a string.
|
It is done by using the ``$| expr |`` pattern in a string.
|
||||||
`expr` may then be a correct python expression.
|
`expr` may then be a correct python expression.
|
||||||
|
|
||||||
Below are illustrated simple and more complicated cases of expansion and evaluation depending on
|
Below are illustrated simple and more complicated cases of expansion and evaluation depending on
|
||||||
@@ -215,10 +218,10 @@ their pattern.
|
|||||||
name: Dynamic variables expansion
|
name: Dynamic variables expansion
|
||||||
key: $(test)_PASS
|
key: $(test)_PASS
|
||||||
values:
|
values:
|
||||||
- expanse_select: @|"$(expanse_select)".replace("o", "a")|
|
- expanse_select: $|"$(expanse_select)".replace("o", "a")|
|
||||||
- expanse_index: $(expanse_index_$(expanse_select))
|
- expanse_index: $(expanse_index_$(expanse_select))
|
||||||
- expanse_table: $(expanse_table_$(expanse_select))
|
- expanse_table: $(expanse_table_$(expanse_select))
|
||||||
- expanse_eval: @|$(expanse_index) == 1|
|
- expanse_eval: $|$(expanse_index) == 1|
|
||||||
|
|
||||||
Test Items
|
Test Items
|
||||||
--------------------
|
--------------------
|
||||||
|
|||||||
Binary file not shown.
@@ -143,7 +143,7 @@ class TestItem:
|
|||||||
f"'{self.cmd()}' test item named '{self.name()}':\nskipped expresion can only be a static expression as it is evaluated during loading of TUM : {s}",
|
f"'{self.cmd()}' test item named '{self.name()}':\nskipped expresion can only be a static expression as it is evaluated during loading of TUM : {s}",
|
||||||
self.seqFilename(),
|
self.seqFilename(),
|
||||||
)
|
)
|
||||||
# This allow disabling test item directly by using its name inside param.xml file
|
# This allow disabling test item directly by using its name inside param.yaml file
|
||||||
elif self._name in tm.gd("skipped_test_item", []):
|
elif self._name in tm.gd("skipped_test_item", []):
|
||||||
self.skipped = True
|
self.skipped = True
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import sys
|
import sys
|
||||||
import traceback
|
import traceback
|
||||||
from functools import wraps
|
|
||||||
from random import randint
|
from random import randint
|
||||||
|
|
||||||
from interpreter.utils.tum_except import ETUMSyntaxError
|
from interpreter.utils.tum_except import ETUMSyntaxError
|
||||||
|
|||||||
@@ -313,12 +313,12 @@ def _preprocess_string(value, parent=None):
|
|||||||
|
|
||||||
def _eval_param(value):
|
def _eval_param(value):
|
||||||
"""This function parses a string value to check if patterns corresponding
|
"""This function parses a string value to check if patterns corresponding
|
||||||
to @|xxx| exists.
|
to $|xxx| exists.
|
||||||
When this kind of pattern is found, an attempt to evaluate its
|
When this kind of pattern is found, an attempt to evaluate its
|
||||||
content is done.
|
content is done.
|
||||||
If it is not evaluable, not replaced.
|
If it is not evaluable, not replaced.
|
||||||
"""
|
"""
|
||||||
return _parse_and_process("@|", "|", value, evaluate)
|
return _parse_and_process("$|", "|", value, evaluate)
|
||||||
|
|
||||||
|
|
||||||
def _process_recursively(func, param_value, *fparams):
|
def _process_recursively(func, param_value, *fparams):
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ from socket import gethostname
|
|||||||
import ast
|
import ast
|
||||||
import json
|
import json
|
||||||
import yaml
|
import yaml
|
||||||
import xml.etree.ElementTree as ET
|
|
||||||
import copy
|
import copy
|
||||||
|
|
||||||
import yaml
|
import yaml
|
||||||
@@ -78,7 +77,7 @@ def _locate_config_files(test_dir, config_files, silent=False):
|
|||||||
ret = []
|
ret = []
|
||||||
pf = []
|
pf = []
|
||||||
if len(config_files) == 0:
|
if len(config_files) == 0:
|
||||||
for p in ['param.xml', 'param.yaml', 'param.json']:
|
for p in ['param.yaml', 'param.yml']:
|
||||||
param_filename = os.path.join(test_dir, p)
|
param_filename = os.path.join(test_dir, p)
|
||||||
if os.path.exists(param_filename):
|
if os.path.exists(param_filename):
|
||||||
pf.append(param_filename)
|
pf.append(param_filename)
|
||||||
@@ -210,55 +209,6 @@ def load_test(test_file, test_dir, cmdline_pfs, cmdline_defs):
|
|||||||
return test_dict, new_pfs
|
return test_dict, new_pfs
|
||||||
|
|
||||||
|
|
||||||
def xmltodict(xml_param_file, silent=True):
|
|
||||||
""" return a dictionnarie of parameter from xml file.
|
|
||||||
"""
|
|
||||||
tag = 'parameter'
|
|
||||||
returned_dict = {}
|
|
||||||
returned_str_dict = {}
|
|
||||||
xml_tree = ET.parse(xml_param_file)
|
|
||||||
xml_root = xml_tree.getroot()
|
|
||||||
xml_params = xml_root.findall(tag)
|
|
||||||
|
|
||||||
for param in xml_params:
|
|
||||||
name = param.get('name', '')
|
|
||||||
if name != '':
|
|
||||||
v = param.get('value', None)
|
|
||||||
if v is None:
|
|
||||||
v = param.get('str', '')
|
|
||||||
v = v.replace("\\n", "\n")
|
|
||||||
v = v.replace("\\r", "\r")
|
|
||||||
v = v.replace("\\t", "\t")
|
|
||||||
returned_str_dict[name] = v
|
|
||||||
else:
|
|
||||||
v = v.replace("\\n", "\n")
|
|
||||||
v = v.replace("\\r", "\r")
|
|
||||||
v = v.replace("\\t", "\t")
|
|
||||||
returned_dict[name] = v
|
|
||||||
|
|
||||||
# reinitializes the global dict values with the xml file content
|
|
||||||
globdict.global_dict.update(returned_str_dict)
|
|
||||||
globdict.global_dict.update(returned_dict)
|
|
||||||
|
|
||||||
for i in range(10):
|
|
||||||
for key, val in returned_dict.items():
|
|
||||||
val = expanse(val)
|
|
||||||
returned_dict.update({key: val})
|
|
||||||
|
|
||||||
globdict.global_dict.update(returned_dict)
|
|
||||||
|
|
||||||
if not silent:
|
|
||||||
if not tm.debug_enabled():
|
|
||||||
tm.print_info(f"\"{xml_param_file}\" loaded.")
|
|
||||||
else:
|
|
||||||
tm.print_debug(f"\"{xml_param_file}\" loading:")
|
|
||||||
for k, v in returned_str_dict.items():
|
|
||||||
tm.print_debug(f" {k}: {v}")
|
|
||||||
for k, v in returned_dict.items():
|
|
||||||
tm.print_debug(f" {k}: {v}")
|
|
||||||
tm.print_debug(f"done.")
|
|
||||||
|
|
||||||
|
|
||||||
def yamltodict(param_file, silent=True):
|
def yamltodict(param_file, silent=True):
|
||||||
# load of the file
|
# load of the file
|
||||||
with open(param_file, 'r') as fd:
|
with open(param_file, 'r') as fd:
|
||||||
@@ -290,33 +240,6 @@ def yamltodict(param_file, silent=True):
|
|||||||
globdict.global_dict.update(dp)
|
globdict.global_dict.update(dp)
|
||||||
|
|
||||||
|
|
||||||
def jsontodict(param_file, silent=True):
|
|
||||||
with open(param_file, 'r') as fd:
|
|
||||||
s = fd.read()
|
|
||||||
dp = json.loads(s)
|
|
||||||
|
|
||||||
# update the global dict with raw data
|
|
||||||
globdict.global_dict.update(dp)
|
|
||||||
|
|
||||||
# Apply variables expansion
|
|
||||||
for i in range(10):
|
|
||||||
for key, val in dp.items():
|
|
||||||
val = expanse(val)
|
|
||||||
dp.update({key: val})
|
|
||||||
|
|
||||||
if not silent:
|
|
||||||
if not tm.debug_enabled():
|
|
||||||
tm.print_info(f"\"{param_file}\" loaded.")
|
|
||||||
else:
|
|
||||||
tm.print_debug(f"\"{param_file}\" loading:")
|
|
||||||
for k, v in dp.items():
|
|
||||||
tm.print_debug(f" {k}: {v}")
|
|
||||||
tm.print_debug(f"done.")
|
|
||||||
|
|
||||||
# Finalize the global dict update
|
|
||||||
globdict.global_dict.update(dp)
|
|
||||||
|
|
||||||
|
|
||||||
def _feed_gd_with_params(param_file, silent=True):
|
def _feed_gd_with_params(param_file, silent=True):
|
||||||
test_dir = tm.gd('test_directory')
|
test_dir = tm.gd('test_directory')
|
||||||
# param files pre-processing
|
# param files pre-processing
|
||||||
@@ -340,15 +263,11 @@ def _feed_gd_with_params(param_file, silent=True):
|
|||||||
raise ETUMSyntaxError(f'Parameter file "{pf}" not found')
|
raise ETUMSyntaxError(f'Parameter file "{pf}" not found')
|
||||||
|
|
||||||
ext = os.path.splitext(pf)[1]
|
ext = os.path.splitext(pf)[1]
|
||||||
if ext == '.xml':
|
if (ext == '.yaml') or (ext == '.yml'):
|
||||||
xmltodict(pf, silent)
|
|
||||||
elif ext == '.json':
|
|
||||||
jsontodict(pf, silent)
|
|
||||||
elif ext == '.yaml':
|
|
||||||
yamltodict(pf, silent)
|
yamltodict(pf, silent)
|
||||||
else:
|
else:
|
||||||
raise ETUMSyntaxError(
|
raise ETUMSyntaxError(
|
||||||
'config files must be "*.xml", "*.yaml" or "*.json"')
|
'config files must be "*.yaml" or "*.yml"')
|
||||||
|
|
||||||
|
|
||||||
def set_standard_gd_keys(test_name, test_dir, test_file, config_files):
|
def set_standard_gd_keys(test_name, test_dir, test_file, config_files):
|
||||||
|
|||||||
@@ -138,7 +138,7 @@
|
|||||||
|
|
||||||
- py_func:
|
- py_func:
|
||||||
name: Return True expect False but no_fail expansed
|
name: Return True expect False but no_fail expansed
|
||||||
no_fail: @| bool(0) == False |
|
no_fail: $| bool(0) == False |
|
||||||
key: $(test)_PASS
|
key: $(test)_PASS
|
||||||
file: $(test_path)$(psep)results$(psep)results.py
|
file: $(test_path)$(psep)results$(psep)results.py
|
||||||
func_name: echo
|
func_name: echo
|
||||||
@@ -147,7 +147,7 @@
|
|||||||
|
|
||||||
- py_func:
|
- py_func:
|
||||||
name: Return True expect False but no_fail expansed (must fail)
|
name: Return True expect False but no_fail expansed (must fail)
|
||||||
no_fail: @| bool(1) == False |
|
no_fail: $| bool(1) == False |
|
||||||
key: $(test)_FAIL
|
key: $(test)_FAIL
|
||||||
file: $(test_path)$(psep)results$(psep)results.py
|
file: $(test_path)$(psep)results$(psep)results.py
|
||||||
func_name: echo
|
func_name: echo
|
||||||
|
|||||||
@@ -9,4 +9,4 @@ expanse_index_blo: 1
|
|||||||
expanse_index: $(expanse_index_$(expanse_select))
|
expanse_index: $(expanse_index_$(expanse_select))
|
||||||
expanse_table: $(expanse_table_$(expanse_select))
|
expanse_table: $(expanse_table_$(expanse_select))
|
||||||
|
|
||||||
expanse_eval: @|$(expanse_index) == 1|
|
expanse_eval: $|$(expanse_index) == 1|
|
||||||
|
|||||||
@@ -10,10 +10,10 @@
|
|||||||
name: Dynamic variables expansion
|
name: Dynamic variables expansion
|
||||||
key: $(test)_PASS
|
key: $(test)_PASS
|
||||||
values:
|
values:
|
||||||
- expanse_select: @|"$(expanse_select)".replace("o", "a")|
|
- expanse_select: $|"$(expanse_select)".replace("o", "a")|
|
||||||
- expanse_index: $(expanse_index_$(expanse_select))
|
- expanse_index: $(expanse_index_$(expanse_select))
|
||||||
- expanse_table: $(expanse_table_$(expanse_select))
|
- expanse_table: $(expanse_table_$(expanse_select))
|
||||||
- expanse_eval: @|$(expanse_index) == 1|
|
- expanse_eval: $|$(expanse_index) == 1|
|
||||||
|
|
||||||
- check:
|
- check:
|
||||||
name: Check variables expansion is correct (PASS)
|
name: Check variables expansion is correct (PASS)
|
||||||
@@ -33,7 +33,7 @@
|
|||||||
- var4: blo
|
- var4: blo
|
||||||
- expanse_var_bla: 3
|
- expanse_var_bla: 3
|
||||||
- expanse_blo_var: 5
|
- expanse_blo_var: 5
|
||||||
- expanse_complex: @|@|$(expanse_$(var2)_$(var3))*6| + @|4*$($(var1)_$(var4)_$(var2))||
|
- expanse_complex: $|$|$(expanse_$(var2)_$(var3))*6| + $|4*$($(var1)_$(var4)_$(var2))||
|
||||||
|
|
||||||
- check:
|
- check:
|
||||||
name: Check complex variables expansion is correct (PASS)
|
name: Check complex variables expansion is correct (PASS)
|
||||||
@@ -50,10 +50,10 @@
|
|||||||
- expanse_var_2: 6
|
- expanse_var_2: 6
|
||||||
- expanse_object:
|
- expanse_object:
|
||||||
[
|
[
|
||||||
{ a: $(expanse_var_2), $(expanse_key): @|2**3| },
|
{ a: $(expanse_var_2), $(expanse_key): $|2**3| },
|
||||||
{
|
{
|
||||||
'@|"bla".replace("a", "o")|':
|
'$|"bla".replace("a", "o")|':
|
||||||
[@|$(expanse_var)*$(expanse_var_2)|, 25],
|
[$|$(expanse_var)*$(expanse_var_2)|, 25],
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# All sub directory in items are evaluated as a list
|
# All sub directory in items are evaluated as a list
|
||||||
items: @| [os.path.basename(f.path) for f in os.scandir(os.path.join(r"$(test_directory)", "items")) if f.is_dir()] |
|
items: $| [os.path.basename(f.path) for f in os.scandir(os.path.join(r"$(test_directory)", "items")) if f.is_dir()] |
|
||||||
# - common
|
# - common
|
||||||
# - check
|
# - check
|
||||||
# - console
|
# - console
|
||||||
|
|||||||
Reference in New Issue
Block a user