Exemple #1
0
        public static string GetRuntimeVariableString(WatchDataObject watchDataObj, ISequenceFlowContainer sequenceData)
        {
            const char delim = '.';

            string[]  watchElem     = watchDataObj.WatchData.Split(delim);
            string    variableName  = watchElem[0];
            int       sequenceIndex = watchDataObj.Sequence;
            IVariable variable      = null;

            if (sequenceData is ITestProject)
            {
                ITestProject testProject = sequenceData as ITestProject;
                if (watchDataObj.Session == CommonConst.TestGroupSession)
                {
                    variable = GetVariableByNameAndSequence(testProject, sequenceIndex, variableName);
                }
                else
                {
                    variable = GetVariableByNameAndSequence(testProject.SequenceGroups[watchDataObj.Session],
                                                            sequenceIndex, variableName);
                }
            }
            else if (sequenceData is ISequenceGroup)
            {
                ISequenceGroup sequenceGroup = sequenceData as ISequenceGroup;
                variable = GetVariableByNameAndSequence(sequenceGroup, sequenceIndex, variableName);
            }
            if (null == variable)
            {
                return(null);
            }
            watchElem[0] = CoreUtils.GetRuntimeVariableName(watchDataObj.Session, variable);
            return(string.Join(delim.ToString(), watchElem));
        }
Exemple #2
0
        private static ISequence GetSequence(ISequenceGroup sequenceGroup, int index)
        {
            ISequence sequence;

            switch (index)
            {
            case CommonConst.SetupIndex:
                sequence = sequenceGroup.SetUp;
                break;

            case CommonConst.TeardownIndex:
                sequence = sequenceGroup.TearDown;
                break;

            default:
                if (sequenceGroup.Sequences.Count <= index || index < 0)
                {
                    I18N i18N = I18N.GetInstance(UtilityConstants.UtilsName);
                    throw new TestflowDataException(ModuleErrorCode.SequenceDataError,
                                                    i18N.GetStr("CannotFindSequence"));
                }
                sequence = sequenceGroup.Sequences[index];
                break;
            }
            return(sequence);
        }
        private IList <ITypeData> GetCallBackRelatedType(ISequenceGroup sequenceGroup)
        {
            HashSet <ITypeData> typeDatas = new HashSet <ITypeData>();

            AddCallBackRelatedType(sequenceGroup, typeDatas);
            return(typeDatas.ToArray());
        }
        public void Initialize(ISequenceFlowContainer sequenceData)
        {
            if (sequenceData is ITestProject)
            {
                ITestProject            testProject             = (ITestProject)sequenceData;
                IList <ITypeData>       callBackRelatedType     = GetCallBackRelatedType(testProject);
                IList <IAssemblyInfo>[] assemblyInfoCollections = new IList <IAssemblyInfo> [testProject.SequenceGroups.Count + 1];
                IList <IAssemblyInfo>   callBackRelatedAssembly = GetCallBackRelatedAssembly(callBackRelatedType, assemblyInfoCollections);
                //AssemblyInvoker加载程序集和类型
                _typeInvoker = new AssemblyInvoker(_globalInfo, callBackRelatedAssembly, callBackRelatedType);
                _typeInvoker.LoadAssemblyAndType();

                foreach (ISequenceGroup sequenceGroup in testProject.SequenceGroups)
                {
                    SequenceGroupFindCallBack(sequenceGroup);
                }
            }
            else
            {
                ISequenceGroup        sequenceGroup           = (ISequenceGroup)sequenceData;
                IList <ITypeData>     callBackRelatedType     = GetCallBackRelatedType(sequenceGroup);
                IList <IAssemblyInfo> callBackRelatedAssembly = GetCallBackRelatedAssembly(callBackRelatedType,
                                                                                           sequenceGroup.Assemblies);
                //AssemblyInvoker加载程序集和类型
                _typeInvoker = new AssemblyInvoker(_globalInfo, callBackRelatedAssembly, callBackRelatedType);
                _typeInvoker.LoadAssemblyAndType();
                SequenceGroupFindCallBack(sequenceGroup);
            }
        }
