0%

修改peach源码

一、解析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
// Pass 2 - 解析 ConfigModel
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

------------- Thank you for reading -------------

Title - Artist
0:00