一、解析xml到dom
1、任何元素节点都要定义一个类,在Dom文件夹下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| namespace Peach.Core.Dom { [PitParsable("Field")] public class Field : DataElement { public Field(string name) : base(name) { }
public static DataElement PitParser(PitParser context, XmlNode node, DataElementContainer parent) { var fieldName = node.getAttrString("name"); var fieldValue = node.getAttrString("value");
var field = new Field(fieldName); field.DefaultValue = new Variant(fieldValue);
return field; } } }
|
最重要的就是标记能被解析到,然后有个解析函数PitParser
2、PitParser解析,在Peach.Core.Analyzers
1 2
| dataModelPitParsable["DataModel"] = typeof(DataModel); dataElementPitParsable["Field"] = typeof(Field);
|
主要就是存储元素节点的字典,根据name获取解析方法解析。
然后,在handlePeach函数中添加相应节点的处理逻辑
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| foreach (XmlNode child in node.ChildNodes) { if (child.Name == "ConfigModel") { var config = handleConfigModel(child, null); if (config != null) { try { dom.confcigModels.Add(config.name, config); } catch (ArgumentException) { var entry = dataModelPitParsable.Where(kv => kv.Value == config.GetType()).Select(kv => kv.Key).FirstOrDefault(); var name = entry != null ? "<" + entry + ">" : "Config Model"; throw new PeachException("Error, a " + name + " element named '" + config.name + "' already exists."); } } } }
|
其中,dom类中需要增加相应变量的支持,比如confcigModels集合
Dom:
- Dom 是整个解析后的文档对象模型,包含所有的顶级元素,例如 StateModel、Agent、Publisher 等。
- 它是全局的,存储了所有解析后的对象。
Test:
- Test 是 Dom 的一个子集,表示一个具体的测试配置。
- 它引用了 Dom 中的某些对象(如 StateModel 和 Publisher),并将它们存储在自己的上下文中。
想解析存储到test中时,test类中也要有相应变量的支持。
二、测试引擎engine