Exemple #5
0
        public void LoadParameter(ISequenceGroup sequenceGroup, bool forceLoad, params string[] param)
        {
            SequenceGroup sequenceGroupObj = sequenceGroup as SequenceGroup;

            sequenceGroupObj.RefreshSignature();
            SequenceDeserializer.LoadParameter(sequenceGroupObj, param[0], forceLoad);
        }
Exemple #6
0
        public static IVariable GetVariable(ISequenceGroup sequenceGroup, string runtimeVariable)
        {
            string[]            variableElement = runtimeVariable.Split(VarNameDelim.ToCharArray());
            IVariableCollection varCollection   = null;

            if (2 == variableElement.Length)
            {
                varCollection = sequenceGroup.Variables;
            }
            else if (3 == variableElement.Length)
            {
                int sequenceIndex = int.Parse(variableElement[1]);
                if (sequenceIndex == CommonConst.SetupIndex)
                {
                    varCollection = sequenceGroup.SetUp.Variables;
                }
                else if (sequenceIndex == CommonConst.TeardownIndex)
                {
                    varCollection = sequenceGroup.TearDown.Variables;
                }
                else
                {
                    varCollection = sequenceGroup.Sequences[sequenceIndex].Variables;
                }
            }
            return(varCollection.FirstOrDefault(item => item.Name.Equals(variableElement[variableElement.Length - 1])));
        }
Exemple #7
0
        public IDesignTimeSession RemoveSequenceGroup(string name, string description)
        {
            ISequenceGroup sequenceGroup = TestProject.SequenceGroups.FirstOrDefault(item => item.Name.Equals(name) && item.Description.Equals(description));

            //可能传入null,没关系,同样报错
            return(RemoveSequenceGroup(sequenceGroup));
        }
Exemple #8
0
 public void ValidateSequenceData(ISequenceGroup sequenceGroup, ITestProject parent = null)
 {
     ModuleUtils.ValidateParent(sequenceGroup, parent);
     _typeMaintainer.VerifyVariableTypes(sequenceGroup);
     _typeMaintainer.RefreshUsedAssemblyAndType(sequenceGroup);
     ((SequenceGroup)sequenceGroup).RefreshSignature();
 }
Exemple #9
0
 private static bool HasVariableInSequence(ISequenceFlowContainer sequenceData, string variable)
 {
     if (null == sequenceData)
     {
         return(false);
     }
     if (sequenceData is ISequence)
     {
         ISequence sequence = sequenceData as ISequence;
         // 如果存在则返回true
         if (sequence.Variables.Any(item => item.Name.Equals(variable)))
         {
             return(true);
         }
         // 不存在时向上级查找
         return(HasVariableInSequence(sequence.Parent, variable));
     }
     else if (sequenceData is ISequenceGroup)
     {
         ISequenceGroup sequenceGroup = sequenceData as ISequenceGroup;
         return(sequenceGroup.Variables.Any(item => item.Name.Equals(variable)));
     }
     else if (sequenceData is ITestProject)
     {
         ITestProject testProject = sequenceData as ITestProject;
         return(testProject.Variables.Any(item => item.Name.Equals(variable)));
     }
     return(false);
 }
Exemple #10
0
        public VariableMapper(SlaveContext context)
        {
            ISequenceFlowContainer sequenceData = context.Sequence;

            this._variables     = new Dictionary <string, object>(512);
            this._keyVariables  = new HashSet <string>();
            this._syncVariables = new HashSet <string>();
            this._context       = context;
            _fullTraceVariables = new List <string>(Constants.DefaultRuntimeSize);
            if (context.SequenceType == RunnerType.TestProject)
            {
                ITestProject testProject = (ITestProject)sequenceData;
                AddVariables(testProject.Variables, false);
                AddVariables(testProject.SetUp.Variables, false);
                AddVariables(testProject.TearDown.Variables, false);
            }
            else
            {
                bool           addSessionVarToSyncSet = ExecutionModel.ParallelExecution == context.ExecutionModel;
                ISequenceGroup sequenceGroup          = (ISequenceGroup)sequenceData;
                AddVariables(sequenceGroup.Variables, addSessionVarToSyncSet);
                AddVariables(sequenceGroup.SetUp.Variables, false);
                AddVariables(sequenceGroup.TearDown.Variables, false);
                foreach (ISequence sequence in sequenceGroup.Sequences)
                {
                    AddVariables(sequence.Variables, false);
                }
            }
            this._keyVarLock  = new SpinLock(false);
            this._syncVarLock = new ReaderWriterLockSlim();
        }
Exemple #11
0
        public static CallStack GetStack(ISequenceStep step)
        {
            CallStack callStack = new CallStack();

            ISequence      sequence      = null;
            ISequenceGroup sequenceGroup = null;

            while (null != step)
            {
                callStack.StepStack.Add(step.Index);
                ISequenceFlowContainer parent = step.Parent;
                if (parent is ISequence)
                {
                    sequence = parent as ISequence;
                }
                step = parent as ISequenceStep;
            }
            if (null == sequence)
            {
                return(callStack);
            }
            callStack.Session = sequence.Index;
            sequenceGroup     = sequence.Parent as ISequenceGroup;
            if (!(sequenceGroup?.Parent is ITestProject))
            {
                return(callStack);
            }
            ITestProject testProject = (ITestProject)sequenceGroup.Parent;

            callStack.SessionIndex = testProject.SequenceGroups.IndexOf(sequenceGroup);
            return(callStack);
        }
Exemple #12
0
 /// <summary>
 /// 初始化变量和参数的类型数据
 /// </summary>
 public bool VerifyVariableType(ISequenceFlowContainer flowContainer, IVariable variable, TypeDataCollection typeDatas)
 {
     if (flowContainer is ITestProject)
     {
         ITestProject testProject = flowContainer as ITestProject;
         return(VerifyVariableInSequence(testProject.SetUp, variable, typeDatas) ||
                VerifyVariableInSequence(testProject.TearDown, variable, typeDatas));
     }
     else if (flowContainer is ISequenceGroup)
     {
         ISequenceGroup sequenceGroup = flowContainer as ISequenceGroup;
         if (VerifyVariableInSequence(sequenceGroup.SetUp, variable, typeDatas) ||
             VerifyVariableInSequence(sequenceGroup.TearDown, variable, typeDatas))
         {
             return(true);
         }
         return(sequenceGroup.Sequences.Any(sequence => VerifyVariableInSequence(sequence, variable, typeDatas)));
     }
     else if (flowContainer is ISequence)
     {
         return(VerifyVariableInSequence(flowContainer as ISequence, variable, typeDatas));
     }
     else if (flowContainer is ISequenceStep)
     {
         return(VerifyVariableInSequenceStep(flowContainer as ISequenceStep, variable, typeDatas));
     }
     return(false);
 }
Exemple #13
0
        public SessionTaskEntity(SlaveContext context)
        {
            this._context = context;

            ISequenceFlowContainer sequenceData = _context.Sequence;

            switch (context.SequenceType)
            {
            case RunnerType.TestProject:
                ITestProject testProject = (ITestProject)sequenceData;
                _setUp            = new SequenceTaskEntity(testProject.SetUp, _context);
                _tearDown         = new SequenceTaskEntity(testProject.TearDown, _context);
                _sequenceEntities = new List <SequenceTaskEntity>(1);
                break;

            case RunnerType.SequenceGroup:
                ISequenceGroup sequenceGroup = (ISequenceGroup)sequenceData;
                _setUp            = new SequenceTaskEntity(sequenceGroup.SetUp, _context);
                _tearDown         = new SequenceTaskEntity(sequenceGroup.TearDown, _context);
                _sequenceEntities = new List <SequenceTaskEntity>(sequenceGroup.Sequences.Count);
                foreach (ISequence sequence in sequenceGroup.Sequences)
                {
                    _sequenceEntities.Add(new SequenceTaskEntity(sequence, _context));
                }
                break;

            default:
                throw new InvalidOperationException();
            }
        }
