2014-10-02 107 views
-1

我有以下XML代碼(這是JMeter的負載測試腳本),例:查找和XML替換值(動態)

<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> 

我想改變參數,可以被命名爲LoopController .loopsThreadGroup.num_threads對於循環中的動態值(例如10 + 10和1000 + 100)的常量值(如現在的-10和1000)。

我是Python新手,對不起。

預先感謝您。

+0

你有,你能告訴我們任何代碼? – skrrgwasme 2014-10-02 13:58:18

+1

這個論壇是最好的,當你發佈你已經嘗試過,並詢問你有問題,而不是要求有人爲你寫代碼。你有什麼嘗試? – FrobberOfBits 2014-10-02 14:04:30

回答

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>