03_run_jmeter.py

本文介绍了一种使用Python脚本自动化执行JMeter性能测试的方法,包括创建测试报告目录、执行测试脚本、生成日志及报告。通过定时任务,可以实现JMeter性能测试的自动化执行。
import os
from time import strftime



#jmeter_bin目录
jmeter_bin = r'D:\apache\apache-jmeter-4.0\bin'

#需要运行的jmeter脚本
jmeter_script = r"D:\api_project\token.jmx"

#测试报告存放路径
result = r'D:\api_project\report'


now = strftime('%Y_%m_%d_%H_%M_%S')
log_path = result + '\\' + now + "\\log"
report_path = result+'\\' + now + "\\report"
os.system("mkdir " +log_path)
os.system("mkdir " +report_path)
command = "jmeter -n -t %s -l %s\\jmeter.log -e -o %s"%(jmeter_script,log_path,report_path)
os.chdir(jmeter_bin)
os.system(command)
C:\Users\xueji\Desktop\软件测试学习\8.性能测试\JMeter工具学习\入门篇资料\资料\项目\项目>python run_server.py Exception ignored in thread started by: <function check_errors.<locals>.wrapper at 0x04266340> Traceback (most recent call last): File "D:\python\python3.8\lib\site-packages\django\utils\autoreload.py", line 227, in wrapper fn(*args, **kwargs) File "D:\python\python3.8\lib\site-packages\django\core\management\commands\runserver.py", line 117, in inner_run autoreload.raise_last_exception() File "D:\python\python3.8\lib\site-packages\django\utils\autoreload.py", line 250, in raise_last_exception six.reraise(*_exception) File "D:\python\python3.8\lib\site-packages\django\utils\six.py", line 685, in reraise raise value.with_traceback(tb) File "D:\python\python3.8\lib\site-packages\django\utils\autoreload.py", line 227, in wrapper fn(*args, **kwargs) File "D:\python\python3.8\lib\site-packages\django\__init__.py", line 27, in setup apps.populate(settings.INSTALLED_APPS) File "D:\python\python3.8\lib\site-packages\django\apps\registry.py", line 85, in populate app_config = AppConfig.create(entry) File "D:\python\python3.8\lib\site-packages\django\apps\config.py", line 94, in create module = import_module(entry) File "D:\python\python3.8\lib\importlib\__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1014, in _gcd_import File "<frozen importlib._bootstrap>", line 991, in _find_and_load File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 671, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 783, in exec_module File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed File "D:\python\python3.8\lib\site-packages\django\contrib\admin\__init__.py", line 4, in <module> from django.contrib.admin.filters import ( File "D:\python\
09-01
#!/usr/bin/python3 # coding=utf-8 from zaixian_cas_login import HttpResponseProcessor from zaixian_cas_login import get_credentials import sys import time import requests import json from urllib.parse import urlparse, urljoin SUC_RES = { 'resCode': 200, 'resTime': 0, 'keyword': 'SUCCESS', 'message': "调用成功" } FAIL_RES = { 'resCode': 500, 'resTime': 0, 'keyword': 'FAILED', 'message': "调用失败" } def print_err_result(e): FAIL_RES['error'] = e print(json.dumps(FAIL_RES, ensure_ascii=False)) exit(1) def _requests(full_url, params='{}'): try: # 处理null参数的情况 if params is None or params.lower() == 'null': params = '{}' # 解析参数 param = params.replace("'", '"') pars = json.loads(param) # 获取请求数据,默认为空字典 data = pars.get('data', {}) # 添加协议前缀(如果不存在) if not full_url.startswith(('http://', 'https://')): full_url = 'https://' + full_url # 解析URL以验证格式 parsed_url = urlparse(full_url) if not parsed_url.netloc: raise ValueError("无效的URL格式,缺少域名部分") # 确保路径以/开头 if not parsed_url.path.startswith('/'): full_url = urljoin(full_url, '/') isSuccess = True start = time.time() try: # 获取token和session token, sess = get_credentials() if token is None or sess is None: raise ValueError("无法获取有效的token或session") # 设置请求头,包括Cookie和Session headers = { 'Cookie': f'prod-token={token}', 'Content-Type': 'application/json' } # 发送POST请求(忽略SSL验证) res = requests.get(url=full_url, json=data, headers=headers, verify=False) # 新增解压解码处理过程 processor = HttpResponseProcessor(full_url, headers=res.headers) processor.response = res processor.raw_content = res.content processor.status_code = res.status_code try: # 解码内容 text_content = processor.decode_content() # 如果内容是JSON,可以解析为字典 try: json_content = json.loads(text_content) except json.JSONDecodeError: pass except Exception as e: raise e except requests.exceptions.SSLError as e: message = 'SSL证书验证失败' FAIL_RES['message'].append(message) print_err_result(str(e)) except Exception as e: message = '调用出现异常' FAIL_RES['message'].append(message) print_err_result(str(e)) # 计算耗时 res_time = (time.time() - start) * 1000 # 解析响应 try: response_data = res.json() statusCode = response_data.get('statusCode', res.status_code) except ValueError: statusCode = res.status_code # 判断请求是否成功 if 200 != res.status_code: isSuccess = False FAIL_RES['error'] = '调用网关拨测中间服务失败' message = 'resCode:' + str(res.status_code) FAIL_RES['message'].append(message) if 200 != statusCode: isSuccess = False FAIL_RES['error'] = '调用失败' try: message = 'resInfo:' + str(res.json().get('responseBody', 'No response body')) FAIL_RES['message'].append(message) except ValueError: message = 'resInfo: Invalid JSON response' FAIL_RES['message'].append(message) # 成功处理 SUC_RES['resTime'] = int(res_time) # 输出结果 if isSuccess: print(json.dumps(SUC_RES, ensure_ascii=False)) else: print(json.dumps(FAIL_RES, ensure_ascii=False)) except json.JSONDecodeError as e: print_err_result(f"JSON参数解析失败: {str(e)}") except ValueError as e: print_err_result(str(e)) except Exception as e: print_err_result(f"未知错误: {str(e)}") if __name__ == '__main__': args = sys.argv[1:] if len(args) < 1: raise Exception(''' 参数不足 用法: ./http_requests.py 完整URL [JSON参数] 示例: ./http_requests.py "https://api.example.com/endpoint" '{"data":{"key":"value"}}' ''') full_url = args[0] # 处理null参数的情况 params = args[1] if len(args) > 1 and args[1].lower() != 'null' else '{}' _requests(full_url, params) 我执行上面这段代码,未能运行成功,请根据异常信息改写代码,异常信息为:javax.script.ScriptException: org.python.antlr.ParseException: org.python.antlr.ParseException: encoding declaration in Unicode string at org.python.jsr223.PyScriptEngine.scriptException(PyScriptEngine.java:226) at org.python.jsr223.PyScriptEngine.compileScript(PyScriptEngine.java:93) at org.python.jsr223.PyScriptEngine.eval(PyScriptEngine.java:31) at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:233) at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:219) at org.apache.jmeter.modifiers.UTPJSR223PreProcessor.process(UTPJSR223PreProcessor.java:109) at org.apache.jmeter.threads.JMeterThread.runPreProcessors(JMeterThread.java:965) at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:549) at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:489) at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:256) at java.lang.Thread.run(Thread.java:748) Caused by: org.python.antlr.ParseException: encoding declaration in Unicode string at org.python.core.ParserFacade.prepBufReader(ParserFacade.java:281) at org.python.core.ParserFacade.parseExpressionOrModule(ParserFacade.java:123) at org.python.util.PythonInterpreter.compile(PythonInterpreter.java:321) at org.python.util.PythonInterpreter.compile(PythonInterpreter.java:317) at org.python.util.PythonInterpreter.compile(PythonInterpreter.java:309) at org.python.jsr223.PyScriptEngine.compileScript(PyScriptEngine.java:87) at org.python.jsr223.PyScriptEngine.eval(PyScriptEngine.java:31) at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:233) at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:219) at org.apache.jmeter.modifiers.UTPJSR223PreProcessor.process(UTPJSR223PreProcessor.java:109) at org.apache.jmeter.threads.JMeterThread.runPreProcessors(JMeterThread.java:965) at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:549) at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:489) at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:256) at java.lang.Thread.run(Thread.java:748) org.python.antlr.ParseException: org.python.antlr.ParseException: encoding declaration in Unicode string at org.python.core.Py.JavaError(Py.java:547) at org.python.core.ParserFacade.parseExpressionOrModule(ParserFacade.java:129) at org.python.util.PythonInterpreter.compile(PythonInterpreter.java:321) at org.python.util.PythonInterpreter.compile(PythonInterpreter.java:317) at org.python.util.PythonInterpreter.compile(PythonInterpreter.java:309) at org.python.jsr223.PyScriptEngine.compileScript(PyScriptEngine.java:87) ... 9 more Caused by: org.python.antlr.ParseException: encoding declaration in Unicode string at org.python.core.ParserFacade.prepBufReader(ParserFacade.java:281) at org.python.core.ParserFacade.parseExpressionOrModule(ParserFacade.java:123) ... 13 more
08-07
ava.lang.Error: Invalid memory access at com.sun.jna.Native.invokePointer(Native Method) ~[jna-4.1.0.jar:4.1.0 (b4)] at com.sun.jna.Function.invokePointer(Function.java:470) ~[jna-4.1.0.jar:4.1.0 (b4)] at com.sun.jna.Function.invoke(Function.java:404) ~[jna-4.1.0.jar:4.1.0 (b4)] at com.sun.jna.Function.invoke(Function.java:315) ~[jna-4.1.0.jar:4.1.0 (b4)] at com.sun.jna.Library$Handler.invoke(Library.java:212) ~[jna-4.1.0.jar:4.1.0 (b4)] at com.sun.proxy.$Proxy31.TessBaseAPIGetUTF8Text(Unknown Source) ~[?:?] at net.sourceforge.tess4j.Tesseract.getOCRText(Unknown Source) ~[tess4j-3.4.8.jar:?] at net.sourceforge.tess4j.Tesseract.doOCR(Unknown Source) ~[tess4j-3.4.8.jar:?] at net.sourceforge.tess4j.Tesseract.doOCR(Unknown Source) ~[tess4j-3.4.8.jar:?] at net.sourceforge.tess4j.Tesseract.doOCR(Unknown Source) ~[tess4j-3.4.8.jar:?] at net.sourceforge.tess4j.Tesseract.doOCR(Unknown Source) ~[tess4j-3.4.8.jar:?] at net.sourceforge.tess4j.ITesseract$doOCR$1.call(Unknown Source) ~[?:?] at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47) ~[groovy-3.0.20.jar:3.0.20] at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125) ~[groovy-3.0.20.jar:3.0.20] at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:139) ~[groovy-3.0.20.jar:3.0.20] at Script20.run(Script20.groovy:16) ~[?:?] at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:317) ~[groovy-jsr223-3.0.20.jar:3.0.20] at org.codehaus.groovy.jsr223.GroovyCompiledScript.eval(GroovyCompiledScript.java:71) ~[groovy-jsr223-3.0.20.jar:3.0.20] at java.scripting/javax.script.CompiledScript.eval(CompiledScript.java:89) ~[java.scripting:?] at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:230) ~[ApacheJMeter_core.jar:5.6.3] at org.apache.jmeter.protocol.java.sampler.JSR223Sampler.sample(JSR223Sampler.java:72) ~[ApacheJMeter_java.jar:5.6.3] at org.apache.jmeter.threads.JMeterThread.doSampling(JMeterThread.java:651) ~[ApacheJMeter_core.jar:5.6.3] at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:570) ~[ApacheJMeter_core.jar:5.6.3] at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:501) ~[ApacheJMeter_core.jar:5.6.3] at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:268) ~[ApacheJMeter_core.jar:5.6.3] at java.base/java.lang.Thread.run(Thread.java:834) [?:?]
10-14
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值