Exemple #14
0
        private static void InitSequenceGroupLocations(TestProject testProject, string testProjectPath)
        {
            testProject.SequenceGroupLocations.Clear();
            ISequenceGroupCollection sequenceGroups = testProject.SequenceGroups;

            for (int i = 0; i < sequenceGroups.Count; i++)
            {
                ISequenceGroup sequenceGroup     = sequenceGroups[i];
                string         sequenceGroupPath = ModuleUtils.GetAbsolutePath(sequenceGroup.Info.SequenceGroupFile,
                                                                               testProjectPath);
                string parameterPath = ModuleUtils.GetAbsolutePath(sequenceGroup.Info.SequenceParamFile,
                                                                   testProjectPath);
                if (!ModuleUtils.IsValidFilePath(sequenceGroupPath))
                {
                    sequenceGroupPath = ModuleUtils.GetSequenceGroupPath(testProjectPath, i);
                    parameterPath     = ModuleUtils.GetParameterFilePath(sequenceGroupPath);
                    sequenceGroup.Info.SequenceGroupFile = ModuleUtils.GetRelativePath(sequenceGroupPath, testProjectPath);
                    sequenceGroup.Info.SequenceParamFile = ModuleUtils.GetRelativePath(parameterPath, sequenceGroupPath);
                }
                else if (!ModuleUtils.IsValidFilePath(sequenceGroup.Info.SequenceParamFile))
                {
                    parameterPath = ModuleUtils.GetParameterFilePath(sequenceGroupPath);
                    sequenceGroup.Info.SequenceParamFile = ModuleUtils.GetRelativePath(parameterPath, sequenceGroupPath);
                }
                SequenceGroupLocationInfo locationInfo = new SequenceGroupLocationInfo()
                {
                    Name              = sequenceGroup.Name,
                    SequenceFilePath  = sequenceGroup.Info.SequenceGroupFile,
                    ParameterFilePath = sequenceGroup.Info.SequenceParamFile
                };
                testProject.SequenceGroupLocations.Add(locationInfo);
            }
        }
        public void Initialize(ISequenceFlowContainer flowContainer)
        {
            ISequenceGroup sequenceGroup = flowContainer as ISequenceGroup;

            this.Info.Hash = sequenceGroup.Info.Hash;
            this.Info.Modified = true;
            this.Info.ModifiedTime = DateTime.Now;
            this.Info.Path = sequenceGroup.Info.SequenceParamFile;
            this.Info.Version = sequenceGroup.Info.Version;
            this.VariableValues = new VariableInitValueCollection();

            foreach (IVariable variable in sequenceGroup.Variables)
            {
                VariableInitValue variableInitValue = new VariableInitValue()
                {
                    Name = variable.Name
                };
                variableInitValue.Initialize(variable);
                this.VariableValues.Add(variableInitValue);
            }

            this.SetUpParameters = new SequenceParameter();
            this.SetUpParameters.Initialize(sequenceGroup.SetUp);

            this.SequenceParameters = new SequenceParameterCollection();
            foreach (ISequence sequence in sequenceGroup.Sequences)
            {
                SequenceParameter parameter = new SequenceParameter();
                parameter.Initialize(sequence);
                SequenceParameters.Add(parameter);
            }

            this.TearDownParameters = new SequenceParameter();
            this.TearDownParameters.Initialize(sequenceGroup.TearDown);
        }
