Commit 87697efe by mengxh

api auto test v1

parent 809cba2c
import functools
import logging
import os
import time
def __loger(file_path):
#获取logger对象
logger=logging.getLogger()
#设置日志写入文件中的级别
logger.level=logging.INFO
hander=logging.FileHandler(file_path,mode='a',encoding='utf-8')
#设置文件的写入格式
formatter=logging.Formatter('时间:%(asctime)s - 日记级别:%(levelname)s, 日志信息:%(message)s')
#设置日志的文件格式
hander.setFormatter(formatter)
#
logger.addHandler(hander)
return logger
# print(__file__)
# print(os.path.dirname(__file__))
# print(os.path.join(os.path.dirname(__file__), 'report'))
#获取日志的存放路径
log_dir=os.path.join(os.path.join(os.path.dirname(__file__), 'report'), 'log')
#设置日志文件的名称
log_name='BPMAPItest'+time.strftime("%Y_%m_%d_%H_%M_%S",time.localtime())+"log"
#日志文件路径
log_path=os.path.join(log_dir,log_name)
__log=__loger(log_path)
"""
__doc__: 获取函数或者方法的描述信息
__name__: 获取函数或者方法的名称
__code__: 获取函数或者方法的对象
"""
# 定义日志的装饰器
def log_decorator(param):
# param使用被装饰对象的名称
@functools.wraps(param)
def inner(*args, **kwargs):
__log.info(
f"执行的功能为:{param.__name__}, 功能的描述为:{param.__doc__}, 所在的文件为:{param.__code__.co_filename}, 所在的行为:{param.__code__.co_firstlineno}")
try:
res = param(*args, **kwargs)
except Exception as e:
__log.error(
f"执行的功能为:{param.__name__}, 功能的描述为:{param.__doc__}, 所在的文件为:{param.__code__.co_filename}, 所在的行为:{param.__code__.co_firstlineno}.报错,错误为:{type(e)}, 错误的描述为:{e}")
raise e
else:
return res
return inner
\ No newline at end of file
# -*-coding:utf-8 -*- #
# ---------------------------------------------------------------------------
# ProjectName: test66
# FileName: db.py
# Author: lao_zhao
# Datetime: 2025/5/9 11:34
# Description:
#
# ---------------------------------------------------------------------------
import pymysql
from API2 import log_decorator
from API2.common.read_system_ini import ReadSystemIni
class DB:
@log_decorator
def __init__(self):
"""创建链接对象和游标对象"""
ini = ReadSystemIni()
self.conn = pymysql.connect(
host=ini.get_sql_connect_msg("host"),
port=int(ini.get_sql_connect_msg("port")),
user=ini.get_sql_connect_msg("user"),
password=ini.get_sql_connect_msg("password"),
database=ini.get_sql_connect_msg("database"),
charset="utf8"
)
self.cursor = self.conn.cursor()
@log_decorator
def close(self):
"""先关闭游标对象,再关闭链接对象"""
self.cursor.close()
self.conn.close()
@log_decorator
def delete(self, sql_sentence):
"""执行删除的sql语句"""
if isinstance(sql_sentence, str) and sql_sentence.lower().startswith("delete"):
self.cursor.execute(sql_sentence)
self.conn.commit()
else:
raise ValueError("删除的sql语句错误")
@log_decorator
def select(self, sql_sentence):
"""执行查询的sql语句,并返回查询"""
if isinstance(sql_sentence, str) and sql_sentence.lower().startswith("select"):
self.cursor.execute(sql_sentence)
select_result = self.cursor.fetchone()
if select_result:
return select_result[0]
else:
raise ValueError("删除的sql语句错误")
\ No newline at end of file
import openpyxl
from API2 import log_decorator
from API2.common.read_json import read_json
from API2.common.read_system_ini import ReadSystemIni
from API2.common.read_user_ini import ReadUserIni
class ReadExcel:
@log_decorator
def __init__(self,username):
"""获取excel的路径及工作表的名称,加载工作簿获取工作表;获取所以json文件的路径,获取json文件内容的python对象"""
# self.ini=ReadIni()
self.system_ini=ReadSystemIni()
#获取用户
self.ini=ReadUserIni(username)
#获取excel和工作表的名称
excel_path=self.ini.get_file_path('excel')
table_name=self.ini.get_table_name('table_name')
#获取所有的json文件
case_data_path=self.ini.get_file_path("case")
expect_data_path=self.ini.get_file_path("expect")
sql_data_path=self.ini.get_file_path("sql")
#调用read_json读取json文件
self.case_data_dict=read_json(case_data_path)
self.expect_data_dict=read_json(expect_data_path)
self.sql_data_dict=read_json(sql_data_path)
#获取工作表
wb=openpyxl.load_workbook(excel_path)
self.ws=wb[table_name]
@log_decorator
def __get_cell_value(self,column,row):
"""获取指定单元格数据"""
value=self.ws[column+str(row)].value
if isinstance(value,str) and len(value.strip())>0:
return value.strip()
@log_decorator
def module_name(self,row):
"""根据行,获取模块名称"""
return self.__get_cell_value('b',row)
@log_decorator
def api_name(self,row):
"""根据行,获取接口名称"""
return self.__get_cell_value('c',row)
@log_decorator
def case_req(self,row):
"""根据行,获取请求方法"""
return self.__get_cell_value('f',row)
@log_decorator
def case_url(self,row):
"""根据行,获取请求的url"""
value=self.__get_cell_value('g',row)
if value:
# return self.ini.get_host("host")+value
return self.system_ini.get_host("host")+value
@log_decorator
def case_mime(self,row):
"""根据行,获取请求的媒体类型"""
value=self.__get_cell_value('h',row)
if value:
return value.lower()
@log_decorator
def case_data(self,row):
"""根据行,获取用例数据"""
case_data_key=self.__get_cell_value('i',row)
module_name=self.module_name(row)
api_name=self.api_name(row)
if case_data_key and module_name and api_name:
return self.case_data_dict[module_name][api_name][case_data_key]
@log_decorator
def expect_data(self,row):
"""根据行,获取期望数据"""
expect_data_key=self.__get_cell_value('j',row)
module_name=self.module_name(row)
api_name=self.api_name(row)
if expect_data_key and module_name and api_name:
return self.expect_data_dict[module_name][api_name][expect_data_key]
@log_decorator
def sql_data(self,row):
"""根据行,获取sql语句的key"""
sql_data_key=self.__get_cell_value('l',row)
module_name=self.module_name(row)
api_name=self.api_name(row)
if sql_data_key and module_name and api_name:
return self.sql_data_dict[module_name][api_name][sql_data_key]
@log_decorator
def sql_type(self,row):
"""根据行,获取sql类型"""
value=self.__get_cell_value('k',row)
if value:
return value.lower()
@log_decorator
def updata_key(self,row):
"""根据行,获取需要更新的key"""
return self.__get_cell_value('m',row)
@log_decorator
def case_title(self, row):
"""根据行获取用例的标题"""
return self.__get_cell_value("d", row)
@log_decorator
def case_level(self, row):
"""根据行,获取用例的等级"""
return self.__get_cell_value("e", row)
@log_decorator
def get_data(self):
"""将用例存放到二维列表中"""
list_data=[]
for row in range(2,self.ws.max_row+1):
module = self.module_name(row)
api = self.api_name(row)
title = self.case_title(row)
level = self.case_level(row)
req=self.case_req(row)
url=self.case_url(row)
mime=self.case_mime(row)
case=self.case_data(row)
expect=self.expect_data(row)
sql_type=self.sql_type(row)
sql=self.sql_data(row)
updata_key=self.updata_key(row)
if url and req and expect:
list_data.append([module, api, title, level,req,url,mime,case,expect,sql_type,sql,updata_key])
else:
return list_data
if __name__ == '__main__':
excel = ReadExcel()
# excel.get_data()
print(excel.get_data(),end='\t')
\ No newline at end of file
import configparser
import os
from API2 import log_decorator
print(os.path.join(os.path.dirname(os.path.dirname(__file__)), "data_config"))
class ReadIni:
@log_decorator
def __init__(self):
self.data_config_path=os.path.join(os.path.dirname(os.path.dirname(__file__)), "data_config")
ini_path=os.path.join(self.data_config_path,"config.ini")
self.conf=configparser.ConfigParser()
self.conf.read(ini_path,encoding='utf-8')
@log_decorator
def get_file_path(self,key):
"""根据key,获取file节点下文件的路径"""
return os.path.join(self.data_config_path,self.conf.get("file", key))
@log_decorator
def get_host(self,key):
"""根据key,获取被测系统的域名"""
return self.conf.get("url",key)
@log_decorator
def get_table_name(self,key):
"""根据key,获取数据表的表名"""
return self.conf.get("table",key)
@log_decorator
def get_sql_connect_msg(self,key):
"""根据key,获取数据库的连接信息"""
return self.conf.get("sql",key)
if __name__ == '__main__':
ini=ReadIni()
print(ini.get_sql_connect_msg('host'))
print(ini.get_host('host'))
print(ini.get_file_path('excel'))
print(ini.get_table_name('table_name'))
\ No newline at end of file
import json
import os
from API2 import log_decorator
@log_decorator
def read_json(file_path):
"""读取json文件,将json文件的内容序列化为python对象,再返回"""
if isinstance(file_path, str) and os.path.isfile(file_path) and file_path.endswith(".json"):
with open(file_path, mode="r", encoding="utf-8") as f:
return json.loads(f.read())
else:
raise FileExistsError("json文件路径错误")
if __name__ == '__main__':
read_json(r"E:\untitled\API2\data_config\sql_data.json")
import configparser
import os
from API2 import log_decorator
class ReadSystemIni:
@log_decorator
def __init__(self):
"""读取系统的ini文件"""
self.data_conf_path=os.path.join(os.path.dirname(os.path.dirname(__file__)), "data_config")
ini_path=os.path.join(self.data_conf_path,"system_config.ini")
self.conf = configparser.ConfigParser()
self.conf.read(ini_path, encoding='utf-8')
@log_decorator
def get_host(self,key):
"""根据key,获取被测系统的域名"""
return self.conf.get('url',key)
@log_decorator
def get_sql_connect_msg(self,key):
"""根据key,获取数据库的连接信息"""
return self.conf.get('sql',key)
@log_decorator
def get_username(self,key):
"""根据key,获取用户存放数据的目录名称"""
return self.conf.get('user',key)
if __name__ == '__main__':
req = ReadSystemIni()
print(req.get_username('user1'))
\ No newline at end of file
# -*-coding:utf-8 -*- #
# ---------------------------------------------------------------------------
# ProjectName: test66
# FileName: read_user_ini.py
# Author: lao_zhao
# Datetime: 2025/5/9 11:21
# Description:
#
# ---------------------------------------------------------------------------
import configparser
import os
from API2 import log_decorator
class ReadUserIni:
@log_decorator
def __init__(self, username):
"""获取用户配置ini文件的路径,并创建Configparser对象,在读取ini文件"""
data_config_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), "data_config")
# 获取用例存放数据的目录路径
self.user_data_config_path = os.path.join(data_config_path, username)
ini_path = os.path.join(self.user_data_config_path, "config.ini")
self.conf = configparser.ConfigParser()
self.conf.read(ini_path, encoding="utf-8")
@log_decorator
def get_file_path(self, key):
"""根据key,获取file节点下文件的路径"""
return os.path.join(self.user_data_config_path, self.conf.get("file", key))
@log_decorator
def get_table_name(self, key):
"""根据key,获取工作表的名称"""
return self.conf.get("table", key)
if __name__ == '__main__':
ini = ReadUserIni("bpm")
print(ini.get_file_path("case"))
\ No newline at end of file
{
"认证接口": {
"登录系统": {
"LoginSuccess": {
"username": "admin",
"password": "fWwO5OcV0c5AZfgOohpm4OE/FjKMc5wcjjaJvfbnrTIQMG5d3htn2aFA2iZGkSgYZ+9liGgmple6bCp+NT4PnY2Jlov8tV8Q/+nn2IZTuPCMwHqRrUchpPUr4wXWuQ+Gk55DNu4CZgxWQ5HxfzixGHJT29D6TUiz5Ea+mLm3fg8="
},
"LoginErrorPasswordParamIsClass": "{\"username\": \"admin\",class: \"fWwO5OcV0c5AZfgOohpm4OE/FjKMc5wcjjaJvfbnrTIQMG5d3htn2aFA2iZGkSgYZ+9liGgmple6bCp+NT4PnY2Jlov8tV8Q/+nn2IZTuPCMwHqRrUchpPUr4wXWuQ+Gk55DNu4CZgxWQ5HxfzixGHJT29D6TUiz5Ea+mLm3fg8=\"}",
"LoginErrorPasswordParamIsNone": "{\"username\": \"admin\",: \"fWwO5OcV0c5AZfgOohpm4OE/FjKMc5wcjjaJvfbnrTIQMG5d3htn2aFA2iZGkSgYZ+9liGgmple6bCp+NT4PnY2Jlov8tV8Q/+nn2IZTuPCMwHqRrUchpPUr4wXWuQ+Gk55DNu4CZgxWQ5HxfzixGHJT29D6TUiz5Ea+mLm3fg8=\"}",
"LoginErrorPasswordParamIsDouble": "{\"username\": \"admin\",\"password\": \"fWwO5OcV0c5AZfgOohpm4OE/FjKMc5wcjjaJvfbnrTIQMG5d3htn2aFA2iZGkSgYZ+9liGgmple6bCp+NT4PnY2Jlov8tV8Q/+nn2IZTuPCMwHqRrUchpPUr4wXWuQ+Gk55DNu4CZgxWQ5HxfzixGHJT29D6TUiz5Ea+mLm3fg8=\",\"password\": \"123456\"}",
"LoginErrorOnlyUsername": "{\"username\": \"admin\"}",
"LoginErrorPasswordParamIsSpecial": "{\"username\": \"admin\",\"♠♣▣▤▥▦▩◘◙◈♫\": \"fWwO5OcV0c5AZfgOohpm4OE/FjKMc5wcjjaJvfbnrTIQMG5d3htn2aFA2iZGkSgYZ+9liGgmple6bCp+NT4PnY2Jlov8tV8Q/+nn2IZTuPCMwHqRrUchpPUr4wXWuQ+Gk55DNu4CZgxWQ5HxfzixGHJT29D6TUiz5Ea+mLm3fg8=\"}",
"LoginErrorPasswordDataIsLong": "{\"username\": \"admin\",\"password\": \"fWwO5OcV0c5AZfgOohpm4OE/FjKMc5wcjjaJvfbnrTIQMG5d3htn2aFA2iZGkSgYZ+9liGgmple6bCp+NT4PnY2Jlov8tV8Q/+nn2IZTuPCMwHqRrUchpPUr4wXWuQ+Gk55DNu4CZgxWQ5HxfzixGHJT29D6TUiz5Ea+mLm3fg8=fWwO5OcV0c5AZfgOohpm4OE/FjKMc5wcjjaJvfbnrTIQMG5d3htn2aFA2iZGkSgYZ+9liGgmple6bCp+NT4PnY2Jlov8tV8Q/+nn2IZTuPCMwHqRrUchpPUr4wXWuQ+Gk55DNu4CZgxWQ5HxfzixGHJT29D6TUiz5Ea+mLm3fg8=\"}",
"LoginErrorPasswordDataIsShort": "{\"username\": \"admin\",\"password\": \"f\"}",
"LoginErrorPasswordDataIsSpecial": "{\"username\": \"admin\",\"password\": \"♠♣▣▤▥▦▩◘◙◈♫\"}",
"LoginErrorPasswordDataIsError": "{\"username\": \"admin\",\"password\": \"123456\"}",
"LoginErrorPasswordDataIsNone": "{\"username\": \"admin\",\"password\": \"\"}",
"LoginErrorPasswordDataIsClass": "{\"username\": \"admin\",\"password\": class}"
}
},
"维度管理": {
"添加维度": {
"AddDemSuccess": {
"code": "testDemension",
"description": "测试维度",
"isDefault": 0,
"name": "测试维度"
}
},
"根据维度编码获取维度信息": {
"GetDemMessageSuccess": "code=testDemension"
},
"根据维度编码删除维度": {
"DeleteDemSuccess": {"ids": "需要更新"},
"DeleteDemErrorIdsIsId": "id=需要更新"
}
},
"组织管理": {
"添加组织": {
"AddOrgSuccess": {
"code": "testAddOrg",
"demId": "需要更新",
"exceedLimitNum": 0,
"grade": "",
"limitNum": 0,
"name": "测试添加的组织",
"nowNum": 0,
"orderNo": 0,
"parentId": "0"
}
},
"保存组织参数": {
"SaveOrgParamSuccess": {
"query": "orgCode=testAddOrg",
"body": "[{\"alias\":\"test0428\",\"value\":500}]"
},
"SaveOrgParamSuccess2": {
"query": {"orgCode": "testAddOrg"},
"body": [{"alias":"test0428","value":100}]
}
},
"删除组织": {
"DelOrgSuccess": "testAddOrg"
}
}
}
[file]
# 配置数据文件
# 配置用例管理文件
excel=APIAutoTest.xlsx
# 配置用例数据文件
case=case_data.json
# 配置期望数据文件
expect=expect_data.json
# 配置sql语句数据文件
sql=sql_data.json
[table]
# 配置数据表的表名
table_name = BPM
{
"认证接口": {
"登录系统": {
"LoginSuccess": {
"username": "超级管理员",
"loginStatus": true
},
"LoginErrorPasswordParamIsClass": {
"message": "账号或密码错误"
},
"LoginErrorPasswordParamIsNone": {
"message": "账号或密码错误"
},
"LoginErrorPasswordParamIsDouble": {
"message": "账号或密码错误"
},
"LoginErrorOnlyUsername": {
"message": "账号或密码错误"
},
"LoginErrorPasswordParamIsSpecial": {
"message": "账号或密码错误"
},
"LoginErrorPasswordDataIsLong": {
"message": "账号或密码错误"
},
"LoginErrorPasswordDataIsShort": {
"message": "账号或密码错误"
},
"LoginErrorPasswordDataIsSpecial": {
"message": "账号或密码错误"
},
"LoginErrorPasswordDataIsError": {
"message": "账号或密码错误"
},
"LoginErrorPasswordDataIsNone": {
"message": "账号或密码错误"
},
"LoginErrorPasswordDataIsClass": {
"message": "账号或密码错误"
}
},
"刷新token": {
"RefreshSuccess": {
"message": "刷新成功"
}
}
},
"维度管理": {
"添加维度": {
"AddDemSuccess": {"message": "添加维度成功"}
},
"根据维度编码获取维度信息": {
"GetDemMessageSuccess": {"isDelete": "0"}
},
"根据维度编码删除维度": {
"DeleteDemSuccess": {"message": "删除维度成功!"},
"DeleteDemErrorIdsIsId": {"message": "删除维度失败"}
}
},
"组织管理": {
"添加组织": {
"AddOrgSuccess": {"message": "添加组织成功!"}
},
"保存组织参数": {
"SaveOrgParamSuccess": {"state":true,"message":"保存组织参数成功!","value":"","code":200},
"SaveOrgParamSuccess2": {"state":true,"message":"保存组织参数成功!","value":"","code":200}
},
"删除组织": {
"DelOrgSuccess": {"state":true,"message":"删除组织成功!","value":"","code":200}
}
}
}
\ No newline at end of file
{
"维度管理": {
"添加维度": {
"AddDemSuccess": "delete from uc_demension where CODE_=\"testDemension\";"
},
"根据维度编码删除维度": {
"DeleteDemSuccess": "select ID_ from uc_demension where CODE_=\"testDemension\";",
"DeleteDemErrorIdsIsId": "select ID_ from uc_demension where CODE_=\"testDemension\";"
}
},
"组织管理": {
"添加组织": {
"AddOrgSuccess": {
"select": "select ID_ from uc_demension where CODE_=\"testDemension\";",
"delete": "delete from uc_org where CODE_=\"testAddOrg\";"
}
}
}
}
\ No newline at end of file
{
"认证接口": {
"登录系统": {
"LoginSuccess": {
"username": "admin",
"password": "fWwO5OcV0c5AZfgOohpm4OE/FjKMc5wcjjaJvfbnrTIQMG5d3htn2aFA2iZGkSgYZ+9liGgmple6bCp+NT4PnY2Jlov8tV8Q/+nn2IZTuPCMwHqRrUchpPUr4wXWuQ+Gk55DNu4CZgxWQ5HxfzixGHJT29D6TUiz5Ea+mLm3fg8="
},
"LoginErrorPasswordParamIsClass": "{\"username\": \"admin\",class: \"fWwO5OcV0c5AZfgOohpm4OE/FjKMc5wcjjaJvfbnrTIQMG5d3htn2aFA2iZGkSgYZ+9liGgmple6bCp+NT4PnY2Jlov8tV8Q/+nn2IZTuPCMwHqRrUchpPUr4wXWuQ+Gk55DNu4CZgxWQ5HxfzixGHJT29D6TUiz5Ea+mLm3fg8=\"}",
"LoginErrorPasswordParamIsNone": "{\"username\": \"admin\",: \"fWwO5OcV0c5AZfgOohpm4OE/FjKMc5wcjjaJvfbnrTIQMG5d3htn2aFA2iZGkSgYZ+9liGgmple6bCp+NT4PnY2Jlov8tV8Q/+nn2IZTuPCMwHqRrUchpPUr4wXWuQ+Gk55DNu4CZgxWQ5HxfzixGHJT29D6TUiz5Ea+mLm3fg8=\"}",
"LoginErrorPasswordParamIsDouble": "{\"username\": \"admin\",\"password\": \"fWwO5OcV0c5AZfgOohpm4OE/FjKMc5wcjjaJvfbnrTIQMG5d3htn2aFA2iZGkSgYZ+9liGgmple6bCp+NT4PnY2Jlov8tV8Q/+nn2IZTuPCMwHqRrUchpPUr4wXWuQ+Gk55DNu4CZgxWQ5HxfzixGHJT29D6TUiz5Ea+mLm3fg8=\",\"password\": \"123456\"}",
"LoginErrorOnlyUsername": "{\"username\": \"admin\"}",
"LoginErrorPasswordParamIsSpecial": "{\"username\": \"admin\",\"♠♣▣▤▥▦▩◘◙◈♫\": \"fWwO5OcV0c5AZfgOohpm4OE/FjKMc5wcjjaJvfbnrTIQMG5d3htn2aFA2iZGkSgYZ+9liGgmple6bCp+NT4PnY2Jlov8tV8Q/+nn2IZTuPCMwHqRrUchpPUr4wXWuQ+Gk55DNu4CZgxWQ5HxfzixGHJT29D6TUiz5Ea+mLm3fg8=\"}",
"LoginErrorPasswordDataIsLong": "{\"username\": \"admin\",\"password\": \"fWwO5OcV0c5AZfgOohpm4OE/FjKMc5wcjjaJvfbnrTIQMG5d3htn2aFA2iZGkSgYZ+9liGgmple6bCp+NT4PnY2Jlov8tV8Q/+nn2IZTuPCMwHqRrUchpPUr4wXWuQ+Gk55DNu4CZgxWQ5HxfzixGHJT29D6TUiz5Ea+mLm3fg8=fWwO5OcV0c5AZfgOohpm4OE/FjKMc5wcjjaJvfbnrTIQMG5d3htn2aFA2iZGkSgYZ+9liGgmple6bCp+NT4PnY2Jlov8tV8Q/+nn2IZTuPCMwHqRrUchpPUr4wXWuQ+Gk55DNu4CZgxWQ5HxfzixGHJT29D6TUiz5Ea+mLm3fg8=\"}",
"LoginErrorPasswordDataIsShort": "{\"username\": \"admin\",\"password\": \"f\"}",
"LoginErrorPasswordDataIsSpecial": "{\"username\": \"admin\",\"password\": \"♠♣▣▤▥▦▩◘◙◈♫\"}",
"LoginErrorPasswordDataIsError": "{\"username\": \"admin\",\"password\": \"123456\"}",
"LoginErrorPasswordDataIsNone": "{\"username\": \"admin\",\"password\": \"\"}",
"LoginErrorPasswordDataIsClass": "{\"username\": \"admin\",\"password\": class}"
}
},
"维度管理": {
"添加维度": {
"AddDemSuccess": {
"code": "testDemension",
"description": "测试维度",
"isDefault": 0,
"name": "测试维度"
}
},
"根据维度编码获取维度信息": {
"GetDemMessageSuccess": "code=testDemension"
},
"根据维度编码删除维度": {
"DeleteDemSuccess": {"ids": "需要更新"},
"DeleteDemErrorIdsIsId": "id=需要更新"
}
}
}
[file]
# 配置数据文件
# 配置用例管理文件
excel=APIAutoTest.xlsx
# 配置用例数据文件
case=case_data.json
# 配置期望数据文件
expect=expect_data.json
# 配置sql语句数据文件
sql=sql_data.json
[url]
host=http://36.139.193.99:8088
[table]
# 配置数据表的表名
table_name = BPM
[sql]
# 配置数据库的链接信息
host=36.139.193.99
port=3306
database=eip8
user=root
password=Rhrc@2024
\ No newline at end of file
{
"认证接口": {
"登录系统": {
"LoginSuccess": {
"username": "超级管理员",
"loginStatus": true
},
"LoginErrorPasswordParamIsClass": {
"message": "账号或密码错误"
},
"LoginErrorPasswordParamIsNone": {
"message": "账号或密码错误"
},
"LoginErrorPasswordParamIsDouble": {
"message": "账号或密码错误"
},
"LoginErrorOnlyUsername": {
"message": "账号或密码错误"
},
"LoginErrorPasswordParamIsSpecial": {
"message": "账号或密码错误"
},
"LoginErrorPasswordDataIsLong": {
"message": "账号或密码错误"
},
"LoginErrorPasswordDataIsShort": {
"message": "账号或密码错误"
},
"LoginErrorPasswordDataIsSpecial": {
"message": "账号或密码错误"
},
"LoginErrorPasswordDataIsError": {
"message": "账号或密码错误"
},
"LoginErrorPasswordDataIsNone": {
"message": "账号或密码错误"
},
"LoginErrorPasswordDataIsClass": {
"message": "账号或密码错误"
}
},
"刷新token": {
"RefreshSuccess": {
"message": "刷新成功"
}
}
},
"维度管理": {
"添加维度": {
"AddDemSuccess": {"message": "添加维度成功"}
},
"根据维度编码获取维度信息": {
"GetDemMessageSuccess": {"isDelete": "0"}
},
"根据维度编码删除维度": {
"DeleteDemSuccess": {"message": "删除维度成功!"},
"DeleteDemErrorIdsIsId": {"message": "删除维度失败"}
}
}
}
\ No newline at end of file
{
"维度管理": {
"添加维度": {
"AddDemSuccess": "delete from uc_demension where CODE_=\"testDemension\";"
},
"根据维度编码删除维度": {
"DeleteDemSuccess": "select ID_ from uc_demension where CODE_=\"testDemension\";",
"DeleteDemErrorIdsIsId": "select ID_ from uc_demension where CODE_=\"testDemension\";"
}
}
}
\ No newline at end of file
[url]
host=http://36.139.193.99:8088
[sql]
# 配置数据库的链接信息
host=36.139.193.99
port=3306
database=eip8
user=root
password=Rhrc@2024
[user]
# 配置数据配置层中用户存放数据的目录名称
user1=bpm
user2=zhangsan
\ No newline at end of file
[file]
# 配置数据文件
# 配置用例管理文件
excel=接口用例.xlsx
# 配置用例数据文件
case=用例数据.json
# 配置期望数据文件
expect=期望数据.json
# 配置sql语句数据文件
sql=sql语句.json
[table]
# 配置数据表的表名
table_name = 张三
{
{
"维度管理": {
"添加维度": {
"AddDemSuccess": "delete from uc_demension where CODE_=\"testDemension\";"
},
"根据维度编码删除维度": {
"DeleteDemSuccess": "select ID_ from uc_demension where CODE_=\"testDemension\";",
"DeleteDemErrorIdsIsId": "select ID_ from uc_demension where CODE_=\"testDemension\";"
}
},
"组织管理": {
"添加组织": {
"AddOrgSuccess": {
"select": "select ID_ from uc_demension where CODE_=\"testDemension\";",
"delete": "delete from uc_org where CODE_=\"testAddOrg\";"
}
}
}
}
\ No newline at end of file
{
{
"认证接口": {
"登录系统": {
"LoginSuccess": {
"username": "超级管理员",
"loginStatus": true
},
"LoginErrorPasswordParamIsClass": {
"message": "账号或密码错误"
},
"LoginErrorPasswordParamIsNone": {
"message": "账号或密码错误"
},
"LoginErrorPasswordParamIsDouble": {
"message": "账号或密码错误"
},
"LoginErrorOnlyUsername": {
"message": "账号或密码错误"
},
"LoginErrorPasswordParamIsSpecial": {
"message": "账号或密码错误"
},
"LoginErrorPasswordDataIsLong": {
"message": "账号或密码错误"
},
"LoginErrorPasswordDataIsShort": {
"message": "账号或密码错误"
},
"LoginErrorPasswordDataIsSpecial": {
"message": "账号或密码错误"
},
"LoginErrorPasswordDataIsError": {
"message": "账号或密码错误"
},
"LoginErrorPasswordDataIsNone": {
"message": "账号或密码错误"
},
"LoginErrorPasswordDataIsClass": {
"message": "账号或密码错误"
}
},
"刷新token": {
"RefreshSuccess": {
"message": "刷新成功"
}
}
},
"维度管理": {
"添加维度": {
"AddDemSuccess": {"message": "添加维度成功"}
},
"根据维度编码获取维度信息": {
"GetDemMessageSuccess": {"isDelete": "0"}
},
"根据维度编码删除维度": {
"DeleteDemSuccess": {"message": "删除维度成功!"},
"DeleteDemErrorIdsIsId": {"message": "删除维度失败"}
}
},
"组织管理": {
"添加组织": {
"AddOrgSuccess": {"message": "添加组织成功!"}
},
"保存组织参数": {
"SaveOrgParamSuccess": {"state":true,"message":"保存组织参数成功!","value":"","code":200},
"SaveOrgParamSuccess2": {"state":true,"message":"保存组织参数成功!","value":"","code":200}
},
"删除组织": {
"DelOrgSuccess": {"state":true,"message":"删除组织成功!","value":"","code":200}
}
}
}
\ No newline at end of file
{
{
"认证接口": {
"登录系统": {
"LoginSuccess": {
"username": "admin",
"password": "fWwO5OcV0c5AZfgOohpm4OE/FjKMc5wcjjaJvfbnrTIQMG5d3htn2aFA2iZGkSgYZ+9liGgmple6bCp+NT4PnY2Jlov8tV8Q/+nn2IZTuPCMwHqRrUchpPUr4wXWuQ+Gk55DNu4CZgxWQ5HxfzixGHJT29D6TUiz5Ea+mLm3fg8="
},
"LoginErrorPasswordParamIsClass": "{\"username\": \"admin\",class: \"fWwO5OcV0c5AZfgOohpm4OE/FjKMc5wcjjaJvfbnrTIQMG5d3htn2aFA2iZGkSgYZ+9liGgmple6bCp+NT4PnY2Jlov8tV8Q/+nn2IZTuPCMwHqRrUchpPUr4wXWuQ+Gk55DNu4CZgxWQ5HxfzixGHJT29D6TUiz5Ea+mLm3fg8=\"}",
"LoginErrorPasswordParamIsNone": "{\"username\": \"admin\",: \"fWwO5OcV0c5AZfgOohpm4OE/FjKMc5wcjjaJvfbnrTIQMG5d3htn2aFA2iZGkSgYZ+9liGgmple6bCp+NT4PnY2Jlov8tV8Q/+nn2IZTuPCMwHqRrUchpPUr4wXWuQ+Gk55DNu4CZgxWQ5HxfzixGHJT29D6TUiz5Ea+mLm3fg8=\"}",
"LoginErrorPasswordParamIsDouble": "{\"username\": \"admin\",\"password\": \"fWwO5OcV0c5AZfgOohpm4OE/FjKMc5wcjjaJvfbnrTIQMG5d3htn2aFA2iZGkSgYZ+9liGgmple6bCp+NT4PnY2Jlov8tV8Q/+nn2IZTuPCMwHqRrUchpPUr4wXWuQ+Gk55DNu4CZgxWQ5HxfzixGHJT29D6TUiz5Ea+mLm3fg8=\",\"password\": \"123456\"}",
"LoginErrorOnlyUsername": "{\"username\": \"admin\"}",
"LoginErrorPasswordParamIsSpecial": "{\"username\": \"admin\",\"♠♣▣▤▥▦▩◘◙◈♫\": \"fWwO5OcV0c5AZfgOohpm4OE/FjKMc5wcjjaJvfbnrTIQMG5d3htn2aFA2iZGkSgYZ+9liGgmple6bCp+NT4PnY2Jlov8tV8Q/+nn2IZTuPCMwHqRrUchpPUr4wXWuQ+Gk55DNu4CZgxWQ5HxfzixGHJT29D6TUiz5Ea+mLm3fg8=\"}",
"LoginErrorPasswordDataIsLong": "{\"username\": \"admin\",\"password\": \"fWwO5OcV0c5AZfgOohpm4OE/FjKMc5wcjjaJvfbnrTIQMG5d3htn2aFA2iZGkSgYZ+9liGgmple6bCp+NT4PnY2Jlov8tV8Q/+nn2IZTuPCMwHqRrUchpPUr4wXWuQ+Gk55DNu4CZgxWQ5HxfzixGHJT29D6TUiz5Ea+mLm3fg8=fWwO5OcV0c5AZfgOohpm4OE/FjKMc5wcjjaJvfbnrTIQMG5d3htn2aFA2iZGkSgYZ+9liGgmple6bCp+NT4PnY2Jlov8tV8Q/+nn2IZTuPCMwHqRrUchpPUr4wXWuQ+Gk55DNu4CZgxWQ5HxfzixGHJT29D6TUiz5Ea+mLm3fg8=\"}",
"LoginErrorPasswordDataIsShort": "{\"username\": \"admin\",\"password\": \"f\"}",
"LoginErrorPasswordDataIsSpecial": "{\"username\": \"admin\",\"password\": \"♠♣▣▤▥▦▩◘◙◈♫\"}",
"LoginErrorPasswordDataIsError": "{\"username\": \"admin\",\"password\": \"123456\"}",
"LoginErrorPasswordDataIsNone": "{\"username\": \"admin\",\"password\": \"\"}",
"LoginErrorPasswordDataIsClass": "{\"username\": \"admin\",\"password\": class}"
}
},
"维度管理": {
"添加维度": {
"AddDemSuccess": {
"code": "testDemension",
"description": "测试维度",
"isDefault": 0,
"name": "测试维度"
}
},
"根据维度编码获取维度信息": {
"GetDemMessageSuccess": "code=testDemension"
},
"根据维度编码删除维度": {
"DeleteDemSuccess": {"ids": "需要更新"},
"DeleteDemErrorIdsIsId": "id=需要更新"
}
},
"组织管理": {
"添加组织": {
"AddOrgSuccess": {
"code": "testAddOrg",
"demId": "需要更新",
"exceedLimitNum": 0,
"grade": "",
"limitNum": 0,
"name": "测试添加的组织",
"nowNum": 0,
"orderNo": 0,
"parentId": "0"
}
},
"保存组织参数": {
"SaveOrgParamSuccess": {
"query": "orgCode=testAddOrg",
"body": "[{\"alias\":\"test0428\",\"value\":500}]"
},
"SaveOrgParamSuccess2": {
"query": {"orgCode": "testAddOrg"},
"body": [{"alias":"test0428","value":100}]
}
},
"删除组织": {
"DelOrgSuccess": "testAddOrg"
}
}
}
{"uuid": "c5f73e34-014a-457a-86cf-33abb45996c4", "befores": [{"name": "update_key", "status": "passed", "start": 1747021538640, "stop": 1747021538640}], "start": 1747021538640, "stop": 1747021538701}
\ No newline at end of file
{"uuid": "79fe883e-fc4a-4f26-93ae-c9fed4eab366", "befores": [{"name": "url", "status": "passed", "start": 1747021536840, "stop": 1747021536840}], "start": 1747021536840, "stop": 1747021536880}
\ No newline at end of file
{"uuid": "f79bd427-4e56-4d88-9604-37c21aad5dfd", "befores": [{"name": "sql_type", "status": "passed", "start": 1747021536368, "stop": 1747021536368}], "start": 1747021536367, "stop": 1747021536679}
\ No newline at end of file
{"uuid": "9108573b-fb60-4049-a88a-49be7af26b2f", "befores": [{"name": "case", "status": "passed", "start": 1747021536951, "stop": 1747021536951}], "start": 1747021536951, "stop": 1747021536982}
\ No newline at end of file
{"uuid": "0f304795-bac0-43af-92db-a16c4341cef0", "befores": [{"name": "title", "status": "passed", "start": 1747021537097, "stop": 1747021537097}], "start": 1747021537097, "stop": 1747021537137}
\ No newline at end of file
{"uuid": "0c821347-8ba2-4c84-bc82-d7e8c7599c49", "befores": [{"name": "url", "status": "passed", "start": 1747021538138, "stop": 1747021538138}], "start": 1747021538138, "stop": 1747021538180}
\ No newline at end of file
{"uuid": "412776cb-a850-4834-a110-0671401c52af", "befores": [{"name": "module", "status": "passed", "start": 1747021538037, "stop": 1747021538037}], "start": 1747021538037, "stop": 1747021538078}
\ No newline at end of file
{"uuid": "a237aedb-8ffc-4a6b-abac-5d1556c13bb3", "befores": [{"name": "mime", "status": "passed", "start": 1747021538527, "stop": 1747021538527}], "start": 1747021538527, "stop": 1747021538566}
\ No newline at end of file
{"uuid": "7aa1a4bb-21b0-4716-a1c2-fba2811aa64c", "befores": [{"name": "sql_type", "status": "passed", "start": 1747021537297, "stop": 1747021537297}], "start": 1747021537297, "stop": 1747021537350}
\ No newline at end of file
{"uuid": "47b9496d-1ec1-4dd9-8e3b-d55cf76da1fe", "befores": [{"name": "level", "status": "passed", "start": 1747021538993, "stop": 1747021538993}], "start": 1747021538993, "stop": 1747021539038}
\ No newline at end of file
{"uuid": "1e0039e3-39f3-46b8-a732-bee60392426f", "befores": [{"name": "mime", "status": "passed", "start": 1747021537995, "stop": 1747021537995}], "start": 1747021537995, "stop": 1747021538026}
\ No newline at end of file
{"uuid": "ce3041c8-7eaa-41e3-b4a8-02bbf847b9de", "befores": [{"name": "url", "status": "passed", "start": 1747021536691, "stop": 1747021536691}], "start": 1747021536691, "stop": 1747021536729}
\ No newline at end of file
{"uuid": "ed1ebc29-a312-4869-9993-22db3e18854a", "befores": [{"name": "sql_data", "status": "passed", "start": 1747021536995, "stop": 1747021536995}], "start": 1747021536995, "stop": 1747021537031}
\ No newline at end of file
{"uuid": "370c8419-e87a-4171-9a1a-d2dcbc567327", "befores": [{"name": "level", "status": "passed", "start": 1747021538037, "stop": 1747021538037}], "start": 1747021538037, "stop": 1747021538075}
\ No newline at end of file
{"uuid": "0f1468c8-4a29-42f3-b333-be0da5fa3594", "befores": [{"name": "module", "status": "passed", "start": 1747021538821, "stop": 1747021538821}], "start": 1747021538821, "stop": 1747021538866}
\ No newline at end of file
{"uuid": "c113dddf-d5d6-4729-a06a-69e995f78fc9", "befores": [{"name": "level", "status": "passed", "start": 1747021538323, "stop": 1747021538323}], "start": 1747021538323, "stop": 1747021538372}
\ No newline at end of file
INFO  root:__init__.py:44 执行的功能为:__init__, 功能的描述为:关联被测系统状态, 所在的文件为:E:\untitled\API2\request_method\request_method.py, 所在的行为:9
INFO  root:__init__.py:44 执行的功能为:__init__, 功能的描述为:None, 所在的文件为:E:\untitled\API2\common\read_ini.py, 所在的行为:8
INFO  root:__init__.py:44 执行的功能为:get_host, 功能的描述为:根据key,获取被测系统的域名, 所在的文件为:E:\untitled\API2\common\read_ini.py, 所在的行为:20
INFO  root:__init__.py:44 执行的功能为:__init__, 功能的描述为:创建链接对象和游标对象, 所在的文件为:E:\untitled\API2\common\db.py, 所在的行为:17
INFO  root:__init__.py:44 执行的功能为:__init__, 功能的描述为:读取系统的ini文件, 所在的文件为:E:\untitled\API2\common\read_system_ini.py, 所在的行为:9
INFO  root:__init__.py:44 执行的功能为:get_sql_connect_msg, 功能的描述为:根据key,获取数据库的连接信息, 所在的文件为:E:\untitled\API2\common\read_system_ini.py, 所在的行为:23
INFO  root:__init__.py:44 执行的功能为:get_sql_connect_msg, 功能的描述为:根据key,获取数据库的连接信息, 所在的文件为:E:\untitled\API2\common\read_system_ini.py, 所在的行为:23
INFO  root:__init__.py:44 执行的功能为:get_sql_connect_msg, 功能的描述为:根据key,获取数据库的连接信息, 所在的文件为:E:\untitled\API2\common\read_system_ini.py, 所在的行为:23
INFO  root:__init__.py:44 执行的功能为:get_sql_connect_msg, 功能的描述为:根据key,获取数据库的连接信息, 所在的文件为:E:\untitled\API2\common\read_system_ini.py, 所在的行为:23
INFO  root:__init__.py:44 执行的功能为:get_sql_connect_msg, 功能的描述为:根据key,获取数据库的连接信息, 所在的文件为:E:\untitled\API2\common\read_system_ini.py, 所在的行为:23
INFO  root:__init__.py:44 执行的功能为:test_bpm, 功能的描述为:None, 所在的文件为:E:\untitled\API2\test_case\test_bpm\test_bpm.py, 所在的行为:13
INFO  root:__init__.py:44 执行的功能为:request_all, 功能的描述为:
封装一个公共的请求方法
:param req_method: 请求方法
:param req_url: 请求的url
:param req_mime: 请求的媒体类型
:param case_data: 用例数据
:param sql_type: sql语句类型
:param sql_data: sql语句
:param update_key: 更新的key
:return: Response Type
, 所在的文件为:E:\untitled\API2\request_method\request_method.py, 所在的行为:23
\ No newline at end of file
{"uuid": "2a0030cd-ae89-405d-bac9-36e2b6fdfd4a", "befores": [{"name": "url", "status": "passed", "start": 1747021538429, "stop": 1747021538429}], "start": 1747021538429, "stop": 1747021538469}
\ No newline at end of file
{"uuid": "1775a8e1-0549-4575-b75d-8af996d67be2", "befores": [{"name": "req", "status": "passed", "start": 1747021538576, "stop": 1747021538576}], "start": 1747021538576, "stop": 1747021538632}
\ No newline at end of file
{"uuid": "e225c8dd-d12a-4662-be9c-41f4def8e14a", "befores": [{"name": "sql_type", "status": "passed", "start": 1747021536691, "stop": 1747021536691}], "start": 1747021536691, "stop": 1747021536725}
\ No newline at end of file
{"uuid": "671b09ff-0805-44ca-ad9f-e1784e78c6fd", "befores": [{"name": "sql_type", "status": "passed", "start": 1747021536889, "stop": 1747021536889}], "start": 1747021536889, "stop": 1747021536939}
\ No newline at end of file
{"uuid": "201e7014-01e3-4d87-9406-319dcebeb441", "befores": [{"name": "update_key", "status": "passed", "start": 1747021538822, "stop": 1747021538822}], "start": 1747021538822, "stop": 1747021538856}
\ No newline at end of file
{"name": "test_bpm[维度管理-根据维度编码删除维度-反向用例-ids为id-中-DELETE-http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds-query-id=需要更新-expect20-select-select ID_ from uc_demension where CODE_=\"testDemension\";-需要更新]", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败,\n\t请求的url为:http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds, \n\t用例数据为:id=需要更新, \n\t期望数据为:{'message': '删除维度失败'}, \n\t服务器返回的数据为:{\"state\":false,\"message\":\"删除维度失败,维度ids必填\",\"code\":200,\"logId\":\"1921772324798341120\"}", "trace": "self = <API2.test_case.test_zhangsan.test_bpm.TestBPM object at 0x0000018E8F5AEF70>\nreq_fix = <APIAutoTest_v3.request_method.request_method.RequestMethod object at 0x0000018E8F6DCAF0>, module = '维度管理', api = '根据维度编码删除维度', title = '反向用例-ids为id', level = '中'\nreq = 'DELETE', url = 'http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds', mime = 'query', case = 'id=需要更新', expect = {'message': '删除维度失败'}, sql_type = 'select'\nsql_data = 'select ID_ from uc_demension where CODE_=\"testDemension\";', update_key = '需要更新'\n\n @log_decorator\n @pytest.mark.parametrize(\"module, api, title, level,req, url, mime, case, expect, sql_type, sql_data, update_key\", datas)\n def test_bpm(self, req_fix, module, api, title, level,req, url, mime, case, expect, sql_type, sql_data, update_key):\n \n res = req_fix.request_all(req_method=req,req_url=url,req_mime=mime,case_data=case,sql_type=sql_type,sql_data=sql_data,update_key=update_key)\n \n try:\n for key in expect:\n> assert expect[key] == res.json().get(key)\nE AssertionError: assert '删除维度失败' == '删除维度失败,维度ids必填'\nE \nE - 删除维度失败,维度ids必填\nE + 删除维度失败\n\ntest_case\\test_zhangsan\\test_bpm.py:28: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <API2.test_case.test_zhangsan.test_bpm.TestBPM object at 0x0000018E8F5AEF70>\nreq_fix = <APIAutoTest_v3.request_method.request_method.RequestMethod object at 0x0000018E8F6DCAF0>, module = '维度管理', api = '根据维度编码删除维度', title = '反向用例-ids为id', level = '中'\nreq = 'DELETE', url = 'http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds', mime = 'query', case = 'id=需要更新', expect = {'message': '删除维度失败'}, sql_type = 'select'\nsql_data = 'select ID_ from uc_demension where CODE_=\"testDemension\";', update_key = '需要更新'\n\n @log_decorator\n @pytest.mark.parametrize(\"module, api, title, level,req, url, mime, case, expect, sql_type, sql_data, update_key\", datas)\n def test_bpm(self, req_fix, module, api, title, level,req, url, mime, case, expect, sql_type, sql_data, update_key):\n \n res = req_fix.request_all(req_method=req,req_url=url,req_mime=mime,case_data=case,sql_type=sql_type,sql_data=sql_data,update_key=update_key)\n \n try:\n for key in expect:\n assert expect[key] == res.json().get(key)\n except AssertionError:\n> raise AssertionError(f\"断言失败,\\n\\t请求的url为:{url}, \\n\\t用例数据为:{case}, \\n\\t期望数据为:{expect}, \\n\\t服务器返回的数据为:{res.text}\")\nE AssertionError: 断言失败,\nE \t请求的url为:http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds, \nE \t用例数据为:id=需要更新, \nE \t期望数据为:{'message': '删除维度失败'}, \nE \t服务器返回的数据为:{\"state\":false,\"message\":\"删除维度失败,维度ids必填\",\"code\":200,\"logId\":\"1921772324798341120\"}\n\ntest_case\\test_zhangsan\\test_bpm.py:30: AssertionError"}, "attachments": [{"name": "log", "source": "5eb684bb-09bb-404d-956c-6dc771a47c61-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "module", "value": "'维度管理'"}, {"name": "api", "value": "'根据维度编码删除维度'"}, {"name": "title", "value": "'反向用例-ids为id'"}, {"name": "level", "value": "'中'"}, {"name": "req", "value": "'DELETE'"}, {"name": "url", "value": "'http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds'"}, {"name": "mime", "value": "'query'"}, {"name": "case", "value": "'id=需要更新'"}, {"name": "expect", "value": "{'message': '删除维度失败'}"}, {"name": "sql_type", "value": "'select'"}, {"name": "sql_data", "value": "'select ID_ from uc_demension where CODE_=\"testDemension\";'"}, {"name": "update_key", "value": "'需要更新'"}], "start": 1747021539045, "stop": 1747021539070, "uuid": "16b05fd2-a28b-4e60-b060-802097ff36eb", "historyId": "f0e544d2d1fc32d0184fdce24766dc87", "testCaseId": "7313ea18e628429ba9747a9ce28f04ea", "fullName": "test_case.test_zhangsan.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_zhangsan"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "LAPTOP-F40JUP61"}, {"name": "thread", "value": "45892-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_zhangsan.test_bpm"}]}
\ No newline at end of file
{"uuid": "137d0099-acf1-4896-b47a-aa724ffc0802", "befores": [{"name": "sql_data", "status": "passed", "start": 1747021538748, "stop": 1747021538748}], "start": 1747021538748, "stop": 1747021538808}
\ No newline at end of file
{"uuid": "51f9d136-d5f6-42bc-9bc8-47e962523b54", "befores": [{"name": "update_key", "status": "passed", "start": 1747021538994, "stop": 1747021538994}], "start": 1747021538994, "stop": 1747021539031}
\ No newline at end of file
INFO  root:__init__.py:44 执行的功能为:test_bpm, 功能的描述为:None, 所在的文件为:E:\untitled\API2\test_case\test_bpm\test_bpm.py, 所在的行为:13
INFO  root:__init__.py:44 执行的功能为:request_all, 功能的描述为:
封装一个公共的请求方法
:param req_method: 请求方法
:param req_url: 请求的url
:param req_mime: 请求的媒体类型
:param case_data: 用例数据
:param sql_type: sql语句类型
:param sql_data: sql语句
:param update_key: 更新的key
:return: Response Type
, 所在的文件为:E:\untitled\API2\request_method\request_method.py, 所在的行为:23
ERROR  root:__init__.py:49 执行的功能为:test_bpm, 功能的描述为:None, 所在的文件为:E:\untitled\API2\test_case\test_bpm\test_bpm.py, 所在的行为:13.报错,错误为:<class 'AssertionError'>, 错误的描述为:断言失败,
用例数据为None
\ No newline at end of file
{"uuid": "776ce44c-2ad3-46f3-86e1-5e6ba65b2c7a", "befores": [{"name": "sql_data", "status": "passed", "start": 1747021538381, "stop": 1747021538381}], "start": 1747021538381, "stop": 1747021538413}
\ No newline at end of file
INFO  root:__init__.py:44 执行的功能为:test_bpm, 功能的描述为:None, 所在的文件为:E:\untitled\API2\test_case\test_bpm\test_bpm.py, 所在的行为:13
INFO  root:__init__.py:44 执行的功能为:request_all, 功能的描述为:
封装一个公共的请求方法
:param req_method: 请求方法
:param req_url: 请求的url
:param req_mime: 请求的媒体类型
:param case_data: 用例数据
:param sql_type: sql语句类型
:param sql_data: sql语句
:param update_key: 更新的key
:return: Response Type
, 所在的文件为:E:\untitled\API2\request_method\request_method.py, 所在的行为:23
\ No newline at end of file
{"name": "test_bpm[认证接口-登录系统-反向用例-正确的用户名,密码的key为空-中-POST-http://36.139.193.99:8088/auth-application/json-{\"username\": \"admin\",: \"fWwO5OcV0c5AZfgOohpm4OE/FjKMc5wcjjaJvfbnrTIQMG5d3htn2aFA2iZGkSgYZ+9liGgmple6bCp+NT4PnY2Jlov8tV8Q/+nn2IZTuPCMwHqRrUchpPUr4wXWuQ+Gk55DNu4CZgxWQ5HxfzixGHJT29D6TUiz5Ea+mLm3fg8=\"}-expect2-None-None-None]", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败,\n\t用例数据为{\"username\": \"admin\",: \"fWwO5OcV0c5AZfgOohpm4OE/FjKMc5wcjjaJvfbnrTIQMG5d3htn2aFA2iZGkSgYZ+9liGgmple6bCp+NT4PnY2Jlov8tV8Q/+nn2IZTuPCMwHqRrUchpPUr4wXWuQ+Gk55DNu4CZgxWQ5HxfzixGHJT29D6TUiz5Ea+mLm3fg8=\"}", "trace": "self = <API2.test_case.test_bpm.test_bpm.TestBPM object at 0x0000018E8F4F1070>, req_fix = <API2.request_method.request_method.RequestMethod object at 0x0000018E8F5D4850>\nmodule = '认证接口', api = '登录系统', title = '反向用例-正确的用户名,密码的key为空', level = '中', req = 'POST', url = 'http://36.139.193.99:8088/auth', mime = 'application/json'\ncase = '{\"username\": \"admin\",: \"fWwO5OcV0c5AZfgOohpm4OE/FjKMc5wcjjaJvfbnrTIQMG5d3htn2aFA2iZGkSgYZ+9liGgmple6bCp+NT4PnY2Jlov8tV8Q/+nn2IZTuPCMwHqRrUchpPUr4wXWuQ+Gk55DNu4CZgxWQ5HxfzixGHJT29D6TUiz5Ea+mLm3fg8=\"}'\nexpect = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @log_decorator\n @pytest.mark.parametrize(\"module, api, title, level,req, url, mime, case, expect, sql_type, sql_data, update_key\",datas)\n def test_bpm(self,req_fix,module, api, title, level,req, url, mime, case, expect, sql_type, sql_data, update_key):\n res=req_fix.request_all(req_method=req, req_url=url, req_mime=mime, case_data=case, sql_type=sql_type, sql_data=sql_data, update_key=update_key)\n try:\n for key in expect:\n> assert expect[key]==res.json().get(key)\nE AssertionError: assert '账号或密码错误' == 'Unexpected c..., column: 23]'\nE \nE + 账号或密码错误\nE - Unexpected character (':' (code 58)): was expecting double-quote to start field name\nE - at [Source: (PushbackInputStream); line: 1, column: 23]\n\ntest_case\\test_bpm\\test_bpm.py:19: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <API2.test_case.test_bpm.test_bpm.TestBPM object at 0x0000018E8F4F1070>, req_fix = <API2.request_method.request_method.RequestMethod object at 0x0000018E8F5D4850>\nmodule = '认证接口', api = '登录系统', title = '反向用例-正确的用户名,密码的key为空', level = '中', req = 'POST', url = 'http://36.139.193.99:8088/auth', mime = 'application/json'\ncase = '{\"username\": \"admin\",: \"fWwO5OcV0c5AZfgOohpm4OE/FjKMc5wcjjaJvfbnrTIQMG5d3htn2aFA2iZGkSgYZ+9liGgmple6bCp+NT4PnY2Jlov8tV8Q/+nn2IZTuPCMwHqRrUchpPUr4wXWuQ+Gk55DNu4CZgxWQ5HxfzixGHJT29D6TUiz5Ea+mLm3fg8=\"}'\nexpect = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @log_decorator\n @pytest.mark.parametrize(\"module, api, title, level,req, url, mime, case, expect, sql_type, sql_data, update_key\",datas)\n def test_bpm(self,req_fix,module, api, title, level,req, url, mime, case, expect, sql_type, sql_data, update_key):\n res=req_fix.request_all(req_method=req, req_url=url, req_mime=mime, case_data=case, sql_type=sql_type, sql_data=sql_data, update_key=update_key)\n try:\n for key in expect:\n assert expect[key]==res.json().get(key)\n except AssertionError:\n> raise AssertionError(f\"断言失败,\\n\\t用例数据为{case}\")\nE AssertionError: 断言失败,\nE \t用例数据为{\"username\": \"admin\",: \"fWwO5OcV0c5AZfgOohpm4OE/FjKMc5wcjjaJvfbnrTIQMG5d3htn2aFA2iZGkSgYZ+9liGgmple6bCp+NT4PnY2Jlov8tV8Q/+nn2IZTuPCMwHqRrUchpPUr4wXWuQ+Gk55DNu4CZgxWQ5HxfzixGHJT29D6TUiz5Ea+mLm3fg8=\"}\n\ntest_case\\test_bpm\\test_bpm.py:21: AssertionError"}, "attachments": [{"name": "log", "source": "3307a9bc-317f-433a-960e-67e92e1dc4a9-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "module", "value": "'认证接口'"}, {"name": "api", "value": "'登录系统'"}, {"name": "title", "value": "'反向用例-正确的用户名,密码的key为空'"}, {"name": "level", "value": "'中'"}, {"name": "req", "value": "'POST'"}, {"name": "url", "value": "'http://36.139.193.99:8088/auth'"}, {"name": "mime", "value": "'application/json'"}, {"name": "case", "value": "'{\"username\": \"admin\",: \"fWwO5OcV0c5AZfgOohpm4OE/FjKMc5wcjjaJvfbnrTIQMG5d3htn2aFA2iZGkSgYZ+9liGgmple6bCp+NT4PnY2Jlov8tV8Q/+nn2IZTuPCMwHqRrUchpPUr4wXWuQ+Gk55DNu4CZgxWQ5HxfzixGHJT29D6TUiz5Ea+mLm3fg8=\"}'"}, {"name": "expect", "value": "{'message': '账号或密码错误'}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1747021536692, "stop": 1747021536713, "uuid": "8b3dd2ae-c769-49fe-9686-8504407105f2", "historyId": "622a3347fe4a9dcc000480e8fd9c0ecc", "testCaseId": "7ef4da15e0946ca293c8e0b6457e0add", "fullName": "test_case.test_bpm.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_bpm"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "LAPTOP-F40JUP61"}, {"name": "thread", "value": "45892-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_bpm.test_bpm"}]}
\ No newline at end of file
{"uuid": "372c03f1-4e89-461f-ac1e-179b3b5024bc", "befores": [{"name": "expect", "status": "passed", "start": 1747021536738, "stop": 1747021536738}], "start": 1747021536738, "stop": 1747021536777}
\ No newline at end of file
{"uuid": "c8482b0d-83e8-4cb4-89ed-931ccccca7b4", "befores": [{"name": "expect", "status": "passed", "start": 1747021538037, "stop": 1747021538037}], "start": 1747021538037, "stop": 1747021538070}
\ No newline at end of file
{"uuid": "a5e8ec5f-fde6-47f1-a19b-1f3891ccdc19", "befores": [{"name": "case", "status": "passed", "start": 1747021537609, "stop": 1747021537609}], "start": 1747021537609, "stop": 1747021537645}
\ No newline at end of file
{"uuid": "0ae6a34b-36bf-4065-b94d-59261817b1a7", "befores": [{"name": "level", "status": "passed", "start": 1747021537609, "stop": 1747021537609}], "start": 1747021537609, "stop": 1747021537648}
\ No newline at end of file
{"uuid": "b818c122-28b7-4c10-b787-cdd50412ea15", "befores": [{"name": "mime", "status": "passed", "start": 1747021537655, "stop": 1747021537655}], "start": 1747021537655, "stop": 1747021537692}
\ No newline at end of file
{"uuid": "0311bbf7-c825-4e1a-b6af-b626a6a83a7a", "befores": [{"name": "mime", "status": "passed", "start": 1747021537362, "stop": 1747021537362}], "start": 1747021537362, "stop": 1747021537386}
\ No newline at end of file
INFO  root:__init__.py:44 执行的功能为:test_bpm, 功能的描述为:None, 所在的文件为:E:\untitled\API2\test_case\test_zhangsan\test_bpm.py, 所在的行为:20
INFO  root:__init__.py:45 执行的功能为:request_all, 功能的描述为:
封装一个公共的请求方法
:param req_method: 请求方法
:param req_url: 请求的url
:param req_mime: 请求的媒体类型
:param case_data: 用例数据
:param sql_type: sql语句类型
:param sql_data: sql语句
:param update_key: 更新的key
:return: Response Type
, 所在的文件为:E:\untitled\APIAutoTest_v3\request_method\request_method.py, 所在的行为:32
ERROR  root:__init__.py:49 执行的功能为:test_bpm, 功能的描述为:None, 所在的文件为:E:\untitled\API2\test_case\test_zhangsan\test_bpm.py, 所在的行为:20.报错,错误为:<class 'AssertionError'>, 错误的描述为:断言失败,
请求的url为:http://36.139.193.99:8088/auth,
用例数据为:{"username": "admin","password": "123456"},
期望数据为:{'message': '账号或密码错误'},
服务器返回的数据为:{"state":false,"message":"解密密码异常,请检查RSA公钥和私钥配置","code":200,"logId":"1921772322210455552"}
\ No newline at end of file
{"uuid": "631b01d7-576e-41ec-9838-204aed123caa", "befores": [{"name": "case", "status": "passed", "start": 1747021538640, "stop": 1747021538640}], "start": 1747021538640, "stop": 1747021538704}
\ No newline at end of file
{"uuid": "53684941-0fac-4e80-91a2-a2a0c1d064e3", "befores": [{"name": "expect", "status": "passed", "start": 1747021537297, "stop": 1747021537297}], "start": 1747021537297, "stop": 1747021537351}
\ No newline at end of file
{"uuid": "73a9aa22-9deb-4938-8d17-75f04d1bf297", "befores": [{"name": "req", "status": "passed", "start": 1747021538138, "stop": 1747021538138}], "start": 1747021538138, "stop": 1747021538181}
\ No newline at end of file
{"uuid": "6269c1ce-88c7-4fec-9b67-42147d45cf88", "befores": [{"name": "expect", "status": "passed", "start": 1747021536889, "stop": 1747021536889}], "start": 1747021536889, "stop": 1747021536940}
\ No newline at end of file
{"uuid": "c3dbdd2a-2fab-4365-be54-dc529be1f1da", "befores": [{"name": "sql_type", "status": "passed", "start": 1747021538138, "stop": 1747021538138}], "start": 1747021538138, "stop": 1747021538177}
\ No newline at end of file
INFO  root:__init__.py:44 执行的功能为:test_bpm, 功能的描述为:None, 所在的文件为:E:\untitled\API2\test_case\test_bpm\test_bpm.py, 所在的行为:13
INFO  root:__init__.py:44 执行的功能为:request_all, 功能的描述为:
封装一个公共的请求方法
:param req_method: 请求方法
:param req_url: 请求的url
:param req_mime: 请求的媒体类型
:param case_data: 用例数据
:param sql_type: sql语句类型
:param sql_data: sql语句
:param update_key: 更新的key
:return: Response Type
, 所在的文件为:E:\untitled\API2\request_method\request_method.py, 所在的行为:23
ERROR  root:__init__.py:49 执行的功能为:test_bpm, 功能的描述为:None, 所在的文件为:E:\untitled\API2\test_case\test_bpm\test_bpm.py, 所在的行为:13.报错,错误为:<class 'AssertionError'>, 错误的描述为:断言失败,
用例数据为{"username": "admin","password": "123456"}
\ No newline at end of file
{"uuid": "c0aee90b-c09f-4bea-a545-9092e4c8823a", "befores": [{"name": "url", "status": "passed", "start": 1747021538640, "stop": 1747021538640}], "start": 1747021538640, "stop": 1747021538706}
\ No newline at end of file
{"uuid": "3b5145e4-6c3a-4c6c-8346-7e24ebb6726a", "befores": [{"name": "case", "status": "passed", "start": 1747021537143, "stop": 1747021537143}], "start": 1747021537143, "stop": 1747021537180}
\ No newline at end of file
{"uuid": "369ee13a-40b2-416f-a0dc-2f76365b71ad", "befores": [{"name": "sql_type", "status": "passed", "start": 1747021537190, "stop": 1747021537190}], "start": 1747021537190, "stop": 1747021537285}
\ No newline at end of file
{"uuid": "c730f206-f9c6-4143-b004-be47f03e5c48", "befores": [{"name": "sql_type", "status": "passed", "start": 1747021537396, "stop": 1747021537396}], "start": 1747021537396, "stop": 1747021537448}
\ No newline at end of file
{"uuid": "6df80e01-3101-45b1-bcc2-e61dc7125211", "befores": [{"name": "req", "status": "passed", "start": 1747021538993, "stop": 1747021538993}], "start": 1747021538993, "stop": 1747021539038}
\ No newline at end of file
{"uuid": "e31213b9-8bcf-4d72-b690-daadea23dbe0", "befores": [{"name": "req", "status": "passed", "start": 1747021538084, "stop": 1747021538084}], "start": 1747021538084, "stop": 1747021538127}
\ No newline at end of file
{"uuid": "1f569708-5dd3-4874-955d-a850ce18922e", "befores": [{"name": "expect", "status": "passed", "start": 1747021538640, "stop": 1747021538640}], "start": 1747021538640, "stop": 1747021538703}
\ No newline at end of file
{"uuid": "1200aa59-409b-4cf0-aaa7-129401d455b0", "befores": [{"name": "sql_data", "status": "passed", "start": 1747021538822, "stop": 1747021538822}], "start": 1747021538822, "stop": 1747021538858}
\ No newline at end of file
{"uuid": "dd525dc7-e3f4-479e-9e8e-ef70c9336722", "befores": [{"name": "title", "status": "passed", "start": 1747021539044, "stop": 1747021539044}], "start": 1747021539044, "stop": 1747021539088}
\ No newline at end of file
{"uuid": "220f9544-60aa-484f-9fdd-434c1191b68c", "befores": [{"name": "update_key", "status": "passed", "start": 1747021539045, "stop": 1747021539045}], "start": 1747021539045, "stop": 1747021539080}
\ No newline at end of file
{"uuid": "a218ada8-c206-401d-8211-df9733d5c909", "befores": [{"name": "module", "status": "passed", "start": 1747021536788, "stop": 1747021536788}], "start": 1747021536788, "stop": 1747021536834}
\ No newline at end of file
INFO  root:__init__.py:44 执行的功能为:test_bpm, 功能的描述为:None, 所在的文件为:E:\untitled\API2\test_case\test_zhangsan\test_bpm.py, 所在的行为:20
INFO  root:__init__.py:45 执行的功能为:request_all, 功能的描述为:
封装一个公共的请求方法
:param req_method: 请求方法
:param req_url: 请求的url
:param req_mime: 请求的媒体类型
:param case_data: 用例数据
:param sql_type: sql语句类型
:param sql_data: sql语句
:param update_key: 更新的key
:return: Response Type
, 所在的文件为:E:\untitled\APIAutoTest_v3\request_method\request_method.py, 所在的行为:32
\ No newline at end of file
{"uuid": "0e27d102-1ea9-4cc6-b9e2-a1e727bb158b", "befores": [{"name": "sql_data", "status": "passed", "start": 1747021536738, "stop": 1747021536738}], "start": 1747021536738, "stop": 1747021536776}
\ No newline at end of file
{"uuid": "cb399250-c83b-4716-b8ef-b13303adcef3", "befores": [{"name": "url", "status": "passed", "start": 1747021538872, "stop": 1747021538872}], "start": 1747021538872, "stop": 1747021538938}
\ No newline at end of file
{"uuid": "6fd4b4e5-48ef-43d4-8b8d-27ff2a400ade", "befores": [{"name": "title", "status": "passed", "start": 1747021538993, "stop": 1747021538993}], "start": 1747021538992, "stop": 1747021539039}
\ No newline at end of file
{"uuid": "7177fc37-6fa7-47a5-89f5-c512f07b7329", "befores": [{"name": "update_key", "status": "passed", "start": 1747021536840, "stop": 1747021536840}], "start": 1747021536840, "stop": 1747021536875}
\ No newline at end of file
{"name": "test_bpm[认证接口-登录系统-反向用例-正确的用户名,密码的数据为空-中-POST-http://36.139.193.99:8088/auth-application/json-{\"username\": \"admin\",\"password\": \"\"}-expect10-None-None-None]", "status": "passed", "attachments": [{"name": "log", "source": "3cf6e654-aa81-4ee5-8dc0-fb473577de11-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "module", "value": "'认证接口'"}, {"name": "api", "value": "'登录系统'"}, {"name": "title", "value": "'反向用例-正确的用户名,密码的数据为空'"}, {"name": "level", "value": "'中'"}, {"name": "req", "value": "'POST'"}, {"name": "url", "value": "'http://36.139.193.99:8088/auth'"}, {"name": "mime", "value": "'application/json'"}, {"name": "case", "value": "'{\"username\": \"admin\",\"password\": \"\"}'"}, {"name": "expect", "value": "{'message': '账号或密码错误'}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1747021537098, "stop": 1747021537128, "uuid": "dd194a69-d511-4efc-b430-3e96a4e373ce", "historyId": "89531fdad5fd4b0247c0e8e26f94dae6", "testCaseId": "7ef4da15e0946ca293c8e0b6457e0add", "fullName": "test_case.test_bpm.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_bpm"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "LAPTOP-F40JUP61"}, {"name": "thread", "value": "45892-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_bpm.test_bpm"}]}
\ No newline at end of file
{"uuid": "8f126054-eea3-44ec-8a0a-ebae750dc1d3", "befores": [{"name": "level", "status": "passed", "start": 1747021538084, "stop": 1747021538084}], "start": 1747021538084, "stop": 1747021538128}
\ No newline at end of file
{"uuid": "e5d88220-3c56-4357-8506-10337c73e5c5", "befores": [{"name": "module", "status": "passed", "start": 1747021538476, "stop": 1747021538476}], "start": 1747021538476, "stop": 1747021538523}
\ No newline at end of file
{"uuid": "a1b4a55f-75a6-4c3c-b8e4-f008ef2d8ab2", "befores": [{"name": "sql_type", "status": "passed", "start": 1747021537515, "stop": 1747021537515}], "start": 1747021537515, "stop": 1747021537545}
\ No newline at end of file
{"uuid": "c2094282-d345-4c54-ae23-1950df104ec2", "befores": [{"name": "update_key", "status": "passed", "start": 1747021538037, "stop": 1747021538037}], "start": 1747021538037, "stop": 1747021538067}
\ No newline at end of file
{"uuid": "dd31d179-6c3a-40c1-ba33-584242a2c103", "befores": [{"name": "case", "status": "passed", "start": 1747021537396, "stop": 1747021537396}], "start": 1747021537396, "stop": 1747021537451}
\ No newline at end of file
{"uuid": "ad5c3551-bd31-4b68-8453-d59f7f786ae0", "befores": [{"name": "title", "status": "passed", "start": 1747021536305, "stop": 1747021536305}], "start": 1747021536305, "stop": 1747021536360}
\ No newline at end of file
{"uuid": "847e0065-cdfc-4f16-bac3-d9f407b4c667", "befores": [{"name": "level", "status": "passed", "start": 1747021538872, "stop": 1747021538872}], "start": 1747021538872, "stop": 1747021538940}
\ No newline at end of file
{"uuid": "5147a683-9cc7-4b41-8eb3-514ef271b1b7", "befores": [{"name": "api", "status": "passed", "start": 1747021536738, "stop": 1747021536738}], "start": 1747021536738, "stop": 1747021536784}
\ No newline at end of file
{"name": "test_bpm[维度管理-根据维度编码删除维度-正向用例-中-DELETE-http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds-query-case19-expect19-select-select ID_ from uc_demension where CODE_=\"testDemension\";-ids]", "status": "passed", "attachments": [{"name": "log", "source": "e09e510b-e8e5-420d-8073-fe0bc81bdd20-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "module", "value": "'维度管理'"}, {"name": "api", "value": "'根据维度编码删除维度'"}, {"name": "title", "value": "'正向用例'"}, {"name": "level", "value": "'中'"}, {"name": "req", "value": "'DELETE'"}, {"name": "url", "value": "'http://36.139.193.99:8088/api/demension/v1/dem/deleteDemByIds'"}, {"name": "mime", "value": "'query'"}, {"name": "case", "value": "{'ids': '需要更新'}"}, {"name": "expect", "value": "{'message': '删除维度成功!'}"}, {"name": "sql_type", "value": "'select'"}, {"name": "sql_data", "value": "'select ID_ from uc_demension where CODE_=\"testDemension\";'"}, {"name": "update_key", "value": "'ids'"}], "start": 1747021538994, "stop": 1747021539030, "uuid": "82b29b74-2c32-42d5-9476-da9d4fe6216f", "historyId": "744e2fead5ae8e499b28827bc0f7bd10", "testCaseId": "7313ea18e628429ba9747a9ce28f04ea", "fullName": "test_case.test_zhangsan.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_zhangsan"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "LAPTOP-F40JUP61"}, {"name": "thread", "value": "45892-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_zhangsan.test_bpm"}]}
\ No newline at end of file
{"uuid": "f6c90a50-d596-4255-a4e3-d3ea2dcbaef6", "befores": [{"name": "level", "status": "passed", "start": 1747021538381, "stop": 1747021538381}], "start": 1747021538381, "stop": 1747021538420}
\ No newline at end of file
{"uuid": "6fa41b96-41af-4e04-bd05-5aff8aa39bd3", "befores": [{"name": "url", "status": "passed", "start": 1747021538323, "stop": 1747021538323}], "start": 1747021538323, "stop": 1747021538371}
\ No newline at end of file
{"uuid": "4990d15f-a859-489a-9b02-c0ffb4addcfe", "befores": [{"name": "sql_type", "status": "passed", "start": 1747021537609, "stop": 1747021537609}], "start": 1747021537609, "stop": 1747021537642}
\ No newline at end of file
{"uuid": "ee10396a-1a24-437b-b14f-5869de32ca64", "befores": [{"name": "update_key", "status": "passed", "start": 1747021537560, "stop": 1747021537560}], "start": 1747021537560, "stop": 1747021537594}
\ No newline at end of file
{"uuid": "2bc3d2b6-22c8-49b0-b7e0-08a26826d1c2", "befores": [{"name": "level", "status": "passed", "start": 1747021537995, "stop": 1747021537995}], "start": 1747021537995, "stop": 1747021538029}
\ No newline at end of file
{"uuid": "2534db69-d0ed-4066-9709-ac099bc5a280", "befores": [{"name": "expect", "status": "passed", "start": 1747021538993, "stop": 1747021538993}], "start": 1747021538993, "stop": 1747021539033}
\ No newline at end of file
{"uuid": "d2856232-9565-4d80-9185-e7200ec5ce29", "befores": [{"name": "url", "status": "passed", "start": 1747021538037, "stop": 1747021538037}], "start": 1747021538037, "stop": 1747021538072}
\ No newline at end of file
{"name": "test_bpm[认证接口-登录系统-反向用例-正确的用户名,密码的数据过长-中-POST-http://36.139.193.99:8088/auth-application/json-{\"username\": \"admin\",\"password\": \"fWwO5OcV0c5AZfgOohpm4OE/FjKMc5wcjjaJvfbnrTIQMG5d3htn2aFA2iZGkSgYZ+9liGgmple6bCp+NT4PnY2Jlov8tV8Q/+nn2IZTuPCMwHqRrUchpPUr4wXWuQ+Gk55DNu4CZgxWQ5HxfzixGHJT29D6TUiz5Ea+mLm3fg8=fWwO5OcV0c5AZfgOohpm4OE/FjKMc5wcjjaJvfbnrTIQMG5d3htn2aFA2iZGkSgYZ+9liGgmple6bCp+NT4PnY2Jlov8tV8Q/+nn2IZTuPCMwHqRrUchpPUr4wXWuQ+Gk55DNu4CZgxWQ5HxfzixGHJT29D6TUiz5Ea+mLm3fg8=\"}-expect6-None-None-None]", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败,\n\t用例数据为{\"username\": \"admin\",\"password\": \"fWwO5OcV0c5AZfgOohpm4OE/FjKMc5wcjjaJvfbnrTIQMG5d3htn2aFA2iZGkSgYZ+9liGgmple6bCp+NT4PnY2Jlov8tV8Q/+nn2IZTuPCMwHqRrUchpPUr4wXWuQ+Gk55DNu4CZgxWQ5HxfzixGHJT29D6TUiz5Ea+mLm3fg8=fWwO5OcV0c5AZfgOohpm4OE/FjKMc5wcjjaJvfbnrTIQMG5d3htn2aFA2iZGkSgYZ+9liGgmple6bCp+NT4PnY2Jlov8tV8Q/+nn2IZTuPCMwHqRrUchpPUr4wXWuQ+Gk55DNu4CZgxWQ5HxfzixGHJT29D6TUiz5Ea+mLm3fg8=\"}", "trace": "self = <API2.test_case.test_bpm.test_bpm.TestBPM object at 0x0000018E8F4F1370>, req_fix = <API2.request_method.request_method.RequestMethod object at 0x0000018E8F5D4850>\nmodule = '认证接口', api = '登录系统', title = '反向用例-正确的用户名,密码的数据过长', level = '中', req = 'POST', url = 'http://36.139.193.99:8088/auth', mime = 'application/json'\ncase = '{\"username\": \"admin\",\"password\": \"fWwO5OcV0c5AZfgOohpm4OE/FjKMc5wcjjaJvfbnrTIQMG5d3htn2aFA2iZGkSgYZ+9liGgmple6bCp+NT4...2iZGkSgYZ+9liGgmple6bCp+NT4PnY2Jlov8tV8Q/+nn2IZTuPCMwHqRrUchpPUr4wXWuQ+Gk55DNu4CZgxWQ5HxfzixGHJT29D6TUiz5Ea+mLm3fg8=\"}'\nexpect = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @log_decorator\n @pytest.mark.parametrize(\"module, api, title, level,req, url, mime, case, expect, sql_type, sql_data, update_key\",datas)\n def test_bpm(self,req_fix,module, api, title, level,req, url, mime, case, expect, sql_type, sql_data, update_key):\n res=req_fix.request_all(req_method=req, req_url=url, req_mime=mime, case_data=case, sql_type=sql_type, sql_data=sql_data, update_key=update_key)\n try:\n for key in expect:\n> assert expect[key]==res.json().get(key)\nE AssertionError: assert '账号或密码错误' == None\nE + where None = <built-in method get of dict object at 0x0000018E8F5E2840>('message')\nE + where <built-in method get of dict object at 0x0000018E8F5E2840> = {'account': 'admin', 'expiration': 86400, 'loginStatus': True, 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRl...ksImlhdCI6MTc0NzAyMTE5OX0.c4COfQNcLx_KfYh0Xalh4LyFaBJrmsnRq2-L-9RYpEQ88xbXr2ad35Z9pPWIhXqtq63AcEbNsHAqomT0PlNv5g', ...}.get\nE + where {'account': 'admin', 'expiration': 86400, 'loginStatus': True, 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRl...ksImlhdCI6MTc0NzAyMTE5OX0.c4COfQNcLx_KfYh0Xalh4LyFaBJrmsnRq2-L-9RYpEQ88xbXr2ad35Z9pPWIhXqtq63AcEbNsHAqomT0PlNv5g', ...} = json()\nE + where json = <Response [200]>.json\n\ntest_case\\test_bpm\\test_bpm.py:19: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <API2.test_case.test_bpm.test_bpm.TestBPM object at 0x0000018E8F4F1370>, req_fix = <API2.request_method.request_method.RequestMethod object at 0x0000018E8F5D4850>\nmodule = '认证接口', api = '登录系统', title = '反向用例-正确的用户名,密码的数据过长', level = '中', req = 'POST', url = 'http://36.139.193.99:8088/auth', mime = 'application/json'\ncase = '{\"username\": \"admin\",\"password\": \"fWwO5OcV0c5AZfgOohpm4OE/FjKMc5wcjjaJvfbnrTIQMG5d3htn2aFA2iZGkSgYZ+9liGgmple6bCp+NT4...2iZGkSgYZ+9liGgmple6bCp+NT4PnY2Jlov8tV8Q/+nn2IZTuPCMwHqRrUchpPUr4wXWuQ+Gk55DNu4CZgxWQ5HxfzixGHJT29D6TUiz5Ea+mLm3fg8=\"}'\nexpect = {'message': '账号或密码错误'}, sql_type = None, sql_data = None, update_key = None\n\n @log_decorator\n @pytest.mark.parametrize(\"module, api, title, level,req, url, mime, case, expect, sql_type, sql_data, update_key\",datas)\n def test_bpm(self,req_fix,module, api, title, level,req, url, mime, case, expect, sql_type, sql_data, update_key):\n res=req_fix.request_all(req_method=req, req_url=url, req_mime=mime, case_data=case, sql_type=sql_type, sql_data=sql_data, update_key=update_key)\n try:\n for key in expect:\n assert expect[key]==res.json().get(key)\n except AssertionError:\n> raise AssertionError(f\"断言失败,\\n\\t用例数据为{case}\")\nE AssertionError: 断言失败,\nE \t用例数据为{\"username\": \"admin\",\"password\": \"fWwO5OcV0c5AZfgOohpm4OE/FjKMc5wcjjaJvfbnrTIQMG5d3htn2aFA2iZGkSgYZ+9liGgmple6bCp+NT4PnY2Jlov8tV8Q/+nn2IZTuPCMwHqRrUchpPUr4wXWuQ+Gk55DNu4CZgxWQ5HxfzixGHJT29D6TUiz5Ea+mLm3fg8=fWwO5OcV0c5AZfgOohpm4OE/FjKMc5wcjjaJvfbnrTIQMG5d3htn2aFA2iZGkSgYZ+9liGgmple6bCp+NT4PnY2Jlov8tV8Q/+nn2IZTuPCMwHqRrUchpPUr4wXWuQ+Gk55DNu4CZgxWQ5HxfzixGHJT29D6TUiz5Ea+mLm3fg8=\"}\n\ntest_case\\test_bpm\\test_bpm.py:21: AssertionError"}, "attachments": [{"name": "log", "source": "536656ec-ad30-4f69-ab5d-017997752a20-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "module", "value": "'认证接口'"}, {"name": "api", "value": "'登录系统'"}, {"name": "title", "value": "'反向用例-正确的用户名,密码的数据过长'"}, {"name": "level", "value": "'中'"}, {"name": "req", "value": "'POST'"}, {"name": "url", "value": "'http://36.139.193.99:8088/auth'"}, {"name": "mime", "value": "'application/json'"}, {"name": "case", "value": "'{\"username\": \"admin\",\"password\": \"fWwO5OcV0c5AZfgOohpm4OE/FjKMc5wcjjaJvfbnrTIQMG5d3htn2aFA2iZGkSgYZ+9liGgmple6bCp+NT4PnY2Jlov8tV8Q/+nn2IZTuPCMwHqRrUchpPUr4wXWuQ+Gk55DNu4CZgxWQ5HxfzixGHJT29D6TUiz5Ea+mLm3fg8=fWwO5OcV0c5AZfgOohpm4OE/FjKMc5wcjjaJvfbnrTIQMG5d3htn2aFA2iZGkSgYZ+9liGgmple6bCp+NT4PnY2Jlov8tV8Q/+nn2IZTuPCMwHqRrUchpPUr4wXWuQ+Gk55DNu4CZgxWQ5HxfzixGHJT29D6TUiz5Ea+mLm3fg8=\"}'"}, {"name": "expect", "value": "{'message': '账号或密码错误'}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1747021536889, "stop": 1747021536928, "uuid": "e69ec35c-6cac-4239-9a9b-695bddbdd5d1", "historyId": "e798d0eb0ddff963d03b6c2d33c250c5", "testCaseId": "7ef4da15e0946ca293c8e0b6457e0add", "fullName": "test_case.test_bpm.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_bpm"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "LAPTOP-F40JUP61"}, {"name": "thread", "value": "45892-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_bpm.test_bpm"}]}
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment