优化断言,放出原始断言信息
This commit is contained in:
parent
01de06fef4
commit
1b43af808d
|
@ -5,7 +5,7 @@
|
|||
<sourceFolder url="file://$MODULE_DIR$" isTestSource="false" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/venv" />
|
||||
</content>
|
||||
<orderEntry type="jdk" jdkName="Python 3.9" jdkType="Python SDK" />
|
||||
<orderEntry type="jdk" jdkName="Pipenv (apitest)" jdkType="Python SDK" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
<component name="PackageRequirementsSettings">
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="dataSourceStorageLocal" created-in="PY-231.9161.41">
|
||||
<component name="dataSourceStorageLocal" created-in="PY-231.9011.38">
|
||||
<data-source name="@localhost" uuid="49b6f686-3676-4df5-9645-cd7a2fe91d80">
|
||||
<database-info product="MySQL" version="8.0.26" jdbc-version="4.2" driver-name="MySQL Connector/J" driver-version="mysql-connector-java-8.0.25 (Revision: 08be9e9b4cba6aa115f9b27b215887af40b159e0)" dbms="MYSQL" exact-version="8.0.26" exact-driver-version="8.0">
|
||||
<extra-name-characters>#@</extra-name-characters>
|
||||
|
|
|
@ -1,20 +1,25 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<dataSource name="@localhost">
|
||||
<database-model serializer="dbm" dbms="MYSQL" family-id="MYSQL" format-version="4.48">
|
||||
<root id="1"/>
|
||||
<schema id="2" parent="1" name="flask">
|
||||
<root id="1">
|
||||
<DefaultCasing>lower/lower</DefaultCasing>
|
||||
<DefaultEngine>InnoDB</DefaultEngine>
|
||||
<DefaultTmpEngine>InnoDB</DefaultTmpEngine>
|
||||
<ServerVersion>8.0.32</ServerVersion>
|
||||
</root>
|
||||
<schema id="2" parent="1" name="mysql">
|
||||
<CollationName>utf8mb4_0900_ai_ci</CollationName>
|
||||
</schema>
|
||||
<schema id="3" parent="1" name="information_schema">
|
||||
<CollationName>utf8mb3_general_ci</CollationName>
|
||||
</schema>
|
||||
<schema id="4" parent="1" name="mysql">
|
||||
<schema id="4" parent="1" name="performance_schema">
|
||||
<CollationName>utf8mb4_0900_ai_ci</CollationName>
|
||||
</schema>
|
||||
<schema id="5" parent="1" name="performance_schema">
|
||||
<schema id="5" parent="1" name="sys">
|
||||
<CollationName>utf8mb4_0900_ai_ci</CollationName>
|
||||
</schema>
|
||||
<schema id="6" parent="1" name="sys">
|
||||
<schema id="6" parent="1" name="flask">
|
||||
<CollationName>utf8mb4_0900_ai_ci</CollationName>
|
||||
</schema>
|
||||
</database-model>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.9" project-jdk-type="Python SDK" />
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="Pipenv (apitest)" project-jdk-type="Python SDK" />
|
||||
<component name="PyCharmProfessionalAdvertiser">
|
||||
<option name="shown" value="true" />
|
||||
</component>
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
2023-07-31 20:25:00 | ERROR | key:<re.Match object; span=(184, 197), match='{{BSP_TOKEN}}'>,在关联参数表中查询不到,请检查关联参数字段提取及填写是否正常
|
||||
|
||||
2023-07-31 20:25:01 | ERROR | 异常用例: **safe_4_劳务基础配置_绑定TV**
|
||||
'FAIL' unexpectedly found in ('FAIL', [{'检查项': '$.code', '期望值': 200, '实际值': 'AG_100003', '断言方法': 'eq:实际值与期望值相等'}, {'检查项': '$.msg', '期望值': '添加成功', '实际值': '您的登陆状态已过期,请重新登陆。', '断言方法': 'eq:实际值与期望值相等'}]) : FAIL 存在结果元组中
|
||||
2023-07-31 20:25:02 | ERROR | key:<re.Match object; span=(171, 184), match='{{BSP_TOKEN}}'>,在关联参数表中查询不到,请检查关联参数字段提取及填写是否正常
|
||||
|
||||
2023-07-31 20:25:02 | ERROR | 提取失败:提取表达式:$.data.projectId,没有提取到对应的值
|
||||
2023-07-31 20:25:02 | ERROR | 异常用例: **safe_5_劳务基础配置_查询配置**
|
||||
'FAIL' unexpectedly found in ('FAIL', [{'检查项': '$.data.projectId', '期望值': '103654', '实际值': [], '断言方法': 'contained_by:实际值被包含在期望值中'}]) : FAIL 存在结果元组中
|
||||
2023-07-31 20:57:50 | ERROR | 提取失败:提取表达式:$.data.projectId,没有提取到对应的值
|
||||
2023-07-31 20:57:50 | ERROR | 异常用例: **safe_5_劳务基础配置_查询配置**
|
||||
'FAIL' unexpectedly found in ('FAIL', [{'检查项': '$.data.projectId', '期望值': '103654', '实际值': [], '断言方法': 'contained_by:实际值被包含在期望值中'}]) : FAIL 存在结果元组中
|
||||
2023-07-31 21:16:44 | ERROR | 提取失败:提取表达式:$.data.projectId,没有提取到对应的值
|
||||
2023-07-31 21:27:15 | ERROR | | called clear_date | error: 快看,异常了,别唧唧哇哇,快排查!!: [Errno 13] Permission denied: 'E:\\apitest\\cases\\cases\\test_api.xlsx'
|
||||
2023-07-31 21:27:16 | ERROR | | called write_back | error: 快看,异常了,别唧唧哇哇,快排查!!: [Errno 13] Permission denied: 'E:\\apitest\\cases\\cases\\test_api.xlsx'
|
||||
2023-07-31 21:27:17 | ERROR | | called write_back | error: 快看,异常了,别唧唧哇哇,快排查!!: [Errno 13] Permission denied: 'E:\\apitest\\cases\\cases\\test_api.xlsx'
|
||||
2023-07-31 21:27:18 | ERROR | 提取失败:提取表达式:$.data.projectId,没有提取到对应的值
|
||||
2023-07-31 21:27:18 | ERROR | 异常用例: **safe_5_劳务基础配置_查询配置**
|
||||
'in <string>' requires string as left operand, not list
|
||||
2023-07-31 21:27:18 | ERROR | | called write_back | error: 快看,异常了,别唧唧哇哇,快排查!!: [Errno 13] Permission denied: 'E:\\apitest\\cases\\cases\\test_api.xlsx'
|
||||
2023-07-31 21:27:57 | ERROR | 提取失败:提取表达式:$.data.projectId,没有提取到对应的值
|
||||
2023-07-31 21:27:57 | ERROR | 异常用例: **safe_5_劳务基础配置_查询配置**
|
||||
'in <string>' requires string as left operand, not list
|
||||
2023-07-31 21:32:53 | ERROR | 提取失败:提取表达式:$.data.projectId,没有提取到对应的值
|
||||
2023-07-31 21:32:53 | ERROR | 异常用例: **safe_5_劳务基础配置_查询配置**
|
||||
'in <string>' requires string as left operand, not list
|
||||
2023-07-31 21:46:05 | ERROR | 提取失败:提取表达式:$.data.projectId,没有提取到对应的值
|
||||
2023-07-31 21:46:05 | ERROR | 异常用例: **safe_5_劳务基础配置_查询配置**
|
||||
'in <string>' requires string as left operand, not list
|
||||
2023-07-31 21:51:08 | ERROR | 提取失败:提取表达式:$.data.projectId,没有提取到对应的值
|
||||
2023-07-31 21:51:08 | ERROR | 异常用例: **safe_5_劳务基础配置_查询配置**
|
||||
'in <string>' requires string as left operand, not list
|
|
@ -12,7 +12,7 @@ import sys
|
|||
sys.path.append("../")
|
||||
sys.path.append("./common")
|
||||
from jsonpath_ng import parse
|
||||
from common.environments import Environments
|
||||
from common.utils.environments import Environments
|
||||
from common.data_extraction import logger
|
||||
|
||||
REPLACE_DICT = {
|
||||
|
|
|
@ -79,7 +79,7 @@ class DependentParameter(DataExtractor):
|
|||
|
||||
|
||||
if __name__ == '__main__':
|
||||
from common.environments import Environments
|
||||
from common.utils.environments import Environments
|
||||
|
||||
dps = {
|
||||
"{{var_a}}": "foo",
|
||||
|
|
|
@ -6,7 +6,7 @@ import jsonpath
|
|||
import pymongo
|
||||
|
||||
from dateutil import parser
|
||||
from common.config import Config
|
||||
from config import Config
|
||||
from common.file_handling.do_excel import DoExcel
|
||||
|
||||
sys.path.append("../")
|
||||
|
|
|
@ -15,7 +15,6 @@ from dbutils.pooled_db import PooledDB
|
|||
from pymysql.cursors import DictCursor
|
||||
|
||||
from common.database import logger
|
||||
from common.utils.decorators import singleton
|
||||
|
||||
|
||||
# @singleton
|
||||
|
@ -139,8 +138,6 @@ if __name__ == '__main__':
|
|||
}
|
||||
res = MysqlClient(database_2).execute_sql(sql_2)
|
||||
print("数据执行结果", res)
|
||||
from common.data_extraction.data_extractor import DataExtractor
|
||||
from common.environments import Environments
|
||||
|
||||
# t = DataExtractor()
|
||||
# t.substitute_data(res, jp_dict={"total": "$.select_sale[0].total", "total_1": "$..total"})
|
||||
|
|
|
@ -132,7 +132,7 @@ class DoExcel:
|
|||
|
||||
|
||||
if __name__ == '__main__':
|
||||
from common.config import Config
|
||||
from config import Config
|
||||
|
||||
file_n = Config.test_case
|
||||
excel = DoExcel(file_n)
|
||||
|
|
|
@ -176,7 +176,7 @@ if __name__ == '__main__':
|
|||
data = [{"url": "1234", "header": "2134", "method": "get", "body": "hhh", "ok": 12345},
|
||||
{"url": "1234", "header": "2134"},
|
||||
{"url": "1234", "header": "2134", "method": "{}sss", "body": json.dumps({})}]
|
||||
from common.config import Config
|
||||
from config import Config
|
||||
|
||||
template_file = Config.templates
|
||||
excel = DoExcel(path=template_file)
|
||||
|
|
|
@ -14,7 +14,7 @@ from configparser import RawConfigParser
|
|||
|
||||
import yaml
|
||||
|
||||
from common.config import Config
|
||||
from config import Config
|
||||
|
||||
|
||||
class FileUtils:
|
||||
|
|
|
@ -10,7 +10,7 @@ import logging
|
|||
import time
|
||||
from logging import handlers
|
||||
|
||||
from common.config import Config
|
||||
from config import Config
|
||||
|
||||
|
||||
class MyLog:
|
||||
|
|
|
@ -11,7 +11,7 @@ from time import perf_counter
|
|||
|
||||
from loguru import logger
|
||||
|
||||
from common.config import Config
|
||||
from config import Config
|
||||
from common.utils.decorators import singleton
|
||||
|
||||
LOG_DIR = Config.log_path
|
||||
|
|
|
@ -107,7 +107,7 @@ if __name__ == '__main__':
|
|||
res = parsing_openapi(file)
|
||||
print(res)
|
||||
from common.file_handling.excel import DoExcel
|
||||
from common.config import Config
|
||||
from config import Config
|
||||
|
||||
templates = Config.templates # 使用标准模板
|
||||
ex = DoExcel(templates)
|
||||
|
|
|
@ -115,7 +115,7 @@ if __name__ == '__main__':
|
|||
pat = r'..\..\cases\temporary_file\postman.json'
|
||||
res = parsing_postman(pat)
|
||||
from common.file_handling.excel import DoExcel
|
||||
from common.config import Config
|
||||
from config import Config
|
||||
|
||||
templates = Config.templates # 使用标准模板
|
||||
ex = DoExcel(templates)
|
||||
|
|
|
@ -34,7 +34,7 @@ class Environments:
|
|||
|
||||
if __name__ == '__main__':
|
||||
from common.file_handling.do_excel import DoExcel
|
||||
from common.config import Config
|
||||
from config import Config
|
||||
|
||||
test_file = Config.test_case
|
||||
do_excel = DoExcel(test_file)
|
|
@ -57,7 +57,7 @@ class LoadScript:
|
|||
|
||||
|
||||
if __name__ == '__main__':
|
||||
from common.config import Config
|
||||
from config import Config
|
||||
|
||||
SCRIPTS_DIR = Config.SCRIPTS_DIR
|
||||
load_and_exe_s = LoadScript()
|
||||
|
|
|
@ -22,7 +22,7 @@ class Validator(Loaders):
|
|||
2、校验期望结果与实际结果与预期一致,并返回校验结果
|
||||
"""
|
||||
validate_variables_list = []
|
||||
built_in_comparators = Loaders.load_built_in_comparators()
|
||||
assertions = []
|
||||
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
|
@ -61,47 +61,44 @@ class Validator(Loaders):
|
|||
else:
|
||||
logger.error("参数格式错误!")
|
||||
|
||||
def validate(self, resp_obj=None):
|
||||
def validate(self, resp=None):
|
||||
"""
|
||||
校验期望结果与实际结果与预期一致
|
||||
Args:
|
||||
resp_obj: ResponseObject对象实例
|
||||
resp: ResponseObject对象实例
|
||||
|
||||
Returns:
|
||||
|
||||
"""
|
||||
|
||||
validate_pass = "PASS"
|
||||
|
||||
# 记录校验失败的原因
|
||||
failure_reason = []
|
||||
validate_result = "通过"
|
||||
for validate_variable in self.validate_variables_list:
|
||||
check_item = validate_variable['check']
|
||||
expect_value = validate_variable['expect']
|
||||
comparator = validate_variable['comparator']
|
||||
actual_value = Extractor.extract_value_by_jsonpath(resp_obj=resp_obj, expr=check_item)
|
||||
actual_value = Extractor.extract_value_by_jsonpath(resp_obj=resp, expr=check_item)
|
||||
try:
|
||||
# 获取比较器
|
||||
fun = self.built_in_comparators[comparator]
|
||||
|
||||
fun = self.load_built_in_comparators()[comparator]
|
||||
fun(actual_value=actual_value, expect_value=expect_value)
|
||||
except (AssertionError, TypeError):
|
||||
validate_pass = "FAIL"
|
||||
except (AssertionError, TypeError) as e:
|
||||
validate_result = "失败"
|
||||
raise e
|
||||
finally:
|
||||
failure_reason.append({
|
||||
self.assertions.append({
|
||||
'检查项': check_item,
|
||||
'期望值': expect_value,
|
||||
'实际值': actual_value,
|
||||
'断言方法': comparator_dict.get(comparator),
|
||||
"断言结果": validate_result
|
||||
})
|
||||
return validate_pass, failure_reason
|
||||
|
||||
def run_validate(self, validate_variables, resp_obj=None):
|
||||
def run_validate(self, validate_variables, resp=None):
|
||||
"""
|
||||
统一格式化测试用例的验证变量validate,然后校验期望结果与实际结果与预期一致
|
||||
Args:
|
||||
validate_variables:参数格式 list、dict
|
||||
resp_obj:ResponseObject对象实例
|
||||
resp:ResponseObject对象实例
|
||||
|
||||
Returns:返回校验结果
|
||||
|
||||
|
@ -110,10 +107,11 @@ class Validator(Loaders):
|
|||
return ""
|
||||
# 清空校验变量
|
||||
self.validate_variables_list.clear()
|
||||
self.assertions.clear()
|
||||
self.uniform_validate(validate_variables)
|
||||
if not self.validate_variables_list:
|
||||
raise "uniform_validate 执行失败,无法进行 validate 校验"
|
||||
return self.validate(resp_obj)
|
||||
self.validate(resp)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
@ -124,6 +122,9 @@ if __name__ == '__main__':
|
|||
]
|
||||
resp_obj = {"code": "200", "result": {"user": {"name": "chenyongzhi"}}}
|
||||
validator = Validator()
|
||||
print(validator.run_validate(validate_variables1, resp_obj))
|
||||
print(validator.run_validate(validate_variables2, resp_obj))
|
||||
print(validator.run_validate(validate_variables2, resp_obj))
|
||||
validator.run_validate(validate_variables1, resp_obj)
|
||||
print(validator.assertions)
|
||||
validator.run_validate(validate_variables2, resp_obj)
|
||||
print(validator.assertions)
|
||||
validator.run_validate(validate_variables2, resp_obj)
|
||||
print(validator.assertions)
|
||||
|
|
|
@ -4,14 +4,13 @@ import os
|
|||
class Config:
|
||||
# 根目录路径
|
||||
# *****************************************************************
|
||||
base_path = os.path.dirname(os.path.dirname(__file__))
|
||||
current_path = os.path.dirname(__file__)
|
||||
base_path = os.path.dirname(__file__)
|
||||
# *****************************************************************
|
||||
# 测试数据所在路径
|
||||
# *****************************************************************
|
||||
templates = os.path.join(base_path, "cases", "templates", "template.xlsx") # 模板文件
|
||||
# test_case = os.path.join(base_path, "cases", "cases", "test_api.xlsx")
|
||||
test_case = os.path.join(base_path, "cases", "cases", "test_cases.xlsx")
|
||||
test_case = os.path.join(base_path, "cases", "cases", "test_api.xlsx")
|
||||
# test_case = os.path.join(base_path, "cases", "cases", "test_cases.xlsx")
|
||||
test_files = os.path.join(base_path, 'cases', 'files')
|
||||
# *****************************************************************
|
||||
|
||||
|
@ -33,5 +32,4 @@ if __name__ == '__main__':
|
|||
print(test.test_case)
|
||||
print(test.test_report)
|
||||
print(test.test_case)
|
||||
print(test.current_path)
|
||||
print(test.SCRIPTS_DIR)
|
|
@ -1,6 +1,6 @@
|
|||
import os.path
|
||||
|
||||
from common.config import Config
|
||||
from config import Config
|
||||
from common.file_handling.excel import DoExcel
|
||||
from common.parsing.parsing_openapi import parsing_openapi
|
||||
from common.parsing.parsing_postman import parsing_postman
|
||||
|
|
361
jmeter.log
361
jmeter.log
|
@ -1,361 +0,0 @@
|
|||
2023-07-19 17:43:32,895 INFO o.a.j.u.JMeterUtils: Setting Locale to zh_CN
|
||||
2023-07-19 17:43:32,909 INFO o.a.j.JMeter: Loading user properties from: D:\application\apache-jmeter-5.1.1\bin\user.properties
|
||||
2023-07-19 17:43:32,913 INFO o.a.j.JMeter: Loading system properties from: D:\application\apache-jmeter-5.1.1\bin\system.properties
|
||||
2023-07-19 17:43:32,925 INFO o.a.j.JMeter: Copyright (c) 1998-2019 The Apache Software Foundation
|
||||
2023-07-19 17:43:32,925 INFO o.a.j.JMeter: Version 5.1.1 r1855137
|
||||
2023-07-19 17:43:32,925 INFO o.a.j.JMeter: java.version=1.8.0_341
|
||||
2023-07-19 17:43:32,925 INFO o.a.j.JMeter: java.vm.name=Java HotSpot(TM) 64-Bit Server VM
|
||||
2023-07-19 17:43:32,925 INFO o.a.j.JMeter: os.name=Windows 10
|
||||
2023-07-19 17:43:32,925 INFO o.a.j.JMeter: os.arch=amd64
|
||||
2023-07-19 17:43:32,926 INFO o.a.j.JMeter: os.version=10.0
|
||||
2023-07-19 17:43:32,926 INFO o.a.j.JMeter: file.encoding=UTF-8
|
||||
2023-07-19 17:43:32,926 INFO o.a.j.JMeter: java.awt.headless=null
|
||||
2023-07-19 17:43:32,926 INFO o.a.j.JMeter: Max memory =1073741824
|
||||
2023-07-19 17:43:32,926 INFO o.a.j.JMeter: Available Processors =12
|
||||
2023-07-19 17:43:32,939 INFO o.a.j.JMeter: Default Locale=English (EN)
|
||||
2023-07-19 17:43:32,939 INFO o.a.j.JMeter: JMeter Locale=Chinese (China)
|
||||
2023-07-19 17:43:32,939 INFO o.a.j.JMeter: JMeterHome=D:\application\apache-jmeter-5.1.1
|
||||
2023-07-19 17:43:32,939 INFO o.a.j.JMeter: user.dir =D:\app\apitest
|
||||
2023-07-19 17:43:32,939 INFO o.a.j.JMeter: PWD =D:\app\apitest
|
||||
2023-07-19 17:43:32,941 INFO o.a.j.JMeter: IP: 10.8.68.32 Name: BDR8SBDTY2 FullName: BDR8SBDTY2.countrygarden.com.cn
|
||||
2023-07-19 17:43:33,346 INFO o.a.j.g.a.LookAndFeelCommand: Installing Darcula LAF
|
||||
2023-07-19 17:43:33,365 INFO o.a.j.g.a.LookAndFeelCommand: Using look and feel: com.bulenkov.darcula.DarculaLaf [Darcula]
|
||||
2023-07-19 17:43:33,365 INFO o.a.j.JMeter: Setting LAF to: com.bulenkov.darcula.DarculaLaf
|
||||
2023-07-19 17:43:33,429 INFO o.a.j.JMeter: Loaded icon properties from org/apache/jmeter/images/icon.properties
|
||||
2023-07-19 17:43:34,959 WARN o.j.r.PluginManager: Found JAR conflict: D:\application\apache-jmeter-5.1.1\lib\ext\JMeterPlugins-Standard.jar and D:\application\apache-jmeter-5.1.1\lib\JMeterPlugins-Standard.jar
|
||||
2023-07-19 17:43:35,078 INFO o.j.r.JARSourceHTTP: Requesting https://jmeter-plugins.org/repo/?installID=jenkins-86f2c13337c86aa66b914535a23223c9-gui
|
||||
2023-07-19 17:43:36,148 WARN o.a.j.g.u.MenuFactory: Could not instantiate class: kg.apc.jmeter.reporters.LoadosophiaUploaderGui
|
||||
java.lang.reflect.InvocationTargetException: null
|
||||
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_341]
|
||||
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) ~[?:1.8.0_341]
|
||||
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.reflect.Constructor.newInstance(Unknown Source) ~[?:1.8.0_341]
|
||||
at org.apache.jmeter.gui.util.MenuFactory.getGUIComponent(MenuFactory.java:174) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
|
||||
at org.apache.jmeter.gui.util.MenuFactory.initializeMenus(MenuFactory.java:141) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
|
||||
at org.apache.jmeter.gui.util.MenuFactory.<clinit>(MenuFactory.java:106) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
|
||||
at org.apache.jmeter.control.gui.TestPlanGui.createPopupMenu(TestPlanGui.java:92) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
|
||||
at org.apache.jmeter.gui.tree.JMeterTreeNode.createPopupMenu(JMeterTreeNode.java:185) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
|
||||
at org.apache.jmeter.gui.action.EditCommand.doAction(EditCommand.java:46) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
|
||||
at org.apache.jmeter.gui.action.ActionRouter.performAction(ActionRouter.java:88) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
|
||||
at org.apache.jmeter.gui.action.ActionRouter.lambda$actionPerformed$0(ActionRouter.java:70) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
|
||||
at java.awt.event.InvocationEvent.dispatch(Unknown Source) [?:1.8.0_341]
|
||||
at java.awt.EventQueue.dispatchEventImpl(Unknown Source) [?:1.8.0_341]
|
||||
at java.awt.EventQueue.access$500(Unknown Source) [?:1.8.0_341]
|
||||
at java.awt.EventQueue$3.run(Unknown Source) [?:1.8.0_341]
|
||||
at java.awt.EventQueue$3.run(Unknown Source) [?:1.8.0_341]
|
||||
at java.security.AccessController.doPrivileged(Native Method) [?:1.8.0_341]
|
||||
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) [?:1.8.0_341]
|
||||
at java.awt.EventQueue.dispatchEvent(Unknown Source) [?:1.8.0_341]
|
||||
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) [?:1.8.0_341]
|
||||
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) [?:1.8.0_341]
|
||||
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) [?:1.8.0_341]
|
||||
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) [?:1.8.0_341]
|
||||
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) [?:1.8.0_341]
|
||||
at java.awt.EventDispatchThread.run(Unknown Source) [?:1.8.0_341]
|
||||
Caused by: java.lang.NoClassDefFoundError: org/apache/commons/httpclient/methods/multipart/PartSource
|
||||
at kg.apc.jmeter.reporters.LoadosophiaUploaderGui.init(LoadosophiaUploaderGui.java:130) ~[JMeterPlugins-Standard.jar:?]
|
||||
at kg.apc.jmeter.reporters.LoadosophiaUploaderGui.<init>(LoadosophiaUploaderGui.java:36) ~[JMeterPlugins-Standard.jar:?]
|
||||
... 26 more
|
||||
Caused by: java.lang.ClassNotFoundException: org.apache.commons.httpclient.methods.multipart.PartSource
|
||||
at java.net.URLClassLoader.findClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at kg.apc.jmeter.reporters.LoadosophiaUploaderGui.init(LoadosophiaUploaderGui.java:130) ~[JMeterPlugins-Standard.jar:?]
|
||||
at kg.apc.jmeter.reporters.LoadosophiaUploaderGui.<init>(LoadosophiaUploaderGui.java:36) ~[JMeterPlugins-Standard.jar:?]
|
||||
... 26 more
|
||||
2023-07-19 17:43:36,170 WARN o.a.j.g.u.MenuFactory: Could not instantiate class: kg.apc.jmeter.threads.UltimateThreadGroupGui
|
||||
java.lang.reflect.InvocationTargetException: null
|
||||
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_341]
|
||||
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) ~[?:1.8.0_341]
|
||||
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.reflect.Constructor.newInstance(Unknown Source) ~[?:1.8.0_341]
|
||||
at org.apache.jmeter.gui.util.MenuFactory.getGUIComponent(MenuFactory.java:174) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
|
||||
at org.apache.jmeter.gui.util.MenuFactory.initializeMenus(MenuFactory.java:141) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
|
||||
at org.apache.jmeter.gui.util.MenuFactory.<clinit>(MenuFactory.java:106) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
|
||||
at org.apache.jmeter.control.gui.TestPlanGui.createPopupMenu(TestPlanGui.java:92) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
|
||||
at org.apache.jmeter.gui.tree.JMeterTreeNode.createPopupMenu(JMeterTreeNode.java:185) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
|
||||
at org.apache.jmeter.gui.action.EditCommand.doAction(EditCommand.java:46) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
|
||||
at org.apache.jmeter.gui.action.ActionRouter.performAction(ActionRouter.java:88) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
|
||||
at org.apache.jmeter.gui.action.ActionRouter.lambda$actionPerformed$0(ActionRouter.java:70) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
|
||||
at java.awt.event.InvocationEvent.dispatch(Unknown Source) [?:1.8.0_341]
|
||||
at java.awt.EventQueue.dispatchEventImpl(Unknown Source) [?:1.8.0_341]
|
||||
at java.awt.EventQueue.access$500(Unknown Source) [?:1.8.0_341]
|
||||
at java.awt.EventQueue$3.run(Unknown Source) [?:1.8.0_341]
|
||||
at java.awt.EventQueue$3.run(Unknown Source) [?:1.8.0_341]
|
||||
at java.security.AccessController.doPrivileged(Native Method) [?:1.8.0_341]
|
||||
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) [?:1.8.0_341]
|
||||
at java.awt.EventQueue.dispatchEvent(Unknown Source) [?:1.8.0_341]
|
||||
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) [?:1.8.0_341]
|
||||
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) [?:1.8.0_341]
|
||||
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) [?:1.8.0_341]
|
||||
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) [?:1.8.0_341]
|
||||
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) [?:1.8.0_341]
|
||||
at java.awt.EventDispatchThread.run(Unknown Source) [?:1.8.0_341]
|
||||
Caused by: java.lang.NoClassDefFoundError: org/apache/jmeter/testelement/TestListener
|
||||
at java.lang.ClassLoader.defineClass1(Native Method) ~[?:1.8.0_341]
|
||||
at java.lang.ClassLoader.defineClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.security.SecureClassLoader.defineClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.net.URLClassLoader.defineClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.net.URLClassLoader.access$100(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.net.URLClassLoader$1.run(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.net.URLClassLoader$1.run(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_341]
|
||||
at java.net.URLClassLoader.findClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.Class.getDeclaredMethods0(Native Method) ~[?:1.8.0_341]
|
||||
at java.lang.Class.privateGetDeclaredMethods(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.Class.getDeclaredMethod(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.awt.Component.isCoalesceEventsOverriden(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.awt.Component.access$500(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.awt.Component$3.run(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.awt.Component$3.run(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_341]
|
||||
at java.awt.Component.checkCoalescing(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.awt.Component.<init>(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.awt.Container.<init>(Unknown Source) ~[?:1.8.0_341]
|
||||
at javax.swing.JComponent.<init>(Unknown Source) ~[?:1.8.0_341]
|
||||
at javax.swing.JPanel.<init>(Unknown Source) ~[?:1.8.0_341]
|
||||
at javax.swing.JPanel.<init>(Unknown Source) ~[?:1.8.0_341]
|
||||
at javax.swing.JPanel.<init>(Unknown Source) ~[?:1.8.0_341]
|
||||
at org.apache.jmeter.gui.AbstractJMeterGuiComponent.<init>(AbstractJMeterGuiComponent.java:77) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
|
||||
at org.apache.jmeter.threads.gui.AbstractThreadGroupGui.<init>(AbstractThreadGroupGui.java:55) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
|
||||
at kg.apc.jmeter.threads.UltimateThreadGroupGui.<init>(UltimateThreadGroupGui.java:79) ~[JMeterPlugins-Standard.jar:?]
|
||||
... 26 more
|
||||
Caused by: java.lang.ClassNotFoundException: org.apache.jmeter.testelement.TestListener
|
||||
at java.net.URLClassLoader.findClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.ClassLoader.defineClass1(Native Method) ~[?:1.8.0_341]
|
||||
at java.lang.ClassLoader.defineClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.security.SecureClassLoader.defineClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.net.URLClassLoader.defineClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.net.URLClassLoader.access$100(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.net.URLClassLoader$1.run(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.net.URLClassLoader$1.run(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_341]
|
||||
at java.net.URLClassLoader.findClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.Class.getDeclaredMethods0(Native Method) ~[?:1.8.0_341]
|
||||
at java.lang.Class.privateGetDeclaredMethods(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.Class.getDeclaredMethod(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.awt.Component.isCoalesceEventsOverriden(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.awt.Component.access$500(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.awt.Component$3.run(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.awt.Component$3.run(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_341]
|
||||
at java.awt.Component.checkCoalescing(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.awt.Component.<init>(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.awt.Container.<init>(Unknown Source) ~[?:1.8.0_341]
|
||||
at javax.swing.JComponent.<init>(Unknown Source) ~[?:1.8.0_341]
|
||||
at javax.swing.JPanel.<init>(Unknown Source) ~[?:1.8.0_341]
|
||||
at javax.swing.JPanel.<init>(Unknown Source) ~[?:1.8.0_341]
|
||||
at javax.swing.JPanel.<init>(Unknown Source) ~[?:1.8.0_341]
|
||||
at org.apache.jmeter.gui.AbstractJMeterGuiComponent.<init>(AbstractJMeterGuiComponent.java:77) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
|
||||
at org.apache.jmeter.threads.gui.AbstractThreadGroupGui.<init>(AbstractThreadGroupGui.java:55) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
|
||||
at kg.apc.jmeter.threads.UltimateThreadGroupGui.<init>(UltimateThreadGroupGui.java:79) ~[JMeterPlugins-Standard.jar:?]
|
||||
... 26 more
|
||||
2023-07-19 17:43:36,172 WARN o.a.j.g.u.MenuFactory: Could not instantiate class: kg.apc.jmeter.timers.VariableThroughputTimerGui
|
||||
java.lang.reflect.InvocationTargetException: null
|
||||
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_341]
|
||||
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) ~[?:1.8.0_341]
|
||||
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.reflect.Constructor.newInstance(Unknown Source) ~[?:1.8.0_341]
|
||||
at org.apache.jmeter.gui.util.MenuFactory.getGUIComponent(MenuFactory.java:174) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
|
||||
at org.apache.jmeter.gui.util.MenuFactory.initializeMenus(MenuFactory.java:141) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
|
||||
at org.apache.jmeter.gui.util.MenuFactory.<clinit>(MenuFactory.java:106) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
|
||||
at org.apache.jmeter.control.gui.TestPlanGui.createPopupMenu(TestPlanGui.java:92) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
|
||||
at org.apache.jmeter.gui.tree.JMeterTreeNode.createPopupMenu(JMeterTreeNode.java:185) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
|
||||
at org.apache.jmeter.gui.action.EditCommand.doAction(EditCommand.java:46) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
|
||||
at org.apache.jmeter.gui.action.ActionRouter.performAction(ActionRouter.java:88) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
|
||||
at org.apache.jmeter.gui.action.ActionRouter.lambda$actionPerformed$0(ActionRouter.java:70) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
|
||||
at java.awt.event.InvocationEvent.dispatch(Unknown Source) [?:1.8.0_341]
|
||||
at java.awt.EventQueue.dispatchEventImpl(Unknown Source) [?:1.8.0_341]
|
||||
at java.awt.EventQueue.access$500(Unknown Source) [?:1.8.0_341]
|
||||
at java.awt.EventQueue$3.run(Unknown Source) [?:1.8.0_341]
|
||||
at java.awt.EventQueue$3.run(Unknown Source) [?:1.8.0_341]
|
||||
at java.security.AccessController.doPrivileged(Native Method) [?:1.8.0_341]
|
||||
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) [?:1.8.0_341]
|
||||
at java.awt.EventQueue.dispatchEvent(Unknown Source) [?:1.8.0_341]
|
||||
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) [?:1.8.0_341]
|
||||
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) [?:1.8.0_341]
|
||||
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) [?:1.8.0_341]
|
||||
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) [?:1.8.0_341]
|
||||
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) [?:1.8.0_341]
|
||||
at java.awt.EventDispatchThread.run(Unknown Source) [?:1.8.0_341]
|
||||
Caused by: java.lang.NoClassDefFoundError: org/apache/jmeter/testelement/TestListener
|
||||
at java.lang.ClassLoader.defineClass1(Native Method) ~[?:1.8.0_341]
|
||||
at java.lang.ClassLoader.defineClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.security.SecureClassLoader.defineClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.net.URLClassLoader.defineClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.net.URLClassLoader.access$100(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.net.URLClassLoader$1.run(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.net.URLClassLoader$1.run(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_341]
|
||||
at java.net.URLClassLoader.findClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.Class.getDeclaredMethods0(Native Method) ~[?:1.8.0_341]
|
||||
at java.lang.Class.privateGetDeclaredMethods(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.Class.getDeclaredMethod(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.awt.Component.isCoalesceEventsOverriden(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.awt.Component.access$500(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.awt.Component$3.run(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.awt.Component$3.run(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_341]
|
||||
at java.awt.Component.checkCoalescing(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.awt.Component.<init>(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.awt.Container.<init>(Unknown Source) ~[?:1.8.0_341]
|
||||
at javax.swing.JComponent.<init>(Unknown Source) ~[?:1.8.0_341]
|
||||
at javax.swing.JPanel.<init>(Unknown Source) ~[?:1.8.0_341]
|
||||
at javax.swing.JPanel.<init>(Unknown Source) ~[?:1.8.0_341]
|
||||
at javax.swing.JPanel.<init>(Unknown Source) ~[?:1.8.0_341]
|
||||
at org.apache.jmeter.gui.AbstractJMeterGuiComponent.<init>(AbstractJMeterGuiComponent.java:77) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
|
||||
at org.apache.jmeter.timers.gui.AbstractTimerGui.<init>(AbstractTimerGui.java:33) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
|
||||
at kg.apc.jmeter.timers.VariableThroughputTimerGui.<init>(VariableThroughputTimerGui.java:63) ~[JMeterPlugins-Standard.jar:?]
|
||||
... 26 more
|
||||
Caused by: java.lang.ClassNotFoundException: org.apache.jmeter.testelement.TestListener
|
||||
at java.net.URLClassLoader.findClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.ClassLoader.defineClass1(Native Method) ~[?:1.8.0_341]
|
||||
at java.lang.ClassLoader.defineClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.security.SecureClassLoader.defineClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.net.URLClassLoader.defineClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.net.URLClassLoader.access$100(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.net.URLClassLoader$1.run(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.net.URLClassLoader$1.run(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_341]
|
||||
at java.net.URLClassLoader.findClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.Class.getDeclaredMethods0(Native Method) ~[?:1.8.0_341]
|
||||
at java.lang.Class.privateGetDeclaredMethods(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.Class.getDeclaredMethod(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.awt.Component.isCoalesceEventsOverriden(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.awt.Component.access$500(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.awt.Component$3.run(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.awt.Component$3.run(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_341]
|
||||
at java.awt.Component.checkCoalescing(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.awt.Component.<init>(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.awt.Container.<init>(Unknown Source) ~[?:1.8.0_341]
|
||||
at javax.swing.JComponent.<init>(Unknown Source) ~[?:1.8.0_341]
|
||||
at javax.swing.JPanel.<init>(Unknown Source) ~[?:1.8.0_341]
|
||||
at javax.swing.JPanel.<init>(Unknown Source) ~[?:1.8.0_341]
|
||||
at javax.swing.JPanel.<init>(Unknown Source) ~[?:1.8.0_341]
|
||||
at org.apache.jmeter.gui.AbstractJMeterGuiComponent.<init>(AbstractJMeterGuiComponent.java:77) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
|
||||
at org.apache.jmeter.timers.gui.AbstractTimerGui.<init>(AbstractTimerGui.java:33) ~[ApacheJMeter_core.jar:5.1.1 r1855137]
|
||||
at kg.apc.jmeter.timers.VariableThroughputTimerGui.<init>(VariableThroughputTimerGui.java:63) ~[JMeterPlugins-Standard.jar:?]
|
||||
... 26 more
|
||||
2023-07-19 17:43:36,836 INFO o.a.j.p.h.s.HTTPSamplerBase: Parser for text/html is org.apache.jmeter.protocol.http.parser.LagartoBasedHtmlParser
|
||||
2023-07-19 17:43:36,836 INFO o.a.j.p.h.s.HTTPSamplerBase: Parser for application/xhtml+xml is org.apache.jmeter.protocol.http.parser.LagartoBasedHtmlParser
|
||||
2023-07-19 17:43:36,836 INFO o.a.j.p.h.s.HTTPSamplerBase: Parser for application/xml is org.apache.jmeter.protocol.http.parser.LagartoBasedHtmlParser
|
||||
2023-07-19 17:43:36,836 INFO o.a.j.p.h.s.HTTPSamplerBase: Parser for text/xml is org.apache.jmeter.protocol.http.parser.LagartoBasedHtmlParser
|
||||
2023-07-19 17:43:36,836 INFO o.a.j.p.h.s.HTTPSamplerBase: Parser for text/vnd.wap.wml is org.apache.jmeter.protocol.http.parser.RegexpHTMLParser
|
||||
2023-07-19 17:43:36,836 INFO o.a.j.p.h.s.HTTPSamplerBase: Parser for text/css is org.apache.jmeter.protocol.http.parser.CssParser
|
||||
2023-07-19 17:43:37,658 WARN o.j.r.Plugin: Unable to load class: kg.apc.jmeter.reporters.LoadosophiaUploader
|
||||
java.lang.NoClassDefFoundError: org/apache/jmeter/testelement/TestListener
|
||||
at java.lang.ClassLoader.defineClass1(Native Method) ~[?:1.8.0_341]
|
||||
at java.lang.ClassLoader.defineClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.security.SecureClassLoader.defineClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.net.URLClassLoader.defineClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.net.URLClassLoader.access$100(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.net.URLClassLoader$1.run(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.net.URLClassLoader$1.run(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_341]
|
||||
at java.net.URLClassLoader.findClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at org.jmeterplugins.repository.Plugin.getJARPath(Plugin.java:202) [jmeter-plugins-manager-1.8.jar:?]
|
||||
at org.jmeterplugins.repository.Plugin.detectInstalledPlugin(Plugin.java:108) [jmeter-plugins-manager-1.8.jar:?]
|
||||
at org.jmeterplugins.repository.Plugin.detectInstalled(Plugin.java:97) [jmeter-plugins-manager-1.8.jar:?]
|
||||
at org.jmeterplugins.repository.PluginManager.load(PluginManager.java:86) [jmeter-plugins-manager-1.8.jar:?]
|
||||
at org.jmeterplugins.repository.PluginManagerMenuItem$1.run(PluginManagerMenuItem.java:38) [jmeter-plugins-manager-1.8.jar:?]
|
||||
Caused by: java.lang.ClassNotFoundException: org.apache.jmeter.testelement.TestListener
|
||||
at java.net.URLClassLoader.findClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_341]
|
||||
... 16 more
|
||||
2023-07-19 17:43:37,663 WARN o.j.r.Plugin: Unable to load class: kg.apc.jmeter.reporters.ConsoleStatusLogger
|
||||
java.lang.NoClassDefFoundError: org/apache/jmeter/testelement/TestListener
|
||||
at java.lang.ClassLoader.defineClass1(Native Method) ~[?:1.8.0_341]
|
||||
at java.lang.ClassLoader.defineClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.security.SecureClassLoader.defineClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.net.URLClassLoader.defineClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.net.URLClassLoader.access$100(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.net.URLClassLoader$1.run(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.net.URLClassLoader$1.run(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_341]
|
||||
at java.net.URLClassLoader.findClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at org.jmeterplugins.repository.Plugin.getJARPath(Plugin.java:202) [jmeter-plugins-manager-1.8.jar:?]
|
||||
at org.jmeterplugins.repository.Plugin.detectInstalledPlugin(Plugin.java:108) [jmeter-plugins-manager-1.8.jar:?]
|
||||
at org.jmeterplugins.repository.Plugin.detectInstalled(Plugin.java:97) [jmeter-plugins-manager-1.8.jar:?]
|
||||
at org.jmeterplugins.repository.PluginManager.load(PluginManager.java:86) [jmeter-plugins-manager-1.8.jar:?]
|
||||
at org.jmeterplugins.repository.PluginManagerMenuItem$1.run(PluginManagerMenuItem.java:38) [jmeter-plugins-manager-1.8.jar:?]
|
||||
Caused by: java.lang.ClassNotFoundException: org.apache.jmeter.testelement.TestListener
|
||||
at java.net.URLClassLoader.findClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_341]
|
||||
... 16 more
|
||||
2023-07-19 17:43:37,664 WARN o.j.r.Plugin: Unable to load class: kg.apc.jmeter.reporters.FlexibleFileWriter
|
||||
java.lang.NoClassDefFoundError: org/apache/jmeter/testelement/TestListener
|
||||
at java.lang.ClassLoader.defineClass1(Native Method) ~[?:1.8.0_341]
|
||||
at java.lang.ClassLoader.defineClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.security.SecureClassLoader.defineClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.net.URLClassLoader.defineClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.net.URLClassLoader.access$100(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.net.URLClassLoader$1.run(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.net.URLClassLoader$1.run(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_341]
|
||||
at java.net.URLClassLoader.findClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at org.jmeterplugins.repository.Plugin.getJARPath(Plugin.java:202) [jmeter-plugins-manager-1.8.jar:?]
|
||||
at org.jmeterplugins.repository.Plugin.detectInstalledPlugin(Plugin.java:108) [jmeter-plugins-manager-1.8.jar:?]
|
||||
at org.jmeterplugins.repository.Plugin.detectInstalled(Plugin.java:97) [jmeter-plugins-manager-1.8.jar:?]
|
||||
at org.jmeterplugins.repository.PluginManager.load(PluginManager.java:86) [jmeter-plugins-manager-1.8.jar:?]
|
||||
at org.jmeterplugins.repository.PluginManagerMenuItem$1.run(PluginManagerMenuItem.java:38) [jmeter-plugins-manager-1.8.jar:?]
|
||||
Caused by: java.lang.ClassNotFoundException: org.apache.jmeter.testelement.TestListener
|
||||
at java.net.URLClassLoader.findClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_341]
|
||||
... 16 more
|
||||
2023-07-19 17:43:37,665 WARN o.j.r.Plugin: Unable to load class: kg.apc.jmeter.timers.VariableThroughputTimer
|
||||
java.lang.NoClassDefFoundError: org/apache/jmeter/testelement/TestListener
|
||||
at java.lang.ClassLoader.defineClass1(Native Method) ~[?:1.8.0_341]
|
||||
at java.lang.ClassLoader.defineClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.security.SecureClassLoader.defineClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.net.URLClassLoader.defineClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.net.URLClassLoader.access$100(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.net.URLClassLoader$1.run(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.net.URLClassLoader$1.run(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_341]
|
||||
at java.net.URLClassLoader.findClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at org.jmeterplugins.repository.Plugin.getJARPath(Plugin.java:202) [jmeter-plugins-manager-1.8.jar:?]
|
||||
at org.jmeterplugins.repository.Plugin.detectInstalledPlugin(Plugin.java:108) [jmeter-plugins-manager-1.8.jar:?]
|
||||
at org.jmeterplugins.repository.Plugin.detectInstalled(Plugin.java:97) [jmeter-plugins-manager-1.8.jar:?]
|
||||
at org.jmeterplugins.repository.PluginManager.load(PluginManager.java:86) [jmeter-plugins-manager-1.8.jar:?]
|
||||
at org.jmeterplugins.repository.PluginManagerMenuItem$1.run(PluginManagerMenuItem.java:38) [jmeter-plugins-manager-1.8.jar:?]
|
||||
Caused by: java.lang.ClassNotFoundException: org.apache.jmeter.testelement.TestListener
|
||||
at java.net.URLClassLoader.findClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_341]
|
||||
at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_341]
|
||||
... 16 more
|
||||
2023-07-19 17:43:37,674 INFO o.j.r.PluginManager: Plugins Status: [jpgc-graphs-basic=Standard, jpgc-graphs-additional=2.0, jpgc-cmd=Standard, jpgc-graphs-composite=Standard, jpgc-functions=2.2, jpgc-casutg=2.10, jpgc-dummy=Standard, jpgc-filterresults=2.2, jpgc-fifo=Standard, jpgc-json=2.7, mqtt-xmeter=2.0.2, mqtt-sampler=0.0.1-SNAPSHOT, jpgc-perfmon=Standard, jpgc-plugins-manager=1.8, jmeter-core=5.1.1, jmeter-ftp=5.1.1, jmeter-http=5.1.1, jmeter-jdbc=5.1.1, jmeter-jms=5.1.1, jmeter-junit=5.1.1, jmeter-java=5.1.1, jmeter-ldap=5.1.1, jmeter-mail=5.1.1, jmeter-mongodb=5.1.1, jmeter-native=5.1.1, jmeter-tcp=5.1.1, jmeter-components=5.1.1]
|
||||
2023-07-19 17:43:37,675 INFO o.j.r.PluginManagerMenuItem: Plugins Manager has upgrades: [jpgc-plugins-manager]
|
||||
2023-07-19 17:43:38,239 INFO o.a.j.e.KeyToolUtils: keytool found at 'keytool'
|
||||
2023-07-19 17:43:38,239 INFO o.a.j.p.h.p.ProxyControl: HTTP(S) Test Script Recorder SSL Proxy will use keys that support embedded 3rd party resources in file D:\application\apache-jmeter-5.1.1\bin\proxyserver.jks
|
||||
2023-07-19 17:43:38,472 INFO o.a.j.s.FileServer: Default base='D:\app\apitest'
|
||||
2023-07-19 17:43:39,393 INFO o.a.j.s.SampleResult: Note: Sample TimeStamps are START times
|
||||
2023-07-19 17:43:39,393 INFO o.a.j.s.SampleResult: sampleresult.default.encoding is set to UTF-8
|
||||
2023-07-19 17:43:39,393 INFO o.a.j.s.SampleResult: sampleresult.useNanoTime=true
|
||||
2023-07-19 17:43:39,393 INFO o.a.j.s.SampleResult: sampleresult.nanoThreadSleep=5000
|
||||
2023-07-19 17:56:44,961 INFO o.a.j.e.u.CompoundVariable: Note: Function class names must contain the string: '.functions.'
|
||||
2023-07-19 17:56:44,961 INFO o.a.j.e.u.CompoundVariable: Note: Function class names must not contain the string: '.gui.'
|
||||
2023-07-19 17:56:45,203 ERROR o.a.j.p.h.p.ProxyControl: Program error: test script recording target not found.
|
File diff suppressed because one or more lines are too long
2
run.py
2
run.py
|
@ -12,7 +12,7 @@ sys.path.append("./common")
|
|||
sys.path.append("./")
|
||||
sys.path.append('cases')
|
||||
|
||||
from common.config import Config
|
||||
from config import Config
|
||||
from unittestreport import TestRunner
|
||||
from common.utils.WxworkSms import WxWorkSms
|
||||
|
||||
|
|
|
@ -12,8 +12,8 @@ import unittest
|
|||
from ddt import ddt, data
|
||||
|
||||
from common import bif_functions
|
||||
from common.action import Action
|
||||
from common.config import Config
|
||||
from common.utils.action import Action
|
||||
from config import Config
|
||||
from common.file_handling.do_excel import DoExcel
|
||||
from extensions import dynamic_scaling_methods
|
||||
|
||||
|
@ -25,81 +25,82 @@ test_case, databases, initialize_data, host = excel.get_excel_init_and_cases()
|
|||
|
||||
@ddt
|
||||
class TestProjectApi(unittest.TestCase):
|
||||
maxDiff = None
|
||||
action = Action(initialize_data, bif_functions, databases)
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls) -> None:
|
||||
pass
|
||||
|
||||
def setUp(self) -> None:
|
||||
self.action.set_bif_fun(dynamic_scaling_methods)
|
||||
|
||||
@data(*test_case)
|
||||
def test_api(self, item):
|
||||
sheet, iid, condition, st, name, desc, h_crypto, r_crypto, method, expected = self.action.base_info(item)
|
||||
if self.action.is_run(condition):
|
||||
self.skipTest("这个测试用例听说泡面比较好吃,所以放弃执行了!!")
|
||||
regex, keys, deps, jp_dict, ex_request_data = self.action.extractor_info(item)
|
||||
setup_script, teardown_script = self.action.script(item)
|
||||
self.action.pause_execution(st)
|
||||
|
||||
# 首执行 sql
|
||||
self.action.exc_sql(item)
|
||||
if method.upper() == 'SQL':
|
||||
self.skipTest("这条测试用例被 SQL 吃了,所以放弃执行了!!")
|
||||
|
||||
# 执行动态代码
|
||||
item = self.action.execute_dynamic_code(item, setup_script)
|
||||
|
||||
# prepost_script = f"prepost_script_{sheet}_{iid}.py"
|
||||
# item = self.action.load_and_execute_script(Config.SCRIPTS_DIR, prepost_script, "setup", item)
|
||||
|
||||
# 修正参数
|
||||
item = self.action.replace_dependent_parameter(item)
|
||||
url, query_str, request_data, headers, request_data_type = self.action.request_info(item)
|
||||
|
||||
# 分析请求参数信息
|
||||
headers, request_data = self.action.analysis_request(request_data, h_crypto, headers, r_crypto, ex_request_data)
|
||||
result_tp = None
|
||||
result = "PASS"
|
||||
|
||||
# 执行请求操作
|
||||
kwargs = {request_data_type: request_data, 'headers': headers, "params": query_str}
|
||||
response = self.action.send_request(host, url, method, teardown_script, **kwargs)
|
||||
|
||||
try:
|
||||
# 提取响应
|
||||
self.action.substitute_data(response.json(), regex=regex, keys=keys, deps=deps, jp_dict=jp_dict)
|
||||
except Exception as err:
|
||||
self.action.logger.error(f"提取响应失败:{sheet}_{iid}_{name}_{desc}"
|
||||
f"\nregex={regex};"
|
||||
f" \nkeys={keys};"
|
||||
f"\ndeps={deps};"
|
||||
f"\njp_dict={jp_dict}"
|
||||
f"\n{err}")
|
||||
|
||||
# 修正断言
|
||||
expected = self.action.replace_dependent_parameter(expected)
|
||||
try:
|
||||
print(f"期望结果--> {expected}")
|
||||
# 执行断言 返回结果元组
|
||||
result_tp = self.action.run_validate(expected, response.json())
|
||||
self.assertNotIn("FAIL", result_tp, "FAIL 存在结果元组中")
|
||||
except Exception as e:
|
||||
result = "FAIL"
|
||||
self.action.logger.error(f'异常用例: **{sheet}_{iid}_{name}_{desc}**\n{e}')
|
||||
raise e
|
||||
finally:
|
||||
response = response.text if response is not None else str(response)
|
||||
# 响应结果及测试结果回写 excel
|
||||
excel.write_back(sheet_name=sheet, i=iid, response=response, test_result=result, assert_log=str(result_tp))
|
||||
|
||||
@classmethod
|
||||
def tearDownClass(cls) -> None:
|
||||
excel.close_excel()
|
||||
cls.action.logger.info(f"所有用例执行完毕")
|
||||
maxDiff = None
|
||||
action = Action(initialize_data, bif_functions, databases)
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls) -> None:
|
||||
pass
|
||||
|
||||
def setUp(self) -> None:
|
||||
self.action.set_bif_fun(dynamic_scaling_methods)
|
||||
|
||||
@data(*test_case)
|
||||
def test_api(self, item):
|
||||
sheet, iid, condition, st, name, desc, h_crypto, r_crypto, method, expected = self.action.base_info(item)
|
||||
if self.action.is_run(condition):
|
||||
self.skipTest("这个测试用例听说泡面比较好吃,所以放弃执行了!!")
|
||||
regex, keys, deps, jp_dict, ex_request_data = self.action.extractor_info(item)
|
||||
setup_script, teardown_script = self.action.script(item)
|
||||
self.action.pause_execution(st)
|
||||
|
||||
# 首执行 sql
|
||||
self.action.exc_sql(item)
|
||||
if method.upper() == 'SQL':
|
||||
self.skipTest("这条测试用例被 SQL 吃了,所以放弃执行了!!")
|
||||
|
||||
# 执行动态代码
|
||||
item = self.action.execute_dynamic_code(item, setup_script)
|
||||
|
||||
# prepost_script = f"prepost_script_{sheet}_{iid}.py"
|
||||
# item = self.action.load_and_execute_script(Config.SCRIPTS_DIR, prepost_script, "setup", item)
|
||||
|
||||
# 修正参数
|
||||
item = self.action.replace_dependent_parameter(item)
|
||||
url, query_str, request_data, headers, request_data_type = self.action.request_info(item)
|
||||
|
||||
# 分析请求参数信息
|
||||
headers, request_data = self.action.analysis_request(request_data, h_crypto, headers, r_crypto, ex_request_data)
|
||||
result_tp = None
|
||||
result = "PASS"
|
||||
|
||||
# 执行请求操作
|
||||
kwargs = {request_data_type: request_data, 'headers': headers, "params": query_str}
|
||||
response = self.action.send_request(host, url, method, teardown_script, **kwargs)
|
||||
|
||||
try:
|
||||
# 提取响应
|
||||
self.action.substitute_data(response.json(), regex=regex, keys=keys, deps=deps, jp_dict=jp_dict)
|
||||
except Exception as err:
|
||||
self.action.logger.error(f"提取响应失败:{sheet}_{iid}_{name}_{desc}"
|
||||
f"\nregex={regex};"
|
||||
f" \nkeys={keys};"
|
||||
f"\ndeps={deps};"
|
||||
f"\njp_dict={jp_dict}"
|
||||
f"\n{err}")
|
||||
|
||||
# 修正断言
|
||||
expected = self.action.replace_dependent_parameter(expected)
|
||||
try:
|
||||
# print(f"期望结果--> {expected}")
|
||||
# 执行断言 返回结果元组
|
||||
self.action.run_validate(expected, response.json())
|
||||
except Exception as e:
|
||||
result = "FAIL"
|
||||
self.action.logger.error(f'异常用例: **{sheet}_{iid}_{name}_{desc}**\n{e}')
|
||||
raise e
|
||||
finally:
|
||||
print(f"断言结果-->", self.action.assertions)
|
||||
response = response.text if response is not None else str(response)
|
||||
# 响应结果及测试结果回写 excel
|
||||
excel.write_back(sheet_name=sheet, i=iid, response=response, test_result=result,
|
||||
assert_log=str(self.action.assertions))
|
||||
|
||||
@classmethod
|
||||
def tearDownClass(cls) -> None:
|
||||
excel.close_excel()
|
||||
cls.action.logger.info(f"所有用例执行完毕")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
unittest.main()
|
||||
|
|
Loading…
Reference in New Issue