背景介绍
见上一篇文章。
使用string.Template字符替换
如果只是简单的字符串替换,使用 format
或者 %s
也能完成,选择使用string.Template的原因是string.Template可以自动化匹配规则,且能修改操作符,
而不管是fstring
还是format
都是用的{}
来进行关键字的定位,{}
在jmx脚本中本身就存在特定的意义。
思路:
- 修改jmx脚本中的关键数据,使用特定操作符
- 定义相关字典,使用
safe_substitute
进行赋值
具体实现
#! /usr/bin/python
# coding:utf-8
"""
@author:Bingo.he
@file: str_temp.py
@time: 2019/08/20
"""
import string
# with open("template_str.jmx", "r") as f:
# data = f.read()
set_value = {
"num_threads": 10,
"loops": 1011,
"ramp_time": 10
}
str_temp = """
<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" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
<boolProp name="LoopController.continue_forever">false</boolProp>
<stringProp name="LoopController.loops">%loops</stringProp>
</elementProp>
<stringProp name="ThreadGroup.num_threads">%num_threads</stringProp>
<stringProp name="ThreadGroup.ramp_time">%ramp_time</stringProp>
<boolProp name="ThreadGroup.scheduler">false</boolProp>
<stringProp name="ThreadGroup.duration"></stringProp>
<stringProp name="ThreadGroup.delay"></stringProp>
</ThreadGroup>
"""
class MyTemplate(string.Template):
# 修改操作符为"%"
delimiter = '%'
# 修改匹配规则(正则)
# idpattern = '[a-z]+_[a-z]+'
t = MyTemplate(str_temp)
print(t.safe_substitute(set_value))
输出:
...
<stringProp name="LoopController.loops">1011</stringProp>
</elementProp>
<stringProp name="ThreadGroup.num_threads">101</stringProp>
<stringProp name="ThreadGroup.ramp_time">10</stringProp>
...