Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_force_delimiters(self):
self.obj.execution.merge({
"iterations": 10,
"scenario": {"script": RESOURCES_DIR + "/jmeter/jmx/delimiters.jmx"}})
self.obj.prepare()
jmx = JMX(self.obj.modified_jmx)
delimiters = [delimiter.text for delimiter in jmx.get("CSVDataSet>stringProp[name='delimiter']")]
self.assertEqual(['1', '2', ','], delimiters)
def test_force_parent_sample(self):
self.configure({
'execution': {
'scenario': {
'force-parent-sample': True,
'script': RESOURCES_DIR + '/jmeter/jmx/transactions.jmx'}}})
self.obj.prepare()
jmx = JMX(self.obj.modified_jmx)
selector = 'TransactionController > boolProp[name="TransactionController.parent"]'
props = jmx.get(selector)
self.assertEqual(len(props), 2)
self.assertTrue(all(prop.text == 'true' for prop in props))
def test_json_body_app_str(self):
self.configure({"execution": {
"scenario": {
"requests": [{
"url": "http://blazedemo.com",
"headers": {"Content-Type": "application/json"},
"body": "{\"store_id\": \"${store_id}\", \"display_name\": \"${display_name}\"}"}]}}})
self.obj.prepare()
jmx = JMX(self.obj.original_jmx)
selector = 'elementProp[name="HTTPsampler.Arguments"]>collectionProp'
selector += '>elementProp>stringProp[name="Argument.value"]'
res = jmx.get(selector)[0].text
self.assertNotEqual(res.find('store_id'), -1)
def test_jmx_unicode_checkmark(self):
obj = JMX()
res = obj._get_http_request("url", "label", "method", 0, {"param": u"✓"}, True)
prop = res.find(".//stringProp[@name='Argument.value']")
self.assertNotEqual("BINARY", prop.text)
self.assertEqual(u"✓", prop.text)
def _get_tool_version(jmx_file):
jmx = JMX(jmx_file)
selector = 'jmeterTestPlan'
test_plan = jmx.get(selector)[0]
ver = test_plan.get('jmeter')
if isinstance(ver, string_types):
index = ver.find(" ")
if index != -1:
return ver[:index]
return JMeter.VERSION
def __force_hc4_cookie_handler(self, jmx):
selector = "[testclass=CookieManager]"
fix_counter = 0
for node in jmx.get(selector):
name = "CookieManager.implementation"
if not node.get(name):
val = "org.apache.jmeter.protocol.http.control.HC4CookieHandler"
node.append(JMX._string_prop(name, val))
fix_counter += 1
if fix_counter:
self.log.info('%s obsolete CookieManagers are found and fixed' % fix_counter)
- to collect detailed errors/trace info
:return: path to artifact
"""
jmx = JMX(original)
if self.get_scenario().get("disable-listeners", not self.settings.get("gui", False)):
JMeterExecutor.__disable_listeners(jmx)
user_def_vars = self.get_scenario().get("variables")
if user_def_vars:
jmx.append(JMeterScenarioBuilder.TEST_PLAN_SEL, jmx.add_user_def_vars_elements(user_def_vars))
jmx.append(JMeterScenarioBuilder.TEST_PLAN_SEL, etree.Element("hashTree"))
headers = self.get_scenario().get_headers()
if headers:
jmx.append(JMeterScenarioBuilder.TEST_PLAN_SEL, JMX._get_header_mgr(headers))
jmx.append(JMeterScenarioBuilder.TEST_PLAN_SEL, etree.Element("hashTree"))
self.__apply_test_mode(jmx)
self.__add_result_listeners(jmx)
if not is_jmx_generated:
self.__force_tran_parent_sample(jmx)
version = LooseVersion(self.tool.version)
if version >= LooseVersion("3.2"):
self.__force_hc4_cookie_handler(jmx)
self.__fill_empty_delimiters(jmx)
self.__apply_modifications(jmx)
LoadSettingsProcessor(self).modify(jmx)
return jmx
def __get_modified_jmx(self, original, is_jmx_generated):
"""
add two listeners to test plan:
- to collect basic stats for KPIs
- to collect detailed errors/trace info
:return: path to artifact
"""
jmx = JMX(original)
if self.get_scenario().get("disable-listeners", not self.settings.get("gui", False)):
JMeterExecutor.__disable_listeners(jmx)
user_def_vars = self.get_scenario().get("variables")
if user_def_vars:
jmx.append(JMeterScenarioBuilder.TEST_PLAN_SEL, jmx.add_user_def_vars_elements(user_def_vars))
jmx.append(JMeterScenarioBuilder.TEST_PLAN_SEL, etree.Element("hashTree"))
headers = self.get_scenario().get_headers()
if headers:
jmx.append(JMeterScenarioBuilder.TEST_PLAN_SEL, JMX._get_header_mgr(headers))
jmx.append(JMeterScenarioBuilder.TEST_PLAN_SEL, etree.Element("hashTree"))
self.__apply_test_mode(jmx)
self.__add_result_listeners(jmx)
def __add_regexp_ext(self, children, req):
extractors = req.config.get("extract-regexp")
for varname in extractors:
cfg = ensure_is_dict(extractors, varname, "regexp")
scope = cfg.get("scope", None)
from_var = cfg.get("from-variable", None)
extractor = JMX._get_extractor(varname, cfg.get('subject', 'body'), cfg['regexp'], cfg.get('template', 1),
cfg.get('match-no', 1), cfg.get('default', 'NOT_FOUND'), scope, from_var)
children.append(extractor)
children.append(etree.Element("hashTree"))