Exemple #16
0
        public ITestProject GetCallBackTestProjectData2()
        {
            ITestProject testProject = _sequenceManager.CreateTestProject();

            //testProject.SetUp.Steps.Add(CreateStaticWaitStep());
            //testProject.TearDown.Steps.Add(CreateStaticWaitStep());
            _sequenceManager.ValidateSequenceData(testProject);

            ISequenceGroup sequenceGroup = _sequenceManager.CreateSequenceGroup();

            sequenceGroup.ExecutionModel = ExecutionModel.SequentialExecution;
            sequenceGroup.Description    = "SequenceGroup Description";

            ISequence sequence1 = _sequenceManager.CreateSequence();

            sequence1.Behavior    = RunBehavior.Normal;
            sequence1.Description = "Sequence Description";

            sequence1.Steps.Add(CreateCallBackStep(100, 200));
            sequenceGroup.Sequences.Add(sequence1);
            _sequenceManager.ValidateSequenceData(sequenceGroup, testProject);

            testProject.SequenceGroups.Add(sequenceGroup);
            return(testProject);
        }
Exemple #17
0
 internal static IVariable FindVariableInSequenceGroup(string varName, ISequenceGroup sequenceGroup)
 {
     foreach (IVariable variable in sequenceGroup.Variables)
     {
         if (variable.Name.Equals(varName))
         {
             return(variable);
         }
     }
     foreach (IVariable variable in sequenceGroup.SetUp.Variables)
     {
         if (variable.Name.Equals(varName))
         {
             return(variable);
         }
     }
     foreach (IVariable variable in sequenceGroup.TearDown.Variables)
     {
         if (variable.Name.Equals(varName))
         {
             return(variable);
         }
     }
     foreach (ISequence sequence in sequenceGroup.Sequences)
     {
         foreach (IVariable variable in sequence.Variables)
         {
             if (variable.Name.Equals(varName))
             {
                 return(variable);
             }
         }
     }
     return(null);
 }
Exemple #18
0
 public static int GetSessionId(ITestProject testProject, ISequenceGroup sequenceGroup)
 {
     if (null == testProject)
     {
         return(0);
     }
     return(testProject.SequenceGroups.IndexOf(sequenceGroup));
 }
 private void AddCallBackRelatedType(ISequenceGroup sequenceGroup, HashSet <ITypeData> typeDatas)
 {
     AddCallBackRelatedType(sequenceGroup.SetUp, typeDatas);
     foreach (ISequence sequence in sequenceGroup.Sequences)
     {
         AddCallBackRelatedType(sequence, typeDatas);
     }
     AddCallBackRelatedType(sequenceGroup.TearDown, typeDatas);
 }
 private void SequenceGroupFindCallBack(ISequenceGroup sequenceGroup)
 {
     StepCollectionFindCallBack(sequenceGroup.SetUp.Steps);
     StepCollectionFindCallBack(sequenceGroup.TearDown.Steps);
     foreach (ISequence sequence in sequenceGroup.Sequences)
     {
         StepCollectionFindCallBack(sequence.Steps);
     }
 }
Exemple #21
0
        public void SequenceGroupDeserialize()
        {
            ISequenceGroup sequenceGroup = _sequenceManager.LoadSequenceGroup(SerializationTarget.File, SequenceGroupPath);

            Assert.AreEqual(sequenceGroup.Sequences[0].Steps[0].Function.ClassType, sequenceGroup.TypeDatas[0]);
            Assert.AreEqual(sequenceGroup.Sequences[0].Steps[0].Function.ReturnType.Type, sequenceGroup.TypeDatas[2]);
            Assert.AreEqual(sequenceGroup.Sequences[0].Steps[0].Function.ParameterType[0].Type, sequenceGroup.TypeDatas[2]);
            Assert.AreEqual(sequenceGroup.Sequences[0].Steps[0].Function.ParameterType[1].Type, sequenceGroup.TypeDatas[2]);
        }
 public void Add(ISequenceGroup item)
 {
     if (_innerCollection.Contains(item))
     {
         return;
     }
     ModuleUtils.SetElementName(item, this);
     this._innerCollection.Add(item);
 }
