summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clover/cloverctl/src/cloverctl/yaml/jmeter_testplan.yaml7
-rw-r--r--clover/controller/control/api/jmeter.py9
-rw-r--r--clover/controller/control/templates/request_counts.html21
-rw-r--r--clover/tools/jmeter/jmeter-master/grpc/jmeter.proto6
-rw-r--r--clover/tools/jmeter/jmeter-master/grpc/jmeter_pb2.py34
-rw-r--r--clover/tools/jmeter/jmeter-master/grpc/jmeter_server.py3
-rw-r--r--clover/tools/jmeter/jmeter-master/tests/jmx.template12
7 files changed, 75 insertions, 17 deletions
diff --git a/clover/cloverctl/src/cloverctl/yaml/jmeter_testplan.yaml b/clover/cloverctl/src/cloverctl/yaml/jmeter_testplan.yaml
index 140e70f..92d53ea 100644
--- a/clover/cloverctl/src/cloverctl/yaml/jmeter_testplan.yaml
+++ b/clover/cloverctl/src/cloverctl/yaml/jmeter_testplan.yaml
@@ -1,11 +1,14 @@
load_spec:
- num_threads: 1
- loops: 1
+ num_threads: 5
+ loops: 2
ramp_time: 60
+ duration: 80
url_list:
- name: url1
url: http://proxy-access-control.default:9180
method: GET
+ user-agent: chrome
- name: url2
url: http://proxy-access-control.default:9180
method: GET
+ user-agent: safari
diff --git a/clover/controller/control/api/jmeter.py b/clover/controller/control/api/jmeter.py
index 09625f5..3e8b86a 100644
--- a/clover/controller/control/api/jmeter.py
+++ b/clover/controller/control/api/jmeter.py
@@ -16,29 +16,34 @@ import logging
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)
@@ -46,7 +51,7 @@ def gentest():
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":
diff --git a/clover/controller/control/templates/request_counts.html b/clover/controller/control/templates/request_counts.html
new file mode 100644
index 0000000..ecf458a
--- /dev/null
+++ b/clover/controller/control/templates/request_counts.html
@@ -0,0 +1,21 @@
+<div class="large-4 medium-3 cell clover-portlet small-offset-2">
+ <h5>Per Service Counts</h5>
+ <div class="span_node_id_all">
+ </div>
+</div>
+<div class="large-4 medium-3 cell clover-portlet">
+ <h5>Per URL Counts (all services)</h5>
+ <div class="span_urls_all">
+ </div>
+</div>
+
+<div class="large-4 medium-3 cell clover-portlet small-offset-2">
+ <h5>Per URL / HTTP Status Codes (all services)</h5>
+ <div class="status_codes_all">
+ </div>
+</div>
+<div class="large-4 medium-3 cell clover-portlet">
+ <h5>User-Agent Percentage</h5>
+ <div class="span_user_agents_all" id="span_user_agents_all">
+ </div>
+</div>
diff --git a/clover/tools/jmeter/jmeter-master/grpc/jmeter.proto b/clover/tools/jmeter/jmeter-master/grpc/jmeter.proto
index 7213faa..f65ed6c 100644
--- a/clover/tools/jmeter/jmeter-master/grpc/jmeter.proto
+++ b/clover/tools/jmeter/jmeter-master/grpc/jmeter.proto
@@ -29,8 +29,10 @@ message ConfigJmeter {
string url_names = 3;
string url_protocols = 4;
string url_methods = 5;
- string loops = 6;
- string ramp_time = 7;
+ string url_agents = 6;
+ string loops = 7;
+ string ramp_time = 8;
+ string duration = 9;
}
message JmeterReply {
diff --git a/clover/tools/jmeter/jmeter-master/grpc/jmeter_pb2.py b/clover/tools/jmeter/jmeter-master/grpc/jmeter_pb2.py
index e4a75fd..7a2d62c 100644
--- a/clover/tools/jmeter/jmeter-master/grpc/jmeter_pb2.py
+++ b/clover/tools/jmeter/jmeter-master/grpc/jmeter_pb2.py
@@ -19,7 +19,7 @@ DESCRIPTOR = _descriptor.FileDescriptor(
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')
)
@@ -113,19 +113,33 @@ _CONFIGJMETER = _descriptor.Descriptor(
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=[
],
@@ -139,7 +153,7 @@ _CONFIGJMETER = _descriptor.Descriptor(
oneofs=[
],
serialized_start=97,
- serialized_end=247,
+ serialized_end=285,
)
@@ -169,8 +183,8 @@ _JMETERREPLY = _descriptor.Descriptor(
extension_ranges=[],
oneofs=[
],
- serialized_start=249,
- serialized_end=279,
+ serialized_start=287,
+ serialized_end=317,
)
@@ -207,8 +221,8 @@ _JRESULTS = _descriptor.Descriptor(
extension_ranges=[],
oneofs=[
],
- serialized_start=281,
- serialized_end=325,
+ serialized_start=319,
+ serialized_end=363,
)
DESCRIPTOR.message_types_by_name['TestParams'] = _TESTPARAMS
@@ -253,8 +267,8 @@ _CONTROLLER = _descriptor.ServiceDescriptor(
file=DESCRIPTOR,
index=0,
options=None,
- serialized_start=328,
- serialized_end=507,
+ serialized_start=366,
+ serialized_end=545,
methods=[
_descriptor.MethodDescriptor(
name='GenTest',
diff --git a/clover/tools/jmeter/jmeter-master/grpc/jmeter_server.py b/clover/tools/jmeter/jmeter-master/grpc/jmeter_server.py
index cef180c..9f9e561 100644
--- a/clover/tools/jmeter/jmeter-master/grpc/jmeter_server.py
+++ b/clover/tools/jmeter/jmeter-master/grpc/jmeter_server.py
@@ -37,6 +37,7 @@ class Controller(jmeter_pb2_grpc.ControllerServicer):
template_file = 'tests/jmx.template'
unames = pickle.loads(r.url_names)
umethods = pickle.loads(r.url_methods)
+ uagents = pickle.loads(r.url_agents)
ulist = []
for url in pickle.loads(r.url_list):
u = urlparse(url)
@@ -58,7 +59,9 @@ class Controller(jmeter_pb2_grpc.ControllerServicer):
num_threads=r.num_threads,
url_names=unames,
url_methods=umethods,
+ url_agents=uagents,
ramp_time=r.ramp_time,
+ duration=r.duration,
loops=r.loops,
url_list=ulist
)
diff --git a/clover/tools/jmeter/jmeter-master/tests/jmx.template b/clover/tools/jmeter/jmeter-master/tests/jmx.template
index 1a6fa95..ad3414d 100644
--- a/clover/tools/jmeter/jmeter-master/tests/jmx.template
+++ b/clover/tools/jmeter/jmeter-master/tests/jmx.template
@@ -23,7 +23,7 @@
<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>
@@ -49,7 +49,17 @@
<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 %}