jmeter = Blueprint('jmeter', __name__)
grpc_port = '50054'
-pod_name = 'clover-jmeter-master'
+pod_name = 'clover-jmeter-master.default'
jmeter_grpc = pod_name + ':' + grpc_port
channel = grpc.insecure_channel(jmeter_grpc)
stub = jmeter_pb2_grpc.ControllerStub(channel)
@jmeter.route("/jmeter/gen", methods=['GET', 'POST'])
+@jmeter.route("/jmeter/create", methods=['GET', 'POST'])
def gentest():
try:
p = request.json
u_list = []
u_names = []
u_methods = []
+ u_agents = []
try:
for u in p['url_list']:
u_list.append(u['url'])
u_names.append(u['name'])
u_methods.append(u['method'])
+ u_agents.append(u['user-agent'])
url_list = pickle.dumps(u_list)
url_names = pickle.dumps(u_names)
url_methods = pickle.dumps(u_methods)
+ url_agents = pickle.dumps(u_agents)
num_threads = p['load_spec']['num_threads']
ramp_time = p['load_spec']['ramp_time']
+ duration = p['load_spec']['duration']
loops = p['load_spec']['loops']
except (KeyError, ValueError) as e:
logging.debug(e)
response = stub.GenTest(jmeter_pb2.ConfigJmeter(
url_list=url_list, url_names=url_names, url_methods=url_methods,
num_threads=str(num_threads), ramp_time=str(ramp_time),
- loops=str(loops)))
+ url_agents=url_agents, duration=str(duration), loops=str(loops)))
except Exception as e:
logging.debug(e)
if e.__class__.__name__ == "_Rendezvous":
name='jmeter.proto',
package='jmeter',
syntax='proto3',
- serialized_pb=_b('\n\x0cjmeter.proto\x12\x06jmeter\"F\n\nTestParams\x12\x12\n\nnum_slaves\x18\x01 \x01(\t\x12\x11\n\ttest_plan\x18\x02 \x01(\t\x12\x11\n\tslave_ips\x18\x03 \x01(\t\"\x96\x01\n\x0c\x43onfigJmeter\x12\x10\n\x08url_list\x18\x01 \x01(\t\x12\x13\n\x0bnum_threads\x18\x02 \x01(\t\x12\x11\n\turl_names\x18\x03 \x01(\t\x12\x15\n\rurl_protocols\x18\x04 \x01(\t\x12\x13\n\x0burl_methods\x18\x05 \x01(\t\x12\r\n\x05loops\x18\x06 \x01(\t\x12\x11\n\tramp_time\x18\x07 \x01(\t\"\x1e\n\x0bJmeterReply\x12\x0f\n\x07message\x18\x01 \x01(\t\",\n\x08JResults\x12\x10\n\x08r_format\x18\x01 \x01(\t\x12\x0e\n\x06r_file\x18\x02 \x01(\t2\xb3\x01\n\nController\x12\x36\n\x07GenTest\x12\x14.jmeter.ConfigJmeter\x1a\x13.jmeter.JmeterReply\"\x00\x12\x36\n\tStartTest\x12\x12.jmeter.TestParams\x1a\x13.jmeter.JmeterReply\"\x00\x12\x35\n\nGetResults\x12\x10.jmeter.JResults\x1a\x13.jmeter.JmeterReply\"\x00\x62\x06proto3')
+ serialized_pb=_b('\n\x0cjmeter.proto\x12\x06jmeter\"F\n\nTestParams\x12\x12\n\nnum_slaves\x18\x01 \x01(\t\x12\x11\n\ttest_plan\x18\x02 \x01(\t\x12\x11\n\tslave_ips\x18\x03 \x01(\t\"\xbc\x01\n\x0c\x43onfigJmeter\x12\x10\n\x08url_list\x18\x01 \x01(\t\x12\x13\n\x0bnum_threads\x18\x02 \x01(\t\x12\x11\n\turl_names\x18\x03 \x01(\t\x12\x15\n\rurl_protocols\x18\x04 \x01(\t\x12\x13\n\x0burl_methods\x18\x05 \x01(\t\x12\x12\n\nurl_agents\x18\x06 \x01(\t\x12\r\n\x05loops\x18\x07 \x01(\t\x12\x11\n\tramp_time\x18\x08 \x01(\t\x12\x10\n\x08\x64uration\x18\t \x01(\t\"\x1e\n\x0bJmeterReply\x12\x0f\n\x07message\x18\x01 \x01(\t\",\n\x08JResults\x12\x10\n\x08r_format\x18\x01 \x01(\t\x12\x0e\n\x06r_file\x18\x02 \x01(\t2\xb3\x01\n\nController\x12\x36\n\x07GenTest\x12\x14.jmeter.ConfigJmeter\x1a\x13.jmeter.JmeterReply\"\x00\x12\x36\n\tStartTest\x12\x12.jmeter.TestParams\x1a\x13.jmeter.JmeterReply\"\x00\x12\x35\n\nGetResults\x12\x10.jmeter.JResults\x1a\x13.jmeter.JmeterReply\"\x00\x62\x06proto3')
)
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
- name='loops', full_name='jmeter.ConfigJmeter.loops', index=5,
+ name='url_agents', full_name='jmeter.ConfigJmeter.url_agents', index=5,
number=6, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
- name='ramp_time', full_name='jmeter.ConfigJmeter.ramp_time', index=6,
+ name='loops', full_name='jmeter.ConfigJmeter.loops', index=6,
number=7, type=9, cpp_type=9, label=1,
has_default_value=False, default_value=_b("").decode('utf-8'),
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='ramp_time', full_name='jmeter.ConfigJmeter.ramp_time', index=7,
+ number=8, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
+ _descriptor.FieldDescriptor(
+ name='duration', full_name='jmeter.ConfigJmeter.duration', index=8,
+ number=9, type=9, cpp_type=9, label=1,
+ has_default_value=False, default_value=_b("").decode('utf-8'),
+ message_type=None, enum_type=None, containing_type=None,
+ is_extension=False, extension_scope=None,
+ options=None, file=DESCRIPTOR),
],
extensions=[
],
oneofs=[
],
serialized_start=97,
- serialized_end=247,
+ serialized_end=285,
)
extension_ranges=[],
oneofs=[
],
- serialized_start=249,
- serialized_end=279,
+ serialized_start=287,
+ serialized_end=317,
)
extension_ranges=[],
oneofs=[
],
- serialized_start=281,
- serialized_end=325,
+ serialized_start=319,
+ serialized_end=363,
)
DESCRIPTOR.message_types_by_name['TestParams'] = _TESTPARAMS
file=DESCRIPTOR,
index=0,
options=None,
- serialized_start=328,
- serialized_end=507,
+ serialized_start=366,
+ serialized_end=545,
methods=[
_descriptor.MethodDescriptor(
name='GenTest',
<longProp name="ThreadGroup.start_time">1385457190000</longProp>
<longProp name="ThreadGroup.end_time">1385457190000</longProp>
<boolProp name="ThreadGroup.scheduler">true</boolProp>
- <stringProp name="ThreadGroup.duration">60</stringProp>
+ <stringProp name="ThreadGroup.duration">{{ duration }}</stringProp>
<stringProp name="ThreadGroup.delay"/>
<boolProp name="ThreadGroup.delayedStart">true</boolProp>
</ThreadGroup>
<stringProp name="HTTPSampler.embedded_url_re"/>
<stringProp name="HTTPSampler.implementation"/>
</HTTPSampler>
+ <hashTree>
+ <HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP Header Manager" enabled="true">
+ <collectionProp name="HeaderManager.headers">
+ <elementProp name="" elementType="Header">
+ <stringProp name="Header.name">User-Agent</stringProp>
+ <stringProp name="Header.value">{{ url_agents[loop.index0] }}</stringProp>
+ </elementProp>
+ </collectionProp>
+ </HeaderManager>
<hashTree/>
+ </hashTree>
{%- endfor %}