#!/usr/bin/python # -*- coding: utf-8 -*- # --------------------------------------------------------------------------------------------------------- # Author : Ulrich Carmesin # Source : gitea.ucarmesin.de # --------------------------------------------------------------------------------------------------------- """ this module implements the functionality of a test-step which is defined in the test-specification and is executed by any executer there are 2 kinds of test-step a) execute specific component in the job b) execute specific test-entity in the test-suite-execution """ import basic.constants as B import utils.data_const as D import utils.i18n_tool LIST_ARGS = [ "start", # for starting the specified main-program "fct" # for calling the specified component-function ] class Step: comp = "" refLine = "" # in a: references the data-line(s) to be executed execStep = "" # in a,b: executes only if the step is set in the job args = {} """ the class contains each attribute of a test-step * comp : the component which implements the step * refLine : reference to data-lines which has to be executed + execStep : """ def __init__(self): self.comp = "" self.refLine = "" self.execStep = "" self.variante = "" self.args = {} def getStepText(self, job): text = self.comp+D.CSV_DELIMITER+str(self.execStep)+D.CSV_DELIMITER+self.refLine for k in self.args: text += D.CSV_DELIMITER+k+":"+self.args[k] return text+"\n" def parseStep(job, fields): step = Step() step.comp = fields[D.STEP_COMP_I] step.execStep = fields[D.STEP_EXECNR_I] step.refLine = fields[D.STEP_REFNR_I] step.variante = fields[D.STEP_VARIANT_I] setattr(step, B.ATTR_DATA_REF, step.refLine) i = 0 if D.STEP_ARGS_I == D.STEP_LIST_I: args = "" for i in range(D.STEP_ARGS_I, len(fields)): if len(fields[i]) < 1: continue if fields[i][0:1] == "#": continue args += "," + fields[i] args = args[1:] else: i = D.STEP_ARGS_I args = fields[D.STEP_ARGS_I] a = args.split(",") for arg in a: print("arg " + arg) b = arg.split(":") if len(b) < 2: raise Exception(D.EXCP_MALFORMAT + " in arg["+str(i)+ "] " + str(fields)) step.args[b[0]] = b[1] if b[0] in LIST_ARGS: setattr(step, b[0], b[1]) i += 1 # data[B.DATA_NODE_STEPS].append(step) return step def getStepHeader(job): text = "# " text += utils.i18n_tool.I18n.getInstance(job).getText(f"{D.CSV_BLOCK_STEP=}", job) text += ";"+utils.i18n_tool.I18n.getInstance(job).getText(f"{D.STEP_ATTR_COMP=}", job) text += ";"+utils.i18n_tool.I18n.getInstance(job).getText(f"{D.STEP_ATTR_EXECNR=}", job) text += ";"+utils.i18n_tool.I18n.getInstance(job).getText(f"{D.STEP_ATTR_REFNR=}", job) text += ";"+utils.i18n_tool.I18n.getInstance(job).getText(f"{D.STEP_ATTR_ARGS=}", job) return text + ";..;;;\n"