public static SequenceGroup LoadSequenceGroup(string seqFilePath, bool forceLoad, IModuleConfigData envInfo) { seqFilePath = ModuleUtils.GetAbsolutePath(seqFilePath, Directory.GetCurrentDirectory()); if (!seqFilePath.EndsWith($".{CommonConst.SequenceFileExtension}")) { I18N i18N = I18N.GetInstance(Constants.I18nName); throw new TestflowDataException(ModuleErrorCode.InvalidFileType, i18N.GetStr("InvalidFileType")); } SequenceGroup sequenceGroup = XmlReaderHelper.ReadSequenceGroup(seqFilePath); // 需要单独配置Setup和TearDown的索引号 sequenceGroup.SetUp.Index = CommonConst.SetupIndex; sequenceGroup.TearDown.Index = CommonConst.TeardownIndex; string paramFilePath = ModuleUtils.GetAbsolutePath(sequenceGroup.Info.SequenceParamFile, seqFilePath); SequenceGroupParameter parameter = XmlReaderHelper.ReadSequenceGroupParameter(paramFilePath); if (!forceLoad && !sequenceGroup.Info.Hash.Equals(parameter.Info.Hash)) { I18N i18N = I18N.GetInstance(Constants.I18nName); throw new TestflowDataException(ModuleErrorCode.UnmatchedFileHash, i18N.GetStr("UnmatchedHash")); } sequenceGroup.Parameters = parameter; SetParameterToSequenceData(sequenceGroup, parameter); ValidateTypeDatas(sequenceGroup); sequenceGroup.Info.SequenceGroupFile = seqFilePath; sequenceGroup.Info.SequenceParamFile = paramFilePath; return(sequenceGroup); }
public static void Serialize(string filePath, SequenceGroup sequenceGroup) { filePath = ModuleUtils.GetAbsolutePath(filePath, Directory.GetCurrentDirectory()); VerifySequenceData(sequenceGroup); sequenceGroup.Info.SequenceGroupFile = filePath; sequenceGroup.Info.SequenceParamFile = ModuleUtils.GetParameterFilePath(filePath); SequenceGroupParameter parameter = new SequenceGroupParameter(); parameter.Initialize(sequenceGroup); // 将SequeneGroup配置的参数写入ParameterData中,用以序列化 FillParameterDataToSequenceData(sequenceGroup, parameter); List <string> serialziedFileList = new List <string>(20); try { serialziedFileList.Add(filePath); XmlWriterHelper.Write(sequenceGroup, sequenceGroup.Info.SequenceGroupFile); serialziedFileList.Add(sequenceGroup.Info.SequenceParamFile); XmlWriterHelper.Write(parameter, sequenceGroup.Info.SequenceParamFile); } catch (IOException ex) { RollBackFilesIfFailed(serialziedFileList); throw new TestflowRuntimeException(ModuleErrorCode.SerializeFailed, ex.Message, ex); } catch (ApplicationException) { RollBackFilesIfFailed(serialziedFileList); throw; } }
public void TestXmlReadSequenceGroupParameter() { SequenceGroup sequenceGroup = XmlReaderHelper.ReadSequenceGroup(SequenceGroupPath); SequenceGroupParameter parameter = XmlReaderHelper.ReadSequenceGroupParameter(ParameterPath); Assert.AreEqual(parameter.Info.Version, "1.0.0"); Assert.AreEqual(parameter.Info.Hash, sequenceGroup.Info.Hash); Assert.AreEqual(parameter.SequenceParameters.Count, 3); Assert.AreEqual(parameter.SequenceParameters[0].StepParameters.Count, 3); Assert.AreEqual(parameter.SequenceParameters[0].StepParameters[0].Instance, "Variable1"); Assert.AreEqual(parameter.SequenceParameters[0].StepParameters[0].Return, "Variable3"); }
public static void LoadParameter(SequenceGroup sequenceGroup, string filePath, bool forceLoad) { filePath = ModuleUtils.GetAbsolutePath(filePath, Directory.GetCurrentDirectory()); SequenceGroupParameter parameter = XmlReaderHelper.ReadSequenceGroupParameter(filePath); if (!forceLoad && !sequenceGroup.Info.Hash.Equals(parameter.Info.Hash)) { I18N i18N = I18N.GetInstance(Constants.I18nName); throw new TestflowDataException(ModuleErrorCode.UnmatchedFileHash, i18N.GetStr("UnmatchedHash")); } sequenceGroup.Parameters = parameter; SetParameterToSequenceData(sequenceGroup, parameter); ValidateTypeDatas(sequenceGroup); }
public static void Serialize(string seqFilePath, SequenceGroup sequenceGroup) { VerifySequenceData(sequenceGroup); string paramFilePath = ModuleUtils.GetParameterFilePath(seqFilePath); SequenceGroupParameter parameter = new SequenceGroupParameter(); parameter.Initialize(sequenceGroup); // 将SequeneGroup配置的参数写入ParameterData中,用以序列化 FillParameterDataToSequenceData(sequenceGroup, parameter); sequenceGroup.RefreshSignature(); parameter.RefreshSignature(sequenceGroup); List <string> serializedFileList = new List <string>(20); try { // 暂时修改序列组文件路径为相对路径 sequenceGroup.Info.SequenceGroupFile = ModuleUtils.GetFileName(seqFilePath); sequenceGroup.Info.SequenceParamFile = ModuleUtils.GetRelativePath(paramFilePath, seqFilePath); BackupExistFile(seqFilePath, paramFilePath); serializedFileList.Add(seqFilePath); XmlWriterHelper.Write(sequenceGroup, seqFilePath); serializedFileList.Add(paramFilePath); XmlWriterHelper.Write(parameter, paramFilePath); DeleteBackupFile(seqFilePath, paramFilePath); } catch (IOException ex) { RollBackFilesIfFailed(serializedFileList); throw new TestflowRuntimeException(ModuleErrorCode.SerializeFailed, ex.Message, ex); } catch (ApplicationException) { RollBackFilesIfFailed(serializedFileList); throw; } finally { // 恢复序列文件的绝对路径 sequenceGroup.Info.SequenceGroupFile = seqFilePath; sequenceGroup.Info.SequenceParamFile = paramFilePath; } }
public static SequenceGroupParameter ReadSequenceGroupParameter(string filePath) { if (!filePath.EndsWith($".{CommonConst.SequenceDataFileExtension}")) { I18N i18N = I18N.GetInstance(Constants.I18nName); throw new TestflowDataException(ModuleErrorCode.InvalidFileType, i18N.GetStr("InvalidFileType")); } XmlReader reader = null; try { reader = CreateXmlReader(filePath); Dictionary <string, Type> typeMapping = GetTypeMapping(); // 找到TestProject节点后跳出 while (reader.Read()) { if (XmlNodeType.Element != reader.NodeType) { continue; } if (typeof(SequenceGroupParameter).Name.Equals(reader.Name)) { break; } } SequenceGroupParameter parameter = new SequenceGroupParameter(); FillDataToObject(reader, parameter, typeMapping); return(parameter); } catch (ArgumentException ex) { ILogService logService = TestflowRunner.GetInstance().LogService; logService.Print(LogLevel.Error, CommonConst.PlatformLogSession, 0, ex); throw new TestflowDataException(ModuleErrorCode.DeSerializeFailed, ex.Message, ex); } catch (IOException ex) { ILogService logService = TestflowRunner.GetInstance().LogService; logService.Print(LogLevel.Error, CommonConst.PlatformLogSession, 0, ex); throw new TestflowRuntimeException(ModuleErrorCode.DeSerializeFailed, ex.Message, ex); } finally { reader?.Close(); } }
public static void Serialize(string filePath, TestProject testProject) { filePath = ModuleUtils.GetAbsolutePath(filePath, Directory.GetCurrentDirectory()); VerifySequenceData(testProject); List <string> serialziedFileList = new List <string>(10); try { // 初始化各个SequenceGroup的文件位置信息 InitSequenceGroupLocations(testProject, filePath); serialziedFileList.Add(filePath); XmlWriterHelper.Write(testProject, filePath); // 将testProject当前配置的数据信息写入ParameterData中 FillParameterDataToSequenceData(testProject); for (int i = 0; i < testProject.SequenceGroups.Count; i++) { SequenceGroup sequenceGroup = testProject.SequenceGroups[i] as SequenceGroup; string sequenceGroupPath = ModuleUtils.GetAbsolutePath(sequenceGroup.Info.SequenceGroupFile, filePath); string parameterFilePath = ModuleUtils.GetAbsolutePath(sequenceGroup.Info.SequenceParamFile, sequenceGroupPath);; if (!ModuleUtils.IsValidFilePath(sequenceGroupPath)) { sequenceGroupPath = ModuleUtils.GetSequenceGroupPath(filePath, i); sequenceGroup.Info.SequenceGroupFile = ModuleUtils.GetRelativePath(sequenceGroupPath, filePath); parameterFilePath = ModuleUtils.GetParameterFilePath(sequenceGroupPath); sequenceGroup.Info.SequenceParamFile = ModuleUtils.GetRelativePath(parameterFilePath, sequenceGroupPath); } else if (!ModuleUtils.IsValidFilePath(parameterFilePath)) { parameterFilePath = ModuleUtils.GetParameterFilePath(sequenceGroupPath); sequenceGroup.Info.SequenceParamFile = ModuleUtils.GetRelativePath(parameterFilePath, sequenceGroupPath); } SequenceGroupParameter parameter = new SequenceGroupParameter(); parameter.Initialize(sequenceGroup); // 将SequeneGroup配置的参数写入ParameterData中,用以序列化 FillParameterDataToSequenceData(sequenceGroup, parameter); sequenceGroup.RefreshSignature(); parameter.RefreshSignature(sequenceGroup); // 创建sequenceGroupd的文件夹 string directory = ModuleUtils.GetSequenceGroupDirectory(sequenceGroupPath); if (!Directory.Exists(directory)) { Directory.CreateDirectory(directory); } serialziedFileList.Add(sequenceGroupPath); XmlWriterHelper.Write(sequenceGroup, sequenceGroupPath); serialziedFileList.Add(parameterFilePath); XmlWriterHelper.Write(parameter, parameterFilePath); } } catch (IOException ex) { RollBackFilesIfFailed(serialziedFileList); throw new TestflowRuntimeException(ModuleErrorCode.SerializeFailed, ex.Message, ex); } catch (ApplicationException) { RollBackFilesIfFailed(serialziedFileList); throw; } }