Exemple #23
0
        public IDesignTimeSession AddSequenceGroup(string name, string description)
        {
            //添加到TestProject
            ISequenceGroup sequenceGroup = _sequenceManager.CreateSequenceGroup();

            sequenceGroup.Name        = name;
            sequenceGroup.Description = description;
            return(AddSequenceGroup(sequenceGroup));
        }
Exemple #24
0
 public ITestProject Load(string name, string description, ISequenceGroup sequenceGroup)
 {
     TestProject             = _sequenceManager.CreateTestProject();
     TestProject.Name        = name;
     TestProject.Description = description;
     sequenceGroup.Parent    = TestProject;
     AddSequenceGroup(sequenceGroup);
     return(TestProject);
 }
 public void Insert(int index, ISequenceGroup item)
 {
     if (_innerCollection.Contains(item))
     {
         return;
     }
     ModuleUtils.SetElementName(item, this);
     _innerCollection.Insert(index, item);
 }
Exemple #26
0
        public void SequenceTest()
        {
            TestflowRunner   runnerInstance  = TestflowRunner.GetInstance();
            ISequenceManager sequenceManager = runnerInstance.SequenceManager;
            ISequenceGroup   sequenceGroup   = sequenceManager.LoadSequenceGroup(SerializationTarget.File,
                                                                                 @"C:\Users\jingtao\Desktop\sequence.tfseq");

            runnerInstance.EngineController.SetSequenceData(sequenceGroup);
            runnerInstance.EngineController.Start();
        }
Exemple #27
0
 public static void ValidateParent(ISequenceGroup seuquenceGroup, ISequenceFlowContainer parent)
 {
     seuquenceGroup.Parent = parent;
     ValidateParent(seuquenceGroup.Variables, seuquenceGroup);
     ValidateParent(seuquenceGroup.SetUp, seuquenceGroup);
     foreach (ISequence sequence in seuquenceGroup.Sequences)
     {
         ValidateParent(sequence, seuquenceGroup);
     }
     ValidateParent(seuquenceGroup.TearDown, seuquenceGroup);
 }
Exemple #28
0
 private static void ValidateTypeDatas(ISequenceGroup sequenceGroup)
 {
     ValidateTypeDatas(sequenceGroup.Arguments, sequenceGroup.TypeDatas);
     ValidateTypeDatas(sequenceGroup.Variables, sequenceGroup.TypeDatas);
     ValidateTypeDatas(sequenceGroup.SetUp, sequenceGroup.TypeDatas);
     foreach (ISequence sequence in sequenceGroup.Sequences)
     {
         ValidateTypeDatas(sequence, sequenceGroup.TypeDatas);
     }
     ValidateTypeDatas(sequenceGroup.TearDown, sequenceGroup.TypeDatas);
 }
        public DesignTimeContext(ISequenceGroup sequenceGroup)
        {
            //被DesignTimeService加减component
            Components = new Dictionary <string, IComInterfaceDescription>(Constants.DefaultCompCollectionSize);

            this.SequenceGroup = sequenceGroup;
            this.TestProject   = (ITestProject)sequenceGroup.Parent;
            this.Name          = sequenceGroup.Name + " Context";

            //todo _interfaceManager.GetComponenetInterfaces => foreach(){addDictioneary}
        }
Exemple #30
0
        /// <summary>
        /// 校验Sequence模块的参数配置正确性
        /// </summary>
        /// <param name="sequenceGroup">待校验的序列组</param>
        /// <param name="sequence">待校验的序列</param>
        /// <returns>检查过程中出现的告警信息</returns>
        public IList <IWarningInfo> CheckParameters(ISequenceGroup sequenceGroup, ISequence sequence, bool overwriteType)
        {
            IList <IWarningInfo> warnList = CheckSteps(sequence.Steps, overwriteType, new ISequenceFlowContainer[] { sequence, sequenceGroup });

            foreach (IWarningInfo warnInfo in warnList)
            {
                warnInfo.Sequence      = sequence;
                warnInfo.SequenceGroup = sequenceGroup;
            }
            return(warnList);
        }