completed merge

This commit is contained in:
chenyongzhiaaron 2023-08-01 08:41:26 +08:00
commit 94d1694b06
24 changed files with 158 additions and 521 deletions

View File

@ -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>

View File

@ -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>

View File

@ -1,36 +1,32 @@
2023-07-31 17:53:33 | ERROR | 数据库链接失败: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods
2023-07-31 17:55:12 | ERROR | 数据库链接失败: (1049, "Unknown database 'lea'")
2023-07-31 17:55:32 | ERROR | 数据库链接失败: (1049, "Unknown database 'lea'")
2023-07-31 17:55:46 | ERROR | 数据库链接失败: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods
2023-07-31 17:57:55 | ERROR | 数据库链接失败: (1045, "Access denied for user 'root'@'localhost' (using password: YES)")
2023-07-31 17:58:22 | ERROR | 数据库链接失败: (1045, "Access denied for user 'root'@'localhost' (using password: YES)")
2023-07-31 17:58:50 | ERROR | 数据库链接失败: (1045, "Access denied for user 'root'@'localhost' (using password: YES)")
2023-07-31 17:59:36 | ERROR | 数据库链接失败: (1045, "Access denied for user 'root'@'localhost' (using password: YES)")
2023-07-31 17:59:37 | ERROR | 提取响应失败安全纯净大屏_2_登录_非BIP用户登录
regex=None;
keys=None;
deps=None;
jp_dict={"BSP_TOKEN": "$.data.bspToken", "BSP_USER_TENANT": "$.data.currentTenantId"}
Expecting value: line 1 column 1 (char 0)
2023-07-31 17:59:37 | ERROR | 异常用例: **安全纯净大屏_2_登录_非BIP用户登录**
Expecting value: line 1 column 1 (char 0)
2023-07-31 17:59:39 | ERROR | key:<re.Match object; span=(115, 128), match='{{BSP_TOKEN}}'>,在关联参数表中查询不到,请检查关联参数字段提取及填写是否正常
2023-07-31 20:25:00 | ERROR | key:<re.Match object; span=(184, 197), match='{{BSP_TOKEN}}'>,在关联参数表中查询不到,请检查关联参数字段提取及填写是否正常
2023-07-31 17:59:39 | ERROR | 提取响应失败安全纯净大屏_4_劳务基础配置_绑定TV
regex=None;
keys=None;
deps=None;
jp_dict={"tvSequence": "$..tvSequence"}
Expecting value: line 1 column 1 (char 0)
2023-07-31 17:59:39 | ERROR | 异常用例: **安全纯净大屏_4_劳务基础配置_绑定TV**
Expecting value: line 1 column 1 (char 0)
2023-07-31 17:59:42 | ERROR | key:<re.Match object; span=(128, 141), 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 17:59:42 | ERROR | 提取响应失败安全纯净大屏_5_劳务基础配置_查询配置
regex=None;
keys=None;
deps=None;
jp_dict=None
Expecting value: line 1 column 1 (char 0)
2023-07-31 17:59:42 | ERROR | 异常用例: **安全纯净大屏_5_劳务基础配置_查询配置**
Expecting value: line 1 column 1 (char 0)
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

View File

@ -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 = {

View File

@ -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",

View File

@ -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("../")

View File

@ -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"})

View File

@ -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)

View File

@ -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)

View File

@ -14,7 +14,7 @@ from configparser import RawConfigParser
import yaml
from common.config import Config
from config import Config
class FileUtils:

View File

@ -10,7 +10,7 @@ import logging
import time
from logging import handlers
from common.config import Config
from config import Config
class MyLog:

View File

@ -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

View File

@ -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)

View File

@ -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)

View File

@ -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)

View 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()

View File

@ -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:参数格式 listdict
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)

View File

@ -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)

View File

@ -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

View File

@ -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
View File

@ -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

View File

@ -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()