我有以下XML代码(这是jmeter负载测试的脚本),例如:
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true">
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
<elementProp name="ThreadGroup.main_controller" elementType="LoopController">
<boolProp name="LoopController.continue_forever">false</boolProp>
<stringProp name="LoopController.loops">10</stringProp>
</elementProp>
<intProp name="ThreadGroup.num_threads">1000</intProp>
<intProp name="ThreadGroup.ramp_time">1</intProp>
<longProp name="ThreadGroup.start_time">1363247040000</longProp>
<longProp name="ThreadGroup.end_time">1363247040000</longProp>
<boolProp name="ThreadGroup.scheduler">false</boolProp>
<longProp name="ThreadGroup.duration">0</longProp>
<longProp name="ThreadGroup.delay">0</longProp>
</ThreadGroup>
我希望更改动态值的常量值(如现在 - 10和1000)中命名为 LoopController.loops 和 ThreadGroup.num_threads 的参数(例如10 + 10和1000 + 100)循环。
我是Python的新手,对不起。
提前谢谢。
答案 0 :(得分:0)
目前还不清楚您想要做什么,但此解决方案使用lxml
库来解析您的示例XML数据并进行您描述的更改。
XPath表达式//*
只是查找数据中的每个元素,后续的for
循环检查找到的每个元素的name
属性,看它是否是那些想要的元素之一。如果匹配,则text
属性将更改为您描述的值。显然,您喜欢的任何字符串都可以放在这里。
from lxml import etree
parser = etree.XMLParser(remove_blank_text=True)
tree = etree.parse('thread_group.xml', parser)
for e in tree.xpath('//*'):
name = e.get('name')
if name == 'LoopController.loops':
e.text = '10+10'
elif name == 'ThreadGroup.num_threads':
e.text = '1000+1000'
print(etree.tostring(tree, pretty_print=True))
<强>输出强>
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true">
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
<elementProp name="ThreadGroup.main_controller" elementType="LoopController">
<boolProp name="LoopController.continue_forever">false</boolProp>
<stringProp name="LoopController.loops">10+10</stringProp>
</elementProp>
<intProp name="ThreadGroup.num_threads">1000+1000</intProp>
<intProp name="ThreadGroup.ramp_time">1</intProp>
<longProp name="ThreadGroup.start_time">1363247040000</longProp>
<longProp name="ThreadGroup.end_time">1363247040000</longProp>
<boolProp name="ThreadGroup.scheduler">false</boolProp>
<longProp name="ThreadGroup.duration">0</longProp>
<longProp name="ThreadGroup.delay">0</longProp>
</ThreadGroup>