Commit 949f5fbd by cym

修改

parent 2e097fe6

Too many changes to show.

To preserve performance only 1000 of 1000+ files are displayed.

# -*-coding:utf-8 -*- # # -*-coding:utf-8 -*- #
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
# ProjectName: python_study # ProjectName: test_57
# FileName: __init__.py # FileName: __init__.py
# Author: xxxxxxx # Author: xxxxxxx
# Datetime: 2023/11/4 9:15 # Datetime: 2023/11/3 14:00
# Description: # Description:
# 命名规范:文件名全小写+下划线,类名大驼峰,方法和变量小写+下划线连接, #
# 常量大写,变量和常量用名词,方法用动词
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
# -*-coding:utf-8 -*- # # -*-coding:utf-8 -*- #
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
# ProjectName: python_study # ProjectName: test_57
# FileName: __init__.py # FileName: __init__.py
# Author: xxxxxxx # Author: xxxxxxx
# Datetime: 2023/11/4 9:15 # Datetime: 2023/11/3 14:01
# Description: # Description:
# 命名规范:文件名全小写+下划线,类名大驼峰,方法和变量小写+下划线连接, #
# 常量大写,变量和常量用名词,方法用动词
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
from InterfaceAutoTest.common.log import write_log from InterfaceAutoTest.common.log import write_log
log = write_log() log = write_log()
\ No newline at end of file
# -*-coding:utf-8 -*- # # -*-coding:utf-8 -*- #
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
# ProjectName: python_study # ProjectName: test_57
# FileName: db.py # FileName: db.py
# Author: xxxxxxx # Author: xxxxxxx
# Datetime: 2023/11/4 11:09 # Datetime: 2023/11/3 14:23
# Description: # Description:
# 命名规范:文件名全小写+下划线,类名大驼峰,方法和变量小写+下划线连接, #
# 常量大写,变量和常量用名词,方法用动词
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
import pymysql import pymysql
...@@ -14,36 +13,40 @@ from InterfaceAutoTest.common import log ...@@ -14,36 +13,40 @@ from InterfaceAutoTest.common import log
from InterfaceAutoTest.common.read_ini import ReadIni from InterfaceAutoTest.common.read_ini import ReadIni
from InterfaceAutoTest.data_config.settings import * from InterfaceAutoTest.data_config.settings import *
class DB: class DB:
def __init__(self): def __init__(self):
"""链接数据库,获取链接对象和游标对象"""
read_ini = ReadIni() read_ini = ReadIni()
try: try:
self.conn = pymysql.connect( self.conn = pymysql.connect(
host=read_ini.get_sql_mess(HOST), host=read_ini.get_sql_message(HOST),
port=int(read_ini.get_sql_mess(PORT)), port=int(read_ini.get_sql_message(PORT)),
user=read_ini.get_sql_mess(USER), user=read_ini.get_sql_message(USER),
password=read_ini.get_sql_mess(PWD), password=read_ini.get_sql_message(PWD),
database=read_ini.get_sql_mess(DATABASE), database=read_ini.get_sql_message(DATABASE),
charset="utf8" charset="utf8"
) )
self.cursor = self.conn.cursor() self.cursor = self.conn.cursor()
except: except:
log.error("链接数据库错误或者获取游标对象失败,请察看数据库的链接配置!!!") log.error("链接数据库错误或者获取游标对象失败!!!,请求察看数据库的链接配置.")
raise pymysql.MySQLError("链接数据库错误或者获取游标对象失败,请察看数据库的链接配置!!!") raise pymysql.MySQLError("链接数据库错误或者获取游标对象失败!!!,请求察看数据库的链接配置.")
def close(self): def close(self):
self.cursor.close() self.cursor.close()
self.conn.close() self.conn.close()
def delete(self, sql): def delete(self, sql):
"""执行删除的sql语句"""
try: try:
self.cursor.execute(sql) self.cursor.execute(sql)
self.conn.commit() self.conn.commit()
except: except:
log.error("执行删除的sql语句错误,请察看对应的删除的sql语句!!!") log.error("执行删除的sql语句错误,请察看对应的删除的sql语句")
raise ValueError("执行删除的sql语句错误,请察看对应的删除的sql语句!!!") raise ValueError("执行删除的sql语句错误,请察看对应的删除的sql语句")
def select(self, sql, num=1): def select(self, sql, num=1):
"""执行查询的sql语句"""
try: try:
self.cursor.execute(sql) self.cursor.execute(sql)
select_result = self.cursor.fetchall() select_result = self.cursor.fetchall()
...@@ -51,8 +54,14 @@ class DB: ...@@ -51,8 +54,14 @@ class DB:
return select_result[0][0] return select_result[0][0]
elif select_result and num == 2: elif select_result and num == 2:
return select_result[0][0], select_result[0][1] return select_result[0][0], select_result[0][1]
elif select_result and num > 2: elif select_result and num > 3:
return select_result return select_result
except: except:
log.error("执行查询的sql语句错误,请察看对应的查询的sql语句!!!") log.error("执行查询的sql语句错误,请察看对应的查询的sql语句")
raise ValueError("执行查询的sql语句错误,请察看对应的查询的sql语句!!!") raise ValueError("执行查询的sql语句错误,请察看对应的查询的sql语句")
\ No newline at end of file
if __name__ == '__main__':
db = DB()
sql = """SELECT * FROM uc_demension LIMIT 1"""
print(db.select(sql))
# -*-coding:utf-8 -*- # # -*-coding:utf-8 -*- #
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
# ProjectName: python_study # ProjectName: test_57
# FileName: log.py # FileName: log.py
# Author: xxxxxxx # Author: xxxxxxx
# Datetime: 2023/11/4 10:30 # Datetime: 2023/11/3 14:02
# Description: # Description:
# 命名规范:文件名全小写+下划线,类名大驼峰,方法和变量小写+下划线连接, #
# 常量大写,变量和常量用名词,方法用动词
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
import os
import logging import logging
import os
def write_log(): def write_log():
logger = logging.getLogger(name="ccc") """创建写入日志对象"""
logger = logging.getLogger(name="黄总")
logger.level = logging.NOTSET logger.level = logging.NOTSET
log_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), "report/log/ccc.log") log_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), "report/log/日志汇总.log")
handler = logging.FileHandler(log_path, mode="a", encoding="utf-8") handler = logging.FileHandler(log_path, mode="a", encoding="utf-8")
format = logging.Formatter('%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s - %(name)s') format = logging.Formatter('%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s - %(name)s')
handler.setFormatter(format) handler.setFormatter(format)
logger.addHandler(handler) logger.addHandler(handler)
return logger return logger
\ No newline at end of file
# -*-coding:utf-8 -*- # # -*-coding:utf-8 -*- #
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
# ProjectName: python_study # ProjectName: test_57
# FileName: read_excel.py # FileName: read_excel.py
# Author: xxxxxxx # Author: xxxxxxx
# Datetime: 2023/11/4 11:09 # Datetime: 2023/11/3 14:31
# Description: # Description:
# 命名规范:文件名全小写+下划线,类名大驼峰,方法和变量小写+下划线连接, #
# 常量大写,变量和常量用名词,方法用动词
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
import openpyxl import openpyxl
from InterfaceAutoTest.data_config.settings import *
from InterfaceAutoTest.common import log from InterfaceAutoTest.common import log
from InterfaceAutoTest.common.read_ini import ReadIni from InterfaceAutoTest.common.read_ini import ReadIni
from InterfaceAutoTest.common.read_json import read_json from InterfaceAutoTest.common.read_json import read_json
from InterfaceAutoTest.data_config.settings import *
class ReadExcel: class ReadExcel:
def __init__(self, table_name): def __init__(self, table_nme, excel_path=None):
"""获取数据配置层中除了ini文件以外的所有文件的路径,再获取excel的工作表,再读取所有的json文件"""
self.read_ini = ReadIni() self.read_ini = ReadIni()
excel_path = self.read_ini.get_file_path(EXCEL) excel_path = self.read_ini.get_file_path(EXCEL)
case_data_path = self.read_ini.get_file_path(CASE) case_data_path = self.read_ini.get_file_path(CASE)
expect_data_path = self.read_ini.get_file_path(EXPECT) expect_data_path = self.read_ini.get_file_path(EXPECT)
sql_data_path = self.read_ini.get_file_path(SQL) sql_data_path = self.read_ini.get_file_path(SQL)
table_name = table_name # 获取工作表名称
# table_name = self.read_ini.get_table_name(TABLE_NAME)
table_name = table_nme
wb = openpyxl.load_workbook(excel_path) wb = openpyxl.load_workbook(excel_path)
try: try:
self.ws = wb[table_name] self.ws = wb[table_name]
except: except:
log.error("获取工作表失败,请察看工作表名称是否配置正确!!!") log.error("获取工作表失败,请察看工作表名称是否配置正确!!!")
raise KeyError("获取工作表失败,请察看工作表名称是否配置正确!!!") raise KeyError("获取工作表失败,请察看工作表名称是否配置正确!!!")
self.case_data_dict = read_json(case_data_path) self.case_data_dict = read_json(case_data_path)
self.expect_data_dict = read_json(expect_data_path) self.expect_data_dict = read_json(expect_data_path)
self.sql_data_dict = read_json(sql_data_path) self.sql_data_dict = read_json(sql_data_path)
def __get_cell_value(self, column, row): def __get_cell_value(self, column: str, row: int) -> str:
"""获取指定单元格数据"""
try: try:
value = self.ws[column+str(row)].value value = self.ws[column+str(row)].value
if value is None: if value is None:
...@@ -43,26 +49,44 @@ class ReadExcel: ...@@ -43,26 +49,44 @@ class ReadExcel:
elif value.strip(): elif value.strip():
return value.strip() return value.strip()
except: except:
log.error("获取指定单元格数据失败,请察看输入的列号和行号是否正确!!") log.error("获取指定单元格数据失败,请察看输入的列号和行号是否正确!!")
raise KeyError("获取指定单元格数据失败,请察看输入的列号和行号是否正确!!") raise KeyError("获取指定单元格数据失败,请察看输入的列号和行号是否正确!!")
def module_name(self, row): def module_name(self, row):
"""根据行号,获取模块名称"""
return self.__get_cell_value(MODULE, row) return self.__get_cell_value(MODULE, row)
def api_name(self, row): def api_name(self, row):
"""根据行号,获取接口名称"""
return self.__get_cell_value(API, row) return self.__get_cell_value(API, row)
def case_method(self, row): def title(self, row):
return self.__get_cell_value(METHOD, row) """根据行号,获取用例标题"""
return self.__get_cell_value(TITLE, row)
def level(self, row):
"""根据行号,获取用例等级"""
return self.__get_cell_value(LEVEL, row)
def case_url(self, row): def case_url(self, row):
"""根据行号,获取请求的url"""
return self.read_ini.get_host(URL_HOST_CUSTOM) + self.__get_cell_value(URL, row) return self.read_ini.get_host(URL_HOST_CUSTOM) + self.__get_cell_value(URL, row)
def case_method(self, row):
"""根据行号,获取请求方法"""
return self.__get_cell_value(METHOD, row)
def case_mime(self, row): def case_mime(self, row):
return self.__get_cell_value(MIME, row).lower() """根据行号,获取媒体类型"""
mime = self.__get_cell_value(MIME, row)
if mime:
return mime.lower()
def case_data(self, row): def case_data(self, row):
"""根据行号,获取用例数据"""
case_data_key = self.__get_cell_value(CASE_DATA, row) case_data_key = self.__get_cell_value(CASE_DATA, row)
if case_data_key: if case_data_key:
module_name = self.module_name(row) module_name = self.module_name(row)
api_name = self.api_name(row) api_name = self.api_name(row)
...@@ -73,6 +97,7 @@ class ReadExcel: ...@@ -73,6 +97,7 @@ class ReadExcel:
raise KeyError("请察看是否配置了用例数据!!!") raise KeyError("请察看是否配置了用例数据!!!")
def expect_data(self, row): def expect_data(self, row):
"""根据行号,获取期望数据"""
expect_data_key = self.__get_cell_value(EXPECT_DATA, row) expect_data_key = self.__get_cell_value(EXPECT_DATA, row)
module_name = self.module_name(row) module_name = self.module_name(row)
api_name = self.api_name(row) api_name = self.api_name(row)
...@@ -83,12 +108,16 @@ class ReadExcel: ...@@ -83,12 +108,16 @@ class ReadExcel:
raise KeyError("请察看是否配置了期望数据!!!") raise KeyError("请察看是否配置了期望数据!!!")
def sql_type(self, row): def sql_type(self, row):
"""根据行号,获取sql语句类型"""
sql_type_value = self.__get_cell_value(SQL_TYPE, row) sql_type_value = self.__get_cell_value(SQL_TYPE, row)
if sql_type_value: if sql_type_value:
return sql_type_value.lower() return sql_type_value.lower()
def sql_data(self, row): def sql_data(self, row):
"""根据行号,获取sql语句"""
sql_data_key = self.__get_cell_value(SQL_DATA, row) sql_data_key = self.__get_cell_value(SQL_DATA, row)
if sql_data_key: if sql_data_key:
module_name = self.module_name(row) module_name = self.module_name(row)
api_name = self.api_name(row) api_name = self.api_name(row)
...@@ -99,26 +128,45 @@ class ReadExcel: ...@@ -99,26 +128,45 @@ class ReadExcel:
raise KeyError("请察看是否配置了sql数据!!!") raise KeyError("请察看是否配置了sql数据!!!")
def update_key(self, row): def update_key(self, row):
"""根据行号,获取更新的key"""
return self.__get_cell_value(UPDATE_KEY, row) return self.__get_cell_value(UPDATE_KEY, row)
def get_data(self): def get_data(self):
"""将测试数据存放在一个二维列表中"""
list_data = [] list_data = []
try: try:
for row in range(2, self.ws.max_row+1): for row in range(2, self.ws.max_row + 1):
case_method = self.case_method(row) # module_name
module_name = self.module_name(row)
# api
api_name = self.api_name(row)
# title
title = self.title(row)
# level
level = self.level(row)
# url
case_url = self.case_url(row) case_url = self.case_url(row)
# method
case_method = self.case_method(row)
# mime
case_mime = self.case_mime(row) case_mime = self.case_mime(row)
# case_data
case_data = self.case_data(row) case_data = self.case_data(row)
# expect_data
expect_data = self.expect_data(row) expect_data = self.expect_data(row)
# sql_type
sql_type = self.sql_type(row) sql_type = self.sql_type(row)
# sql_data
sql_data = self.sql_data(row) sql_data = self.sql_data(row)
# update_key
update_key = self.update_key(row) update_key = self.update_key(row)
list_data.append([case_method, case_url, case_mime, case_data, expect_data, sql_type, sql_data, update_key]) list_data.append(
[module_name, api_name, title, level, case_url, case_method, case_mime, case_data, expect_data, sql_type, sql_data, update_key])
else: else:
return list_data return list_data
except: except:
log.error("请察看excel中是否存在空行,如果存在,请删除空行!!") log.error("请察看excel中是否存在空行,如果存在,请删除空行!!")
raise TypeError("请察看excel中是否存在空行,如果存在,请删除空行!!") raise TypeError("请察看excel中是否存在空行,如果存在,请删除空行!!")
if __name__ == '__main__': if __name__ == '__main__':
......
# -*-coding:utf-8 -*- # # -*-coding:utf-8 -*- #
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
# ProjectName: python_study # ProjectName: test_57
# FileName: read_ini.py # FileName: read_ini.py
# Author: xxxxxxx # Author: xxxxxxx
# Datetime: 2023/11/4 10:30 # Datetime: 2023/11/3 14:05
# Description: # Description:
# 命名规范:文件名全小写+下划线,类名大驼峰,方法和变量小写+下划线连接, #
# 常量大写,变量和常量用名词,方法用动词
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
import configparser import configparser
import os import os
from InterfaceAutoTest.common import log from InterfaceAutoTest.common import log
from InterfaceAutoTest.data_config.settings import * from InterfaceAutoTest.data_config.settings import *
class ReadIni: class ReadIni:
def __init__(self): def __init__(self):
"""读取ini文件"""
self.data_config_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), "data_config") 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") ini_path = os.path.join(self.data_config_path, "config.ini")
self.conf = configparser.ConfigParser() self.conf = configparser.ConfigParser()
self.conf.read(ini_path, encoding="utf8") self.conf.read(ini_path, encoding="utf-8")
def get_file_path(self, key): def get_file_path(self, key):
"""根据key,获取file节点下文件的路径"""
try: try:
file_name = self.conf.get(FILE, key) file_name = self.conf.get(FILE, key)
except: except:
log.error("输入file节点下的key错误,请察看配置文件!!!") log.error("输入file节点下的key,错误,请求察看配置文件~!!!")
raise KeyError("输入file节点下的key错误,请察看配置文件!!!") raise KeyError("输入file节点下的key,错误,请求察看配置文件~!!!")
file_path = os.path.join(self.data_config_path, file_name) file_path = os.path.join(self.data_config_path, file_name)
if os.path.isfile(file_path): if os.path.isfile(file_path):
return file_path return file_path
else: else:
log.error("获取file节点下,文件的路径错误,请察看配置文件是否配置正确!!!") log.error("获取file节点下,文件的路径错误,请察看配置文件是否配置正确~!!!")
raise FileExistsError("获取file节点下,文件的路径错误,请察看配置文件是否配置正确!!!") raise FileExistsError("获取file节点下,文件的路径错误,请察看配置文件是否配置正确~!!!")
def get_host(self, key): def get_host(self, key):
"""根据key,获取域名"""
try: try:
return self.conf.get(URL_HOST, key) return self.conf.get(URL_HOST, key)
except: except:
log.error("输入host节点下的key,错误,请察看配置文件!!!") log.error("输入host节点下的key,错误,请求察看配置文件~!!!")
raise KeyError("输入host节点下的key,错误,请察看配置文件!!!") raise KeyError("输入host节点下的key,错误,请求察看配置文件~!!!")
def get_sql_mess(self, key): def get_table_name(self, key):
"""根据key,获取工作表名称"""
try: try:
return self.conf.get(CONN_SQL, key) return self.conf.get(TABLE, key)
except: except:
log.error("输入sql节点下的key,错误,请察看配置文件!!!") log.error("输入table节点下的key,错误,请求察看配置文件~!!!")
raise KeyError("输入sql节点下的key,错误,请察看配置文件!!!") raise KeyError("输入table节点下的key,错误,请求察看配置文件~!!!")
def get_table_name(self, key): def get_sql_message(self, key):
"""根据key,获取数据库"""
try: try:
return self.conf.get(TABLE, key) return self.conf.get(CONN_SQL, key)
except: except:
log.error("输入table节点下的key,错误,请察看配置文件!!!") log.error("输入sql节点下的key,错误,请求察看配置文件~!!!")
raise KeyError("输入table节点下的key,错误,请察看配置文件!!!") raise KeyError("输入sql节点下的key,错误,请求察看配置文件~!!!")
if __name__ == '__main__': if __name__ == '__main__':
read_ini = ReadIni() ini = ReadIni()
print(read_ini.get_file_path("excel")) print(ini.get_sql_message("host"))
# -*-coding:utf-8 -*- # # -*-coding:utf-8 -*- #
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
# ProjectName: python_study # ProjectName: test_57
# FileName: read_json.py # FileName: read_json.py
# Author: xxxxxxx # Author: xxxxxxx
# Datetime: 2023/11/4 11:09 # Datetime: 2023/11/3 14:16
# Description: # Description:
# 命名规范:文件名全小写+下划线,类名大驼峰,方法和变量小写+下划线连接, #
# 常量大写,变量和常量用名词,方法用动词
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
import json import json
import os import os
from InterfaceAutoTest.common import log from InterfaceAutoTest.common import log
def read_json(filename): def read_json(filename):
"""读取json文件,将json文件的内容转成python对象,并返回"""
if os.path.isfile(filename) and filename.endswith(".json"): if os.path.isfile(filename) and filename.endswith(".json"):
try: try:
with open(filename, mode="r", encoding="utf-8") as f: with open(filename, mode="r", encoding="utf-8") as f:
return json.load(f) return json.loads(f.read())
except: except:
log.error("打开json文件获取json文件的内容序列化为python对象失败,请察看json文件是否有错误!!!") log.error("开打json文件获取json文件的内容序列化为python对象失败,请察看json文件是否有错误!!!")
raise FileExistsError("打开json文件获取json文件的内容序列化为python对象失败,请察看json文件是否有错误!!!") raise FileExistsError("开打json文件获取json文件的内容序列化为python对象失败,请察看json文件是否有错误!!!")
else: else:
log.error("json文件的路径不合法") log.error("json文件的路径不合法")
raise FileNotFoundError("json文件的路径不合法") raise FileNotFoundError("json文件的路径不合法")
\ No newline at end of file
{ {
"认证接口": { "认证接口":{
"登录系统": { "登录系统":{
"LoginSuccess": {"password": "MTIzNDU2","username": "admin"}, "LoginSuccess": {"password": "MTIzNDU2","username": "admin"},
"LoginErrorUsernameNone": {"password": "MTIzNDU2","username": ""}, "LoginErrorUsernameLong":{"password": "MTIzNDU2","username": "adminadminadminadminadminadmin"},
"LoginErrorPasswordNone": {"password": "","username": "admin"} "LoginErrorUsernameShort":{"password": "MTIzNDU2","username": "a"},
} "LoginErrorUsernameNone":{"password": "MTIzNDU2","username": ""},
}, "LoginErrorUsernameSpecial":{"password": "MTIzNDU2","username": "@#!@#!@"},
"维度管理": { "LoginErrorPwdLong":{"password": "MTIzNDU2MTIzNDU2MTIzNDU2MTIzNDU2MTIzNDU2","username": "admin"},
"添加维度": { "LoginErrorPwdShort":{"password": "m","username": "admin"},
"AddDemSuccess": {"code": "test_add_dem_ccc","description": "test_ccc的添加维度测试","isDefault": 0,"name": "test_ccc的添加维度"}, "LoginErrorPwdNone":{"password": "","username": "admin"},
"AddDemErrorCodeNone": {"code": "","description": "test_ccc的添加维度测试","isDefault": 0,"name": "test_ccc的添加维度1"}, "LoginErrorPwdSpecial":{"password": "@#!@#!@","username": "admin"},
"AddDemErrorNameNone": {"code": "test_add_dem_ccc1","description": "test_ccc的添加维度测试","isDefault": 0,"name": ""} "LoginErrorPwdError":{"password": "MTIzNDU222","username": "admin"}
}, }
"根据维度编码获取维度信息": {
"GetDemSuccess": {"code": "test_add_dem_ccc"}
}
},
"组织管理": {
"添加组织": {
"AddOrgSuccess": {"code": "test_add_org_ccc","demId": "不知道","exceedLimitNum": 0,"grade": "","limitNum": 0,"name": "test_ccc的添加组织","nowNum": 0,"orderNo": 0,"parentId": "0"},
"AddOrgErrorCodeNone": {"code": "","demId": "不知道","exceedLimitNum": 0,"grade": "","limitNum": 0,"name": "test_ccc的添加组织1","nowNum": 0,"orderNo": 0,"parentId": "0"},
"AddOrgErrorNameNone": {"code": "test_add_org_ccc1","demId": "不知道","exceedLimitNum": 0,"grade": "","limitNum": 0,"name": "","nowNum": 0,"orderNo": 0,"parentId": "0"},
"AddOrgErrorDemIdNone": {"code": "test_add_org_ccc2","demId": "","exceedLimitNum": 0,"grade": "","limitNum": 0,"name": "test_ccc的添加组织2","nowNum": 0,"orderNo": 0,"parentId": "0"}
}, },
"添加组织参数": { "维度管理": {
"AddOrgParamsSuccess": {"query": {"orgCode": "test_add_org_ccc"}, "body": [{"alias":"sz","value":90}]} "添加维度": {
"AddDemSuccess": {
"code": "dem_test57_abc",
"description": "测试维度57",
"isDefault": 0,
"name": "测试57期的维度"
}
},
"根据维度编码获取维度信息": {
"GetDemMessageSuccess": {"code": "dem_test57_abc"}
},
"根据维度编码删除维度": {
"DeleteDemSuccess": {"ids": "不知道"}
}
}, },
"根据组织编码删除组织": { "组织管理": {
"DeleteOrgSuccess": "test_add_org_ccc" "添加组织": {
"AddOrgSuccess": {
"code": "test_org_57",
"demId": "不知道",
"exceedLimitNum": 0,
"grade": "",
"limitNum": 0,
"name": "测试组织",
"nowNum": 0,
"orderNo": 0,
"parentId": "0"
}
},
"添加组织参数": {
"AddOrgParamsSuccess": {"query": {"orgCode": "test_org_57"}, "body": [{"alias":"sz","value":9000}]}
},
"删除组织": {
"DelOrgSuccess": "test_org_57"
}
} }
} }
}
\ No newline at end of file
[file] [file]
;case为用例数据文件
case=case_data.json case=case_data.json
;expect为期望数据文件
expect=expect_data.json expect=expect_data.json
sql=sql_data.json ;excel为用例管理文件
excel=APIAutoTest.xlsx excel=APIAutoTest.xlsx
;sql语句的json文件
sql=sql_data.json
[host]
;host为被测系统的域名
host=http://120.46.172.186:8080
[table]
;table_name为excel的工作表名称
table_name=BPM
[sql] [sql]
;链接数据库的配置
host=120.46.172.186 host=120.46.172.186
port=3306 port=3306
user=root user=root
pwd=root@2023 pwd=root@2023
database=eipsaas database=eipsaas
\ No newline at end of file
[table]
table_name1=登录
table_name2=维度
table_name3=组织
[host]
host=http://120.46.172.186:8080
\ No newline at end of file
{ {
"认证接口": { "认证接口":{
"登录系统": { "登录系统":{
"LoginSuccess": {"username": "超级管理员","account": "admin", "loginStatus": true}, "LoginSuccess": {"username": "超级管理","account": "admin", "loginStatus": true},
"LoginErrorUsernameNone": {"state": false, "message":"账号或密码错误"}, "LoginErrorUsernameLong":{"state": false, "message":"账号或密码错误"},
"LoginErrorPasswordNone": {"state": false, "message":"账号或密码错误"} "LoginErrorUsernameShort":{"state": false, "message":"账号或密码错误"},
} "LoginErrorUsernameNone":{"state": false, "message":"账号或密码错误"},
}, "LoginErrorUsernameSpecial":{"state": false, "message":"账号或密码错误"},
"维度管理": { "LoginErrorPwdLong":{"state": false, "message":"账号或密码错误"},
"添加维度": { "LoginErrorPwdShort":{"state": false, "message":"账号或密码错误"},
"AddDemSuccess": {"state": true, "message": "添加维度成功!"}, "LoginErrorPwdNone":{"state": false, "message":"账号或密码错误"},
"AddDemErrorCodeNone": {"state": false, "message": "添加维度失败!"}, "LoginErrorPwdSpecial":{"state": false, "message":"账号或密码错误"},
"AddDemErrorNameNone": {"state": false, "message": "添加维度失败!"} "LoginErrorPwdError":{"state": false, "message":"账号或密码错误"}
}, },
"根据维度编码获取维度信息": { "刷新token": {
"GetDemSuccess": {"demDesc": "test_ccc的添加维度测试"} "RefreshSuccess": {"message": "刷新成功"}
} }
},
"组织管理": {
"添加组织": {
"AddOrgSuccess": {"state": true, "message": "添加组织成功!"},
"AddOrgErrorCodeNone": {"state": false, "message": "添加组织失败!"},
"AddOrgErrorNameNone": {"state": false, "message": "添加组织失败!"},
"AddOrgErrorDemIdNone": {"state": false, "message": "添加组织失败!"}
}, },
"添加组织参数": { "维度管理": {
"AddOrgParamsSuccess": {"state":true,"message":"保存组织参数成功!"} "添加维度": {
"AddDemSuccess": {"state": true, "message": "添加维度成功!"}
},
"根据维度编码获取维度信息": {
"GetDemMessageSuccess": {"demCode": "dem_test57_abc", "name": "测试57期的维度"}
},
"根据维度编码删除维度": {
"DeleteDemSuccess": {"state": true, "message": "删除维度成功"}
}
}, },
"根据组织编码删除组织": { "组织管理": {
"DeleteOrgSuccess": {"state":true,"message":"删除组织成功!"} "添加组织": {
"AddOrgSuccess": {"state": true, "message": "添加组织成功!"}
},
"添加组织参数": {
"AddOrgParamsSuccess": {"state":true,"message":"保存组织参数成功!"}
},
"删除组织": {
"DelOrgSuccess": {"state":true,"message":"删除组织成功!"}
}
} }
}
} }
\ No newline at end of file
# -*-coding:utf-8 -*- # # -*-coding:utf-8 -*- #
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
# ProjectName: python_study # ProjectName: test_57
# FileName: settings.py # FileName: settings.py
# Author: xxxxxxx # Author: xxxxxxx
# Datetime: 2023/11/4 10:29 # Datetime: 2023/11/3 17:03
# Description: # Description:
# 命名规范:文件名全小写+下划线,类名大驼峰,方法和变量小写+下划线连接, #
# 常量大写,变量和常量用名词,方法用动词
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------
# file节点名称==================== # file节点名称====================
...@@ -22,10 +21,7 @@ SQL = "sql" ...@@ -22,10 +21,7 @@ SQL = "sql"
TABLE = "table" TABLE = "table"
# table节点名称=key的名称======================= # table节点名称=key的名称=======================
TABLE_NAME1 = "table_name1" TABLE_NAME = "table_name"
TABLE_NAME2 = "table_name2"
TABLE_NAME3 = "table_name3"
# host节点名称================= # host节点名称=================
URL_HOST = "host" URL_HOST = "host"
...@@ -56,4 +52,7 @@ CASE_DATA = "I" ...@@ -56,4 +52,7 @@ CASE_DATA = "I"
EXPECT_DATA = "J" EXPECT_DATA = "J"
SQL_TYPE = "K" SQL_TYPE = "K"
SQL_DATA = "L" SQL_DATA = "L"
UPDATE_KEY = "M" UPDATE_KEY = "M"
\ No newline at end of file
{ {
"维度管理": { "维度管理": {
"添加维度": { "添加维度": {
"AddDemSuccess": "DELETE FROM uc_demension WHERE `CODE_`=\"test_add_dem_ccc\";" "AddDemSuccess": "DELETE FROM uc_demension WHERE `CODE_`=\"dem_test57_abc\";"
},
"根据维度编码删除维度": {
"DeleteDemSuccess": "SELECT ID_ from uc_demension WHERE `CODE_`=\"dem_test57_abc\";"
}
}, },
"根据维度编码删除维度": { "组织管理": {
"DeleteDemByIdsSuccess": "SELECT ID_ from uc_demension WHERE `CODE_`=\"test_add_dem_ccc\";" "添加组织": {
"AddOrgSuccess": {
"select": "SELECT ID_ from uc_demension WHERE `CODE_`=\"dem_test57_abc\";",
"delete": "DELETE FROM uc_org WHERE `CODE_`=\"test_org_57\";"
}
}
} }
},
"组织管理": {
"添加组织": {
"AddOrgSuccess": {
"select": "SELECT ID_ from uc_demension WHERE `CODE_`=\"test_add_dem_ccc\";",
"delete": "DELETE FROM uc_org WHERE `CODE_`=\"test_add_org_ccc\";"
},
"AddOrgErrorCodeNone": "SELECT ID_ from uc_demension WHERE `CODE_`=\"test_add_dem_ccc\";",
"AddOrgErrorNameNone": "SELECT ID_ from uc_demension WHERE `CODE_`=\"test_add_dem_ccc\";"
}
}
} }
\ No newline at end of file
{"uuid": "43998ed6-e308-4d47-9cb4-7c7533cf8573", "befores": [{"name": "api_name", "status": "passed", "start": 1699241306642, "stop": 1699241306642}], "start": 1699241306642, "stop": 1699241306708}
\ No newline at end of file
{"uuid": "24a523df-6de9-44bd-8568-8b1c95d792e4", "befores": [{"name": "case_url", "status": "passed", "start": 1699241306774, "stop": 1699241306774}], "start": 1699241306774, "stop": 1699241306873}
\ No newline at end of file
{"uuid": "5eacf4bf-c634-4f37-b5eb-619f7d734376", "befores": [{"name": "case_method", "status": "passed", "start": 1699241329437, "stop": 1699241329438}], "start": 1699241329437, "stop": 1699241329588}
\ No newline at end of file
{"uuid": "5fba0b44-f569-41f8-b13a-eb8c2ba0c480", "befores": [{"name": "api_name", "status": "passed", "start": 1699241340703, "stop": 1699241340703}], "start": 1699241340703, "stop": 1699241340806}
\ No newline at end of file
{"uuid": "f62b63ab-f600-4641-af8b-eccb6acdaf2e", "befores": [{"name": "update_key", "status": "passed", "start": 1699241334299, "stop": 1699241334299}], "start": 1699241334299, "stop": 1699241334361}
\ No newline at end of file
{"uuid": "e8ea22b4-70bd-4bbd-977b-6b3da3f3eba9", "befores": [{"name": "case_data", "status": "passed", "start": 1699241338482, "stop": 1699241338482}], "start": 1699241338482, "stop": 1699241338557}
\ No newline at end of file
{"uuid": "d6a9ccca-c830-4179-ba08-e28dfaea6f8c", "befores": [{"name": "expect_data", "status": "passed", "start": 1699241336384, "stop": 1699241336384}], "start": 1699241336384, "stop": 1699241336461}
\ No newline at end of file
{"uuid": "ae3b6e6a-0951-4caa-9964-ac9672293281", "befores": [{"name": "case_data", "status": "passed", "start": 1699241329438, "stop": 1699241329438}], "start": 1699241329438, "stop": 1699241329588}
\ No newline at end of file
{"uuid": "2e605151-7918-4ca5-b708-9e927c625a34", "befores": [{"name": "sql_data", "status": "passed", "start": 1699241307390, "stop": 1699241307390}], "start": 1699241307390, "stop": 1699241307485}
\ No newline at end of file
ERROR  黄总:test_bpm.py:59 断言失败,用例数据为:{'ids': '1721369114598981632'},期望数据为:{'state': True, 'message': '删除维度成功'},服务器返回的数据为:{"state":true,"message":"删除维度成功!","value":""}
ERROR  黄总:test_bpm.py:59 断言失败,用例数据为:{'ids': '1721369114598981632'},期望数据为:{'state': True, 'message': '删除维度成功'},服务器返回的数据为:{"state":false,"message":"","logId":"1721369125588058112"}
\ No newline at end of file
{"uuid": "e17ef0a9-2860-4389-a912-c7b6f0d3eac0", "befores": [{"name": "level", "status": "passed", "start": 1699241332205, "stop": 1699241332205}], "start": 1699241332205, "stop": 1699241332283}
\ No newline at end of file
{"uuid": "46d97af8-5f22-4c28-a684-138cf63c1d87", "befores": [{"name": "expect_data", "status": "passed", "start": 1699241311794, "stop": 1699241311794}], "start": 1699241311794, "stop": 1699241311867}
\ No newline at end of file
{"uuid": "493c25a4-71c4-4e68-9790-7a7399299e28", "befores": [{"name": "case_url", "status": "passed", "start": 1699241341434, "stop": 1699241341434}], "start": 1699241341434, "stop": 1699241341529}
\ No newline at end of file
{"uuid": "d1cbdef0-f57a-41d4-9172-eee0116505e1", "befores": [{"name": "case_mime", "status": "passed", "start": 1699241352538, "stop": 1699241352538}], "start": 1699241352538, "stop": 1699241352601}
\ No newline at end of file
{"name": "反向用例-username为特殊字符-password正确", "status": "passed", "parameters": [{"name": "module_name", "value": "'认证接口'"}, {"name": "api_name", "value": "'登录系统'"}, {"name": "title", "value": "'反向用例-username为特殊字符-password正确'"}, {"name": "level", "value": "'中'"}, {"name": "case_url", "value": "'http://120.46.172.186:8080/auth'"}, {"name": "case_method", "value": "'POST'"}, {"name": "case_mime", "value": "'json'"}, {"name": "case_data", "value": "{'password': 'MTIzNDU2', 'username': '@#!@#!@'}"}, {"name": "expect_data", "value": "{'state': False, 'message': '账号或密码错误'}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1699241340909, "stop": 1699241341000, "uuid": "b883ba8d-ff7f-487a-8433-31e26e62801f", "historyId": "5f810b03db6dd841b303f2cda95b4f8a", "testCaseId": "2d826f9779cfe5666a21cc91e511c236", "fullName": "test_zhangsan.test_bpm.TestBPM#test_bpm", "labels": [{"name": "feature", "value": "认证接口"}, {"name": "story", "value": "登录系统"}, {"name": "severity", "value": "中"}, {"name": "epic", "value": "BPM_张三"}, {"name": "parentSuite", "value": "test_zhangsan"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "LAPTOP-31V3JBFR"}, {"name": "thread", "value": "22076-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_zhangsan.test_bpm"}]}
\ No newline at end of file
{"uuid": "9a7b73bd-b26b-42be-904d-48e9e59e8349", "befores": [{"name": "module_name", "status": "passed", "start": 1699241313887, "stop": 1699241313887}], "start": 1699241313887, "stop": 1699241313952}
\ No newline at end of file
{"uuid": "dd2863e1-c492-4100-b2e4-20862c5a64ee", "befores": [{"name": "case_method", "status": "passed", "start": 1699241341331, "stop": 1699241341331}], "start": 1699241341331, "stop": 1699241341428}
\ No newline at end of file
{"name": "正向用例", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <InterfaceAutoTest.test_case.test_zhangsan.test_bpm.TestBPM object at 0x0000019CBA78EF40>\ndb_fix = <InterfaceAutoTest.common.db.DB object at 0x0000019CB9189B80>\nreq_fix = <InterfaceAutoTest.requests_method.requests_method.RequestsMethod object at 0x0000019CBA951B20>, module_name = '认证接口'\napi_name = '刷新token', title = '正向用例', level = '中', case_url = 'http://120.46.172.186:8080/refresh', case_method = 'GET'\ncase_mime = None, case_data = None, expect_data = {'message': '刷新成功'}, sql_type = None, sql_data = None, update_key = None\n\n @allure.epic(\"BPM_张三\")\n @pytest.mark.parametrize(\"module_name, api_name, title, level, case_url, case_method, case_mime, case_data, expect_data, sql_type, sql_data, update_key\", ReadExcel(\"BPM\", excel_path=excel_path).get_data())\n def test_bpm(self, db_fix, req_fix, module_name, api_name, title, level, case_url, case_method, case_mime, case_data, expect_data, sql_type, sql_data, update_key):\n allure.dynamic.feature(module_name)\n allure.dynamic.story(api_name)\n allure.dynamic.title(title)\n allure.dynamic.severity(level)\n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象执行删除的sql语句\n db_fix.delete(sql_data)\n # 使用RequestsMethod类对象发送请求--pass\n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象执行查询的sql语句,并接收查询的结果\n select_result = db_fix.select(sql_data)\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 使用RequestsMethod类对象发送请求--pass\n \n # 判断sql语句的类型是否为select|delete或者为delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象执行删除的sql语句\n db_fix.delete(sql_data.get(\"delete\"))\n # 使用DB类对象执行查询的sql语句,并接收查询的结果\n select_result = db_fix.select(sql_data.get(\"select\"))\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestsMethod类对象发送请求\n res = req_fix.request_all(req_method=case_method, req_url=case_url, req_mime=case_mime, case_data=case_data)\n \n \n # 断言\n try:\n for key in expect_data:\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '刷新成功' == None\nE + where None = <built-in method get of dict object at 0x0000019CBA8F2D80>('message')\nE + where <built-in method get of dict object at 0x0000019CBA8F2D80> = {'account': '', 'loginStatus': True, 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOj...0MTM1MH0.Yfrret163NiqN_tC0-vXuiv_3FLZTHIfw6-lQOKVZd61qtRge6H4pdryCUBe4t6yEAX49CeVlBtf6VCltySpkQ', 'userAttrs': {}, ...}.get\nE + where {'account': '', 'loginStatus': True, 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOj...0MTM1MH0.Yfrret163NiqN_tC0-vXuiv_3FLZTHIfw6-lQOKVZd61qtRge6H4pdryCUBe4t6yEAX49CeVlBtf6VCltySpkQ', 'userAttrs': {}, ...} = <bound method Response.json of <Response [200]>>()\nE + where <bound method Response.json of <Response [200]>> = <Response [200]>.json\n\ntest_case\\test_zhangsan\\test_bpm.py:57: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <InterfaceAutoTest.test_case.test_zhangsan.test_bpm.TestBPM object at 0x0000019CBA78EF40>\ndb_fix = <InterfaceAutoTest.common.db.DB object at 0x0000019CB9189B80>\nreq_fix = <InterfaceAutoTest.requests_method.requests_method.RequestsMethod object at 0x0000019CBA951B20>, module_name = '认证接口'\napi_name = '刷新token', title = '正向用例', level = '中', case_url = 'http://120.46.172.186:8080/refresh', case_method = 'GET'\ncase_mime = None, case_data = None, expect_data = {'message': '刷新成功'}, sql_type = None, sql_data = None, update_key = None\n\n @allure.epic(\"BPM_张三\")\n @pytest.mark.parametrize(\"module_name, api_name, title, level, case_url, case_method, case_mime, case_data, expect_data, sql_type, sql_data, update_key\", ReadExcel(\"BPM\", excel_path=excel_path).get_data())\n def test_bpm(self, db_fix, req_fix, module_name, api_name, title, level, case_url, case_method, case_mime, case_data, expect_data, sql_type, sql_data, update_key):\n allure.dynamic.feature(module_name)\n allure.dynamic.story(api_name)\n allure.dynamic.title(title)\n allure.dynamic.severity(level)\n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象执行删除的sql语句\n db_fix.delete(sql_data)\n # 使用RequestsMethod类对象发送请求--pass\n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象执行查询的sql语句,并接收查询的结果\n select_result = db_fix.select(sql_data)\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 使用RequestsMethod类对象发送请求--pass\n \n # 判断sql语句的类型是否为select|delete或者为delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象执行删除的sql语句\n db_fix.delete(sql_data.get(\"delete\"))\n # 使用DB类对象执行查询的sql语句,并接收查询的结果\n select_result = db_fix.select(sql_data.get(\"select\"))\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestsMethod类对象发送请求\n res = req_fix.request_all(req_method=case_method, req_url=case_url, req_mime=case_mime, case_data=case_data)\n \n \n # 断言\n try:\n for key in expect_data:\n assert expect_data[key] == res.json().get(key)\n except:\n log.error(\"断言失败\"+\",用例数据为:\"+str(case_data)+\",期望数据为:\"+str(expect_data)+\",服务器返回的数据为:\"+res.text)\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_zhangsan\\test_bpm.py:60: AssertionError"}, "attachments": [{"name": "log", "source": "f0fe8f90-d77c-419a-8c98-a6dade869178-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "module_name", "value": "'认证接口'"}, {"name": "api_name", "value": "'刷新token'"}, {"name": "title", "value": "'正向用例'"}, {"name": "level", "value": "'中'"}, {"name": "case_url", "value": "'http://120.46.172.186:8080/refresh'"}, {"name": "case_method", "value": "'GET'"}, {"name": "case_mime", "value": "None"}, {"name": "case_data", "value": "None"}, {"name": "expect_data", "value": "{'message': '刷新成功'}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1699241349925, "stop": 1699241349977, "uuid": "08654395-af37-4c2c-95dd-66216902c5a4", "historyId": "945533095d595f885656cb2169c82c49", "testCaseId": "2d826f9779cfe5666a21cc91e511c236", "fullName": "test_zhangsan.test_bpm.TestBPM#test_bpm", "labels": [{"name": "feature", "value": "认证接口"}, {"name": "story", "value": "刷新token"}, {"name": "severity", "value": "中"}, {"name": "epic", "value": "BPM_张三"}, {"name": "parentSuite", "value": "test_zhangsan"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "LAPTOP-31V3JBFR"}, {"name": "thread", "value": "22076-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_zhangsan.test_bpm"}]}
\ No newline at end of file
{"uuid": "294a09b3-8c05-449f-afe6-ac41a910ce6b", "befores": [{"name": "module_name", "status": "passed", "start": 1699241340703, "stop": 1699241340703}], "start": 1699241340703, "stop": 1699241340806}
\ No newline at end of file
{"uuid": "b124453e-2c7c-4109-975a-d35ca7b3fce7", "befores": [{"name": "case_data", "status": "passed", "start": 1699241304551, "stop": 1699241304551}], "start": 1699241304551, "stop": 1699241304615}
\ No newline at end of file
{"uuid": "1d06ea98-48c0-4237-8848-0486d29bd2d7", "befores": [{"name": "case_data", "status": "passed", "start": 1699241352272, "stop": 1699241352272}], "start": 1699241352272, "stop": 1699241352458}
\ No newline at end of file
{"uuid": "8c6d5fd2-9f9b-4a94-ba40-68dc5e492a98", "befores": [{"name": "sql_data", "status": "passed", "start": 1699241341331, "stop": 1699241341331}], "start": 1699241341331, "stop": 1699241341424}
\ No newline at end of file
{"uuid": "021441a5-8df0-43cc-9e62-b47700181731", "befores": [{"name": "sql_type", "status": "passed", "start": 1699241341537, "stop": 1699241341537}], "start": 1699241341537, "stop": 1699241341654}
\ No newline at end of file
{"uuid": "a8b5e474-9b70-4533-8c67-c095d3fc34a4", "befores": [{"name": "module_name", "status": "passed", "start": 1699241332205, "stop": 1699241332205}], "start": 1699241332205, "stop": 1699241332284}
\ No newline at end of file
{"uuid": "bd5502e1-e49e-41c3-bb59-5b71f7ca0a05", "befores": [{"name": "expect_data", "status": "passed", "start": 1699241295926, "stop": 1699241295926}], "start": 1699241295926, "stop": 1699241296221}
\ No newline at end of file
{"uuid": "2ed8b341-7bde-406a-81a0-c10a950e434f", "befores": [{"name": "case_data", "status": "passed", "start": 1699241352465, "stop": 1699241352465}], "start": 1699241352465, "stop": 1699241352529}
\ No newline at end of file
{"uuid": "6ed51c8b-1269-43f3-ab7e-5d9b41638fb8", "befores": [{"name": "api_name", "status": "passed", "start": 1699241352210, "stop": 1699241352210}], "start": 1699241352210, "stop": 1699241352268}
\ No newline at end of file
{"uuid": "535b54e5-e3e1-442b-bccb-e18f468a26ef", "befores": [{"name": "case_method", "status": "passed", "start": 1699241352061, "stop": 1699241352061}], "start": 1699241352061, "stop": 1699241352205}
\ No newline at end of file
{"uuid": "81f68b77-a22c-4f7e-924f-1b2a58ad579f", "befores": [{"name": "module_name", "status": "passed", "start": 1699241306711, "stop": 1699241306712}], "start": 1699241306711, "stop": 1699241306770}
\ No newline at end of file
{"uuid": "51700d74-814c-4d7e-b41b-683791941ae6", "befores": [{"name": "module_name", "status": "passed", "start": 1699241309724, "stop": 1699241309724}], "start": 1699241309724, "stop": 1699241309788}
\ No newline at end of file
{"uuid": "e37b79bc-8fdd-4251-9ffb-6418323578ae", "befores": [{"name": "case_url", "status": "passed", "start": 1699241363376, "stop": 1699241363376}], "start": 1699241363376, "stop": 1699241363518}
\ No newline at end of file
{"uuid": "8283356c-4d5c-447e-aee1-15a7e3b52c7a", "befores": [{"name": "api_name", "status": "passed", "start": 1699241349924, "stop": 1699241349924}], "start": 1699241349924, "stop": 1699241349989}
\ No newline at end of file
{"name": "反向用例-password特殊字符-username正确", "status": "passed", "parameters": [{"name": "module_name", "value": "'认证接口'"}, {"name": "api_name", "value": "'登录系统'"}, {"name": "title", "value": "'反向用例-password特殊字符-username正确'"}, {"name": "level", "value": "'中'"}, {"name": "case_url", "value": "'http://120.46.172.186:8080/auth'"}, {"name": "case_method", "value": "'POST'"}, {"name": "case_mime", "value": "'application/json'"}, {"name": "case_data", "value": "{'password': '@#!@#!@', 'username': 'admin'}"}, {"name": "expect_data", "value": "{'state': False, 'message': '账号或密码错误'}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1699241341332, "stop": 1699241341421, "uuid": "855fa3f7-dbbd-46e2-b759-ca11beaf5059", "historyId": "2982cd1ef72019862bfb8c33908896fc", "testCaseId": "2d826f9779cfe5666a21cc91e511c236", "fullName": "test_zhangsan.test_bpm.TestBPM#test_bpm", "labels": [{"name": "feature", "value": "认证接口"}, {"name": "story", "value": "登录系统"}, {"name": "severity", "value": "中"}, {"name": "epic", "value": "BPM_张三"}, {"name": "parentSuite", "value": "test_zhangsan"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "LAPTOP-31V3JBFR"}, {"name": "thread", "value": "22076-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_zhangsan.test_bpm"}]}
\ No newline at end of file
{"uuid": "803a571c-51f2-439c-b5cc-fd6b04d3a791", "befores": [{"name": "sql_data", "status": "passed", "start": 1699241295926, "stop": 1699241295926}], "start": 1699241295926, "stop": 1699241296220}
\ No newline at end of file
{"uuid": "2a1a4d30-7c8e-4ede-8571-27ac2db067f5", "befores": [{"name": "update_key", "status": "passed", "start": 1699241307493, "stop": 1699241307493}], "start": 1699241307493, "stop": 1699241307583}
\ No newline at end of file
{"name": "正向用例", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <InterfaceAutoTest.test_case.test_zhangsan.test_bpm.TestBPM object at 0x0000019CBA7B8400>\ndb_fix = <InterfaceAutoTest.common.db.DB object at 0x0000019CB9189B80>\nreq_fix = <InterfaceAutoTest.requests_method.requests_method.RequestsMethod object at 0x0000019CBA951B20>, module_name = '维度管理'\napi_name = '根据维度编码删除维度', title = '正向用例', level = '中', case_url = 'http://120.46.172.186:8080/api/demension/v1/dem/deleteDemByIds'\ncase_method = 'DELETE', case_mime = 'query', case_data = {'ids': '1721369114598981632'}\nexpect_data = {'message': '删除维度成功', 'state': True}, sql_type = 'select'\nsql_data = 'SELECT ID_ from uc_demension WHERE `CODE_`=\"dem_test57_abc\";', update_key = 'ids'\n\n @allure.epic(\"BPM_张三\")\n @pytest.mark.parametrize(\"module_name, api_name, title, level, case_url, case_method, case_mime, case_data, expect_data, sql_type, sql_data, update_key\", ReadExcel(\"BPM\", excel_path=excel_path).get_data())\n def test_bpm(self, db_fix, req_fix, module_name, api_name, title, level, case_url, case_method, case_mime, case_data, expect_data, sql_type, sql_data, update_key):\n allure.dynamic.feature(module_name)\n allure.dynamic.story(api_name)\n allure.dynamic.title(title)\n allure.dynamic.severity(level)\n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象执行删除的sql语句\n db_fix.delete(sql_data)\n # 使用RequestsMethod类对象发送请求--pass\n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象执行查询的sql语句,并接收查询的结果\n select_result = db_fix.select(sql_data)\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 使用RequestsMethod类对象发送请求--pass\n \n # 判断sql语句的类型是否为select|delete或者为delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象执行删除的sql语句\n db_fix.delete(sql_data.get(\"delete\"))\n # 使用DB类对象执行查询的sql语句,并接收查询的结果\n select_result = db_fix.select(sql_data.get(\"select\"))\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestsMethod类对象发送请求\n res = req_fix.request_all(req_method=case_method, req_url=case_url, req_mime=case_mime, case_data=case_data)\n \n \n # 断言\n try:\n for key in expect_data:\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert True == False\nE + where False = <built-in method get of dict object at 0x0000019CBA98C780>('state')\nE + where <built-in method get of dict object at 0x0000019CBA98C780> = {'logId': '1721369162053337088', 'message': '', 'state': False}.get\nE + where {'logId': '1721369162053337088', 'message': '', 'state': False} = <bound method Response.json of <Response [500]>>()\nE + where <bound method Response.json of <Response [500]>> = <Response [500]>.json\n\ntest_case\\test_zhangsan\\test_bpm.py:57: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <InterfaceAutoTest.test_case.test_zhangsan.test_bpm.TestBPM object at 0x0000019CBA7B8400>\ndb_fix = <InterfaceAutoTest.common.db.DB object at 0x0000019CB9189B80>\nreq_fix = <InterfaceAutoTest.requests_method.requests_method.RequestsMethod object at 0x0000019CBA951B20>, module_name = '维度管理'\napi_name = '根据维度编码删除维度', title = '正向用例', level = '中', case_url = 'http://120.46.172.186:8080/api/demension/v1/dem/deleteDemByIds'\ncase_method = 'DELETE', case_mime = 'query', case_data = {'ids': '1721369114598981632'}\nexpect_data = {'message': '删除维度成功', 'state': True}, sql_type = 'select'\nsql_data = 'SELECT ID_ from uc_demension WHERE `CODE_`=\"dem_test57_abc\";', update_key = 'ids'\n\n @allure.epic(\"BPM_张三\")\n @pytest.mark.parametrize(\"module_name, api_name, title, level, case_url, case_method, case_mime, case_data, expect_data, sql_type, sql_data, update_key\", ReadExcel(\"BPM\", excel_path=excel_path).get_data())\n def test_bpm(self, db_fix, req_fix, module_name, api_name, title, level, case_url, case_method, case_mime, case_data, expect_data, sql_type, sql_data, update_key):\n allure.dynamic.feature(module_name)\n allure.dynamic.story(api_name)\n allure.dynamic.title(title)\n allure.dynamic.severity(level)\n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象执行删除的sql语句\n db_fix.delete(sql_data)\n # 使用RequestsMethod类对象发送请求--pass\n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象执行查询的sql语句,并接收查询的结果\n select_result = db_fix.select(sql_data)\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 使用RequestsMethod类对象发送请求--pass\n \n # 判断sql语句的类型是否为select|delete或者为delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象执行删除的sql语句\n db_fix.delete(sql_data.get(\"delete\"))\n # 使用DB类对象执行查询的sql语句,并接收查询的结果\n select_result = db_fix.select(sql_data.get(\"select\"))\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestsMethod类对象发送请求\n res = req_fix.request_all(req_method=case_method, req_url=case_url, req_mime=case_mime, case_data=case_data)\n \n \n # 断言\n try:\n for key in expect_data:\n assert expect_data[key] == res.json().get(key)\n except:\n log.error(\"断言失败\"+\",用例数据为:\"+str(case_data)+\",期望数据为:\"+str(expect_data)+\",服务器返回的数据为:\"+res.text)\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_zhangsan\\test_bpm.py:60: AssertionError"}, "attachments": [{"name": "log", "source": "5e195d34-2df1-4f83-a071-4d84d9808c9c-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "module_name", "value": "'维度管理'"}, {"name": "api_name", "value": "'根据维度编码删除维度'"}, {"name": "title", "value": "'正向用例'"}, {"name": "level", "value": "'中'"}, {"name": "case_url", "value": "'http://120.46.172.186:8080/api/demension/v1/dem/deleteDemByIds'"}, {"name": "case_method", "value": "'DELETE'"}, {"name": "case_mime", "value": "'query'"}, {"name": "case_data", "value": "{'ids': '1721369114598981632'}"}, {"name": "expect_data", "value": "{'state': True, 'message': '删除维度成功'}"}, {"name": "sql_type", "value": "'select'"}, {"name": "sql_data", "value": "'SELECT ID_ from uc_demension WHERE `CODE_`=\"dem_test57_abc\";'"}, {"name": "update_key", "value": "'ids'"}], "start": 1699241363376, "stop": 1699241363508, "uuid": "1c3c5413-4e5b-4c73-aac3-c651b84d4f0f", "historyId": "f1e2918eac3ee61caf842d9bd5ce58ce", "testCaseId": "2d826f9779cfe5666a21cc91e511c236", "fullName": "test_zhangsan.test_bpm.TestBPM#test_bpm", "labels": [{"name": "feature", "value": "维度管理"}, {"name": "story", "value": "根据维度编码删除维度"}, {"name": "severity", "value": "中"}, {"name": "epic", "value": "BPM_张三"}, {"name": "parentSuite", "value": "test_zhangsan"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "LAPTOP-31V3JBFR"}, {"name": "thread", "value": "22076-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_zhangsan.test_bpm"}]}
\ No newline at end of file
{"uuid": "fdf0f7cb-1e6e-44d4-a8cf-3b597e275086", "befores": [{"name": "expect_data", "status": "passed", "start": 1699241302454, "stop": 1699241302454}], "start": 1699241302454, "stop": 1699241302525}
\ No newline at end of file
{"name": "test2", "status": "passed", "attachments": [{"name": "stdout", "source": "e29f2152-c036-4c4c-90da-7a2cfae738ec-attachment.txt", "type": "text/plain"}], "start": 1699241329752, "stop": 1699241329804, "uuid": "243fcaa7-175c-40fe-8eae-1329f12b184a", "historyId": "326d853d0df8edbfaa32cbad64ddfb30", "testCaseId": "326d853d0df8edbfaa32cbad64ddfb30", "fullName": "test_order.test_pytest_func.Test01#test2", "labels": [{"name": "feature", "value": "认证接口和维度管理流程"}, {"name": "epic", "value": "BPM_流程测试"}, {"name": "story", "value": "添加维度"}, {"name": "tag", "value": "dependency(depends=['Test01::test1'])"}, {"name": "parentSuite", "value": "test_order"}, {"name": "suite", "value": "test_pytest_func"}, {"name": "subSuite", "value": "Test01"}, {"name": "host", "value": "LAPTOP-31V3JBFR"}, {"name": "thread", "value": "22076-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_order.test_pytest_func"}]}
\ No newline at end of file
{"uuid": "a9261270-98e3-4aa2-96aa-2fb1099842b8", "befores": [{"name": "case_mime", "status": "passed", "start": 1699241307288, "stop": 1699241307288}], "start": 1699241307288, "stop": 1699241307384}
\ No newline at end of file
{"uuid": "74a6442e-8e7e-4fef-a40e-905018ad0220", "befores": [{"name": "level", "status": "passed", "start": 1699241340641, "stop": 1699241340641}], "start": 1699241340641, "stop": 1699241340699}
\ No newline at end of file
{"uuid": "58a64d36-acbd-4416-b7ef-18f1a30ee657", "befores": [{"name": "sql_type", "status": "passed", "start": 1699241295926, "stop": 1699241295926}], "start": 1699241295926, "stop": 1699241296221}
\ No newline at end of file
{"uuid": "60f6fb8e-e4e5-4a22-b41b-fb5d3720efbe", "befores": [{"name": "sql_type", "status": "passed", "start": 1699241311794, "stop": 1699241311794}], "start": 1699241311794, "stop": 1699241311866}
\ No newline at end of file
{"uuid": "60f0990a-02c2-44cd-8292-8133fece0eea", "befores": [{"name": "module_name", "status": "passed", "start": 1699241352464, "stop": 1699241352464}], "start": 1699241352464, "stop": 1699241352535}
\ No newline at end of file
{"uuid": "35ffee32-9993-4a87-bbc7-400f455e6366", "befores": [{"name": "sql_data", "status": "passed", "start": 1699241352061, "stop": 1699241352061}], "start": 1699241352061, "stop": 1699241352200}
\ No newline at end of file
{"uuid": "cc53e4e7-2418-4b4d-808e-433c632af23f", "befores": [{"name": "expect_data", "status": "passed", "start": 1699241341009, "stop": 1699241341009}], "start": 1699241341009, "stop": 1699241341108}
\ No newline at end of file
{"name": "正向用例-username和password正确", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <InterfaceAutoTest.test_case.test_zhangsan.test_bpm.TestBPM object at 0x0000019CBA776910>\ndb_fix = <InterfaceAutoTest.common.db.DB object at 0x0000019CB9189B80>\nreq_fix = <InterfaceAutoTest.requests_method.requests_method.RequestsMethod object at 0x0000019CBA951B20>, module_name = '认证接口'\napi_name = '登录系统', title = '正向用例-username和password正确', level = '高', case_url = 'http://120.46.172.186:8080/auth'\ncase_method = 'POST', case_mime = 'json', case_data = {'password': 'MTIzNDU2', 'username': 'admin'}\nexpect_data = {'account': 'admin', 'loginStatus': True, 'username': '超级管理'}, sql_type = None, sql_data = None, update_key = None\n\n @allure.epic(\"BPM_张三\")\n @pytest.mark.parametrize(\"module_name, api_name, title, level, case_url, case_method, case_mime, case_data, expect_data, sql_type, sql_data, update_key\", ReadExcel(\"BPM\", excel_path=excel_path).get_data())\n def test_bpm(self, db_fix, req_fix, module_name, api_name, title, level, case_url, case_method, case_mime, case_data, expect_data, sql_type, sql_data, update_key):\n allure.dynamic.feature(module_name)\n allure.dynamic.story(api_name)\n allure.dynamic.title(title)\n allure.dynamic.severity(level)\n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象执行删除的sql语句\n db_fix.delete(sql_data)\n # 使用RequestsMethod类对象发送请求--pass\n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象执行查询的sql语句,并接收查询的结果\n select_result = db_fix.select(sql_data)\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 使用RequestsMethod类对象发送请求--pass\n \n # 判断sql语句的类型是否为select|delete或者为delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象执行删除的sql语句\n db_fix.delete(sql_data.get(\"delete\"))\n # 使用DB类对象执行查询的sql语句,并接收查询的结果\n select_result = db_fix.select(sql_data.get(\"select\"))\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestsMethod类对象发送请求\n res = req_fix.request_all(req_method=case_method, req_url=case_url, req_mime=case_mime, case_data=case_data)\n \n \n # 断言\n try:\n for key in expect_data:\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '超级管理' == '超级管理员'\nE - 超级管理员\nE ? -\nE + 超级管理\n\ntest_case\\test_zhangsan\\test_bpm.py:57: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <InterfaceAutoTest.test_case.test_zhangsan.test_bpm.TestBPM object at 0x0000019CBA776910>\ndb_fix = <InterfaceAutoTest.common.db.DB object at 0x0000019CB9189B80>\nreq_fix = <InterfaceAutoTest.requests_method.requests_method.RequestsMethod object at 0x0000019CBA951B20>, module_name = '认证接口'\napi_name = '登录系统', title = '正向用例-username和password正确', level = '高', case_url = 'http://120.46.172.186:8080/auth'\ncase_method = 'POST', case_mime = 'json', case_data = {'password': 'MTIzNDU2', 'username': 'admin'}\nexpect_data = {'account': 'admin', 'loginStatus': True, 'username': '超级管理'}, sql_type = None, sql_data = None, update_key = None\n\n @allure.epic(\"BPM_张三\")\n @pytest.mark.parametrize(\"module_name, api_name, title, level, case_url, case_method, case_mime, case_data, expect_data, sql_type, sql_data, update_key\", ReadExcel(\"BPM\", excel_path=excel_path).get_data())\n def test_bpm(self, db_fix, req_fix, module_name, api_name, title, level, case_url, case_method, case_mime, case_data, expect_data, sql_type, sql_data, update_key):\n allure.dynamic.feature(module_name)\n allure.dynamic.story(api_name)\n allure.dynamic.title(title)\n allure.dynamic.severity(level)\n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象执行删除的sql语句\n db_fix.delete(sql_data)\n # 使用RequestsMethod类对象发送请求--pass\n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象执行查询的sql语句,并接收查询的结果\n select_result = db_fix.select(sql_data)\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 使用RequestsMethod类对象发送请求--pass\n \n # 判断sql语句的类型是否为select|delete或者为delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象执行删除的sql语句\n db_fix.delete(sql_data.get(\"delete\"))\n # 使用DB类对象执行查询的sql语句,并接收查询的结果\n select_result = db_fix.select(sql_data.get(\"select\"))\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestsMethod类对象发送请求\n res = req_fix.request_all(req_method=case_method, req_url=case_url, req_mime=case_mime, case_data=case_data)\n \n \n # 断言\n try:\n for key in expect_data:\n assert expect_data[key] == res.json().get(key)\n except:\n log.error(\"断言失败\"+\",用例数据为:\"+str(case_data)+\",期望数据为:\"+str(expect_data)+\",服务器返回的数据为:\"+res.text)\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_zhangsan\\test_bpm.py:60: AssertionError"}, "attachments": [{"name": "log", "source": "6a7d4fe9-7ba9-4f45-afcb-cbb050db196f-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "module_name", "value": "'认证接口'"}, {"name": "api_name", "value": "'登录系统'"}, {"name": "title", "value": "'正向用例-username和password正确'"}, {"name": "level", "value": "'高'"}, {"name": "case_url", "value": "'http://120.46.172.186:8080/auth'"}, {"name": "case_method", "value": "'POST'"}, {"name": "case_mime", "value": "'json'"}, {"name": "case_data", "value": "{'password': 'MTIzNDU2', 'username': 'admin'}"}, {"name": "expect_data", "value": "{'username': '超级管理', 'account': 'admin', 'loginStatus': True}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1699241338483, "stop": 1699241338548, "uuid": "a283168f-46b3-45bb-9956-d3970ff72f45", "historyId": "43ae0f0fe3941795b4ca58a9e381a813", "testCaseId": "2d826f9779cfe5666a21cc91e511c236", "fullName": "test_zhangsan.test_bpm.TestBPM#test_bpm", "labels": [{"name": "feature", "value": "认证接口"}, {"name": "story", "value": "登录系统"}, {"name": "severity", "value": "高"}, {"name": "epic", "value": "BPM_张三"}, {"name": "parentSuite", "value": "test_zhangsan"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "LAPTOP-31V3JBFR"}, {"name": "thread", "value": "22076-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_zhangsan.test_bpm"}]}
\ No newline at end of file
{"uuid": "2c4206ca-6d26-4005-bc2a-77af22d46ce1", "befores": [{"name": "sql_type", "status": "passed", "start": 1699241306981, "stop": 1699241306981}], "start": 1699241306981, "stop": 1699241307079}
\ No newline at end of file
{"name": "正向用例", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <InterfaceAutoTest.test_case.test_laohuang.test_bpm_laohuang.TestBPM object at 0x0000019CB9195A30>\ndb_fix = <InterfaceAutoTest.common.db.DB object at 0x0000019CBA7B87C0>\nreq_fix = <InterfaceAutoTest.requests_method.requests_method.RequestsMethod object at 0x0000019CBA7AF850>, module_name = '维度管理'\napi_name = '根据维度编码删除维度', title = '正向用例', level = '中', case_url = 'http://120.46.172.186:8080/api/demension/v1/dem/deleteDemByIds'\ncase_method = 'DELETE', case_mime = 'query', case_data = {'ids': '1721368972332384256'}\nexpect_data = {'message': '删除维度成功', 'state': True}, sql_type = 'select'\nsql_data = 'SELECT ID_ from uc_demension WHERE `CODE_`=\"dem_test57_abc\";', update_key = 'ids'\n\n @allure.epic(\"BPM项目-老黄\")\n # @allure.feature(\"模块名称\")\n # @allure.story(\"接口名称\")\n # @allure.title(\"用例标题\")\n # @allure.severity(\"用例等级\")\n @pytest.mark.parametrize(\"module_name, api_name, title, level, case_url, case_method, case_mime, case_data, expect_data, sql_type, sql_data, update_key\", ReadExcel(\"BPM-laohuang\").get_data())\n def test_bpm(self, db_fix, req_fix, module_name, api_name, title, level, case_url, case_method, case_mime, case_data, expect_data, sql_type, sql_data, update_key):\n # 影响allure报告的数据,不影响代码流程\n allure.dynamic.feature(module_name)\n allure.dynamic.story(api_name)\n allure.dynamic.title(title)\n allure.dynamic.severity(level)\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象执行删除的sql语句\n db_fix.delete(sql_data)\n # 使用RequestsMethod类对象发送请求--pass\n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象执行查询的sql语句,并接收查询的结果\n select_result = db_fix.select(sql_data)\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 使用RequestsMethod类对象发送请求--pass\n \n # 判断sql语句的类型是否为select|delete或者为delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象执行删除的sql语句\n db_fix.delete(sql_data.get(\"delete\"))\n # 使用DB类对象执行查询的sql语句,并接收查询的结果\n select_result = db_fix.select(sql_data.get(\"select\"))\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestsMethod类对象发送请求\n res = req_fix.request_all(req_method=case_method, req_url=case_url, req_mime=case_mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data:\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '删除维度成功' == '删除维度成功!'\nE - 删除维度成功!\nE ? -\nE + 删除维度成功\n\ntest_case\\test_laohuang\\test_bpm_laohuang.py:59: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <InterfaceAutoTest.test_case.test_laohuang.test_bpm_laohuang.TestBPM object at 0x0000019CB9195A30>\ndb_fix = <InterfaceAutoTest.common.db.DB object at 0x0000019CBA7B87C0>\nreq_fix = <InterfaceAutoTest.requests_method.requests_method.RequestsMethod object at 0x0000019CBA7AF850>, module_name = '维度管理'\napi_name = '根据维度编码删除维度', title = '正向用例', level = '中', case_url = 'http://120.46.172.186:8080/api/demension/v1/dem/deleteDemByIds'\ncase_method = 'DELETE', case_mime = 'query', case_data = {'ids': '1721368972332384256'}\nexpect_data = {'message': '删除维度成功', 'state': True}, sql_type = 'select'\nsql_data = 'SELECT ID_ from uc_demension WHERE `CODE_`=\"dem_test57_abc\";', update_key = 'ids'\n\n @allure.epic(\"BPM项目-老黄\")\n # @allure.feature(\"模块名称\")\n # @allure.story(\"接口名称\")\n # @allure.title(\"用例标题\")\n # @allure.severity(\"用例等级\")\n @pytest.mark.parametrize(\"module_name, api_name, title, level, case_url, case_method, case_mime, case_data, expect_data, sql_type, sql_data, update_key\", ReadExcel(\"BPM-laohuang\").get_data())\n def test_bpm(self, db_fix, req_fix, module_name, api_name, title, level, case_url, case_method, case_mime, case_data, expect_data, sql_type, sql_data, update_key):\n # 影响allure报告的数据,不影响代码流程\n allure.dynamic.feature(module_name)\n allure.dynamic.story(api_name)\n allure.dynamic.title(title)\n allure.dynamic.severity(level)\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象执行删除的sql语句\n db_fix.delete(sql_data)\n # 使用RequestsMethod类对象发送请求--pass\n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象执行查询的sql语句,并接收查询的结果\n select_result = db_fix.select(sql_data)\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 使用RequestsMethod类对象发送请求--pass\n \n # 判断sql语句的类型是否为select|delete或者为delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象执行删除的sql语句\n db_fix.delete(sql_data.get(\"delete\"))\n # 使用DB类对象执行查询的sql语句,并接收查询的结果\n select_result = db_fix.select(sql_data.get(\"select\"))\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestsMethod类对象发送请求\n res = req_fix.request_all(req_method=case_method, req_url=case_url, req_mime=case_mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data:\n assert expect_data[key] == res.json().get(key)\n except:\n log.error(\"断言失败\"+\",用例数据为:\"+str(case_data)+\",期望数据为:\"+str(expect_data)+\",服务器返回的数据为:\"+res.text)\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_laohuang\\test_bpm_laohuang.py:62: AssertionError"}, "attachments": [{"name": "log", "source": "afe011b7-67bb-416d-aee6-31ad6342cb57-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "module_name", "value": "'维度管理'"}, {"name": "api_name", "value": "'根据维度编码删除维度'"}, {"name": "title", "value": "'正向用例'"}, {"name": "level", "value": "'中'"}, {"name": "case_url", "value": "'http://120.46.172.186:8080/api/demension/v1/dem/deleteDemByIds'"}, {"name": "case_method", "value": "'DELETE'"}, {"name": "case_mime", "value": "'query'"}, {"name": "case_data", "value": "{'ids': '不知道'}"}, {"name": "expect_data", "value": "{'state': True, 'message': '删除维度成功'}"}, {"name": "sql_type", "value": "'select'"}, {"name": "sql_data", "value": "'SELECT ID_ from uc_demension WHERE `CODE_`=\"dem_test57_abc\";'"}, {"name": "update_key", "value": "'ids'"}], "start": 1699241318670, "stop": 1699241318765, "uuid": "8c0c20bc-b780-47cc-ad93-3af580e6ee7e", "historyId": "72ebd6565d93c63b2a53a8d8b1508dc6", "testCaseId": "0e591f8f09af834168b9c846e4239070", "fullName": "test_laohuang.test_bpm_laohuang.TestBPM#test_bpm", "labels": [{"name": "feature", "value": "维度管理"}, {"name": "story", "value": "根据维度编码删除维度"}, {"name": "severity", "value": "中"}, {"name": "epic", "value": "BPM项目-老黄"}, {"name": "parentSuite", "value": "test_laohuang"}, {"name": "suite", "value": "test_bpm_laohuang"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "LAPTOP-31V3JBFR"}, {"name": "thread", "value": "22076-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_laohuang.test_bpm_laohuang"}]}
\ No newline at end of file
{"name": "正向用例", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <InterfaceAutoTest.test_case.test_laohuang.test_bpm_laohuang.TestBPM object at 0x0000019CB91AB3D0>\ndb_fix = <InterfaceAutoTest.common.db.DB object at 0x0000019CBA7B87C0>\nreq_fix = <InterfaceAutoTest.requests_method.requests_method.RequestsMethod object at 0x0000019CBA7AF850>, module_name = '认证接口'\napi_name = '刷新token', title = '正向用例', level = '中', case_url = 'http://120.46.172.186:8080/refresh', case_method = 'GET'\ncase_mime = None, case_data = None, expect_data = {'message': '刷新成功'}, sql_type = None, sql_data = None, update_key = None\n\n @allure.epic(\"BPM项目-老黄\")\n # @allure.feature(\"模块名称\")\n # @allure.story(\"接口名称\")\n # @allure.title(\"用例标题\")\n # @allure.severity(\"用例等级\")\n @pytest.mark.parametrize(\"module_name, api_name, title, level, case_url, case_method, case_mime, case_data, expect_data, sql_type, sql_data, update_key\", ReadExcel(\"BPM-laohuang\").get_data())\n def test_bpm(self, db_fix, req_fix, module_name, api_name, title, level, case_url, case_method, case_mime, case_data, expect_data, sql_type, sql_data, update_key):\n # 影响allure报告的数据,不影响代码流程\n allure.dynamic.feature(module_name)\n allure.dynamic.story(api_name)\n allure.dynamic.title(title)\n allure.dynamic.severity(level)\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象执行删除的sql语句\n db_fix.delete(sql_data)\n # 使用RequestsMethod类对象发送请求--pass\n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象执行查询的sql语句,并接收查询的结果\n select_result = db_fix.select(sql_data)\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 使用RequestsMethod类对象发送请求--pass\n \n # 判断sql语句的类型是否为select|delete或者为delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象执行删除的sql语句\n db_fix.delete(sql_data.get(\"delete\"))\n # 使用DB类对象执行查询的sql语句,并接收查询的结果\n select_result = db_fix.select(sql_data.get(\"select\"))\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestsMethod类对象发送请求\n res = req_fix.request_all(req_method=case_method, req_url=case_url, req_mime=case_mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data:\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '刷新成功' == None\nE + where None = <built-in method get of dict object at 0x0000019CBA8E8B80>('message')\nE + where <built-in method get of dict object at 0x0000019CBA8E8B80> = {'account': '', 'loginStatus': True, 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOj...0MTMxNn0.xfPbrROYSAqpJP-UNuhfrZ7_1fmY4vHXt_1BOesc10oimWGIO86xejGNYbre3sG12UGuDrJVseKKHmlwpcjVsA', 'userAttrs': {}, ...}.get\nE + where {'account': '', 'loginStatus': True, 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOj...0MTMxNn0.xfPbrROYSAqpJP-UNuhfrZ7_1fmY4vHXt_1BOesc10oimWGIO86xejGNYbre3sG12UGuDrJVseKKHmlwpcjVsA', 'userAttrs': {}, ...} = <bound method Response.json of <Response [200]>>()\nE + where <bound method Response.json of <Response [200]>> = <Response [200]>.json\n\ntest_case\\test_laohuang\\test_bpm_laohuang.py:59: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <InterfaceAutoTest.test_case.test_laohuang.test_bpm_laohuang.TestBPM object at 0x0000019CB91AB3D0>\ndb_fix = <InterfaceAutoTest.common.db.DB object at 0x0000019CBA7B87C0>\nreq_fix = <InterfaceAutoTest.requests_method.requests_method.RequestsMethod object at 0x0000019CBA7AF850>, module_name = '认证接口'\napi_name = '刷新token', title = '正向用例', level = '中', case_url = 'http://120.46.172.186:8080/refresh', case_method = 'GET'\ncase_mime = None, case_data = None, expect_data = {'message': '刷新成功'}, sql_type = None, sql_data = None, update_key = None\n\n @allure.epic(\"BPM项目-老黄\")\n # @allure.feature(\"模块名称\")\n # @allure.story(\"接口名称\")\n # @allure.title(\"用例标题\")\n # @allure.severity(\"用例等级\")\n @pytest.mark.parametrize(\"module_name, api_name, title, level, case_url, case_method, case_mime, case_data, expect_data, sql_type, sql_data, update_key\", ReadExcel(\"BPM-laohuang\").get_data())\n def test_bpm(self, db_fix, req_fix, module_name, api_name, title, level, case_url, case_method, case_mime, case_data, expect_data, sql_type, sql_data, update_key):\n # 影响allure报告的数据,不影响代码流程\n allure.dynamic.feature(module_name)\n allure.dynamic.story(api_name)\n allure.dynamic.title(title)\n allure.dynamic.severity(level)\n \n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象执行删除的sql语句\n db_fix.delete(sql_data)\n # 使用RequestsMethod类对象发送请求--pass\n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象执行查询的sql语句,并接收查询的结果\n select_result = db_fix.select(sql_data)\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 使用RequestsMethod类对象发送请求--pass\n \n # 判断sql语句的类型是否为select|delete或者为delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象执行删除的sql语句\n db_fix.delete(sql_data.get(\"delete\"))\n # 使用DB类对象执行查询的sql语句,并接收查询的结果\n select_result = db_fix.select(sql_data.get(\"select\"))\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestsMethod类对象发送请求\n res = req_fix.request_all(req_method=case_method, req_url=case_url, req_mime=case_mime, case_data=case_data)\n \n # 断言\n try:\n for key in expect_data:\n assert expect_data[key] == res.json().get(key)\n except:\n log.error(\"断言失败\"+\",用例数据为:\"+str(case_data)+\",期望数据为:\"+str(expect_data)+\",服务器返回的数据为:\"+res.text)\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_laohuang\\test_bpm_laohuang.py:62: AssertionError"}, "attachments": [{"name": "log", "source": "c7421b70-5e0a-4508-9e19-e3d25580ea49-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "module_name", "value": "'认证接口'"}, {"name": "api_name", "value": "'刷新token'"}, {"name": "title", "value": "'正向用例'"}, {"name": "level", "value": "'中'"}, {"name": "case_url", "value": "'http://120.46.172.186:8080/refresh'"}, {"name": "case_method", "value": "'GET'"}, {"name": "case_mime", "value": "None"}, {"name": "case_data", "value": "None"}, {"name": "expect_data", "value": "{'message': '刷新成功'}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1699241315963, "stop": 1699241316015, "uuid": "8be90697-3331-489f-803e-7242f013b9aa", "historyId": "94362f1a91e108df7dbfb54516c329ce", "testCaseId": "0e591f8f09af834168b9c846e4239070", "fullName": "test_laohuang.test_bpm_laohuang.TestBPM#test_bpm", "labels": [{"name": "feature", "value": "认证接口"}, {"name": "story", "value": "刷新token"}, {"name": "severity", "value": "中"}, {"name": "epic", "value": "BPM项目-老黄"}, {"name": "parentSuite", "value": "test_laohuang"}, {"name": "suite", "value": "test_bpm_laohuang"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "LAPTOP-31V3JBFR"}, {"name": "thread", "value": "22076-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_laohuang.test_bpm_laohuang"}]}
\ No newline at end of file
{"uuid": "bc2e4f46-c87f-44c0-be29-97267848f2c3", "befores": [{"name": "case_url", "status": "passed", "start": 1699241341008, "stop": 1699241341008}], "start": 1699241341008, "stop": 1699241341112}
\ No newline at end of file
{"uuid": "33872826-3a54-4b5a-b38f-8530669487fa", "befores": [{"name": "case_data", "status": "passed", "start": 1699241341435, "stop": 1699241341435}], "start": 1699241341435, "stop": 1699241341528}
\ No newline at end of file
{"uuid": "3afa8ce1-6a19-4fc7-a8d7-6681bb5a7e78", "befores": [{"name": "level", "status": "passed", "start": 1699241307085, "stop": 1699241307085}], "start": 1699241307085, "stop": 1699241307182}
\ No newline at end of file
{"uuid": "dee0bbf0-9422-4def-b01b-0876ffd6a52f", "befores": [{"name": "case_mime", "status": "passed", "start": 1699241306642, "stop": 1699241306642}], "start": 1699241306642, "stop": 1699241306707}
\ No newline at end of file
ERROR  黄总:test_bpm.py:59 断言失败,用例数据为:{'password': 'MTIzNDU2', 'username': 'admin'},期望数据为:{'username': '超级管理', 'account': 'admin', 'loginStatus': True},服务器返回的数据为:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE2OTkzMjc3MzEsImlhdCI6MTY5OTI0MTMzMX0.GU7fcCf68Y2wWyzCPbuIrx_eut3nZvuUxE-xqfC7ETDw8HhMhnpsjnY4P4LOtkxp9LgLcEd9hjt_q1a2I4c4GQ","username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true,"userAttrs":{"tenantId":"-1"}}
ERROR  黄总:test_bpm.py:59 断言失败,用例数据为:{'password': 'MTIzNDU2', 'username': 'admin'},期望数据为:{'username': '超级管理', 'account': 'admin', 'loginStatus': True},服务器返回的数据为:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE2OTkzMjc3MzMsImlhdCI6MTY5OTI0MTMzM30.Yuj9-BKCSwKe9o6WmGCCUNZqVqsJukgxXGDfF8LOg3YKJaAU0_wQEnItCvTHtksWHTUm42gZ9YWVyC5w2WGkYQ","username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true,"userAttrs":{"tenantId":"-1"}}
ERROR  黄总:test_bpm.py:59 断言失败,用例数据为:{'password': 'MTIzNDU2', 'username': 'admin'},期望数据为:{'username': '超级管理', 'account': 'admin', 'loginStatus': True},服务器返回的数据为:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE2OTkzMjc3MzUsImlhdCI6MTY5OTI0MTMzNX0.1Ubnafj-7G3rCENRJUQNRxxzlVN_NU_cLTdh6w5LHywUaHtM2021AYLp6uLnbc0o-tEZimClpRp4C8XngP4vmA","username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true,"userAttrs":{"tenantId":"-1"}}
ERROR  黄总:test_bpm.py:59 断言失败,用例数据为:{'password': 'MTIzNDU2', 'username': 'admin'},期望数据为:{'username': '超级管理', 'account': 'admin', 'loginStatus': True},服务器返回的数据为:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE2OTkzMjc3MzcsImlhdCI6MTY5OTI0MTMzN30.vrKaXuH45etiu-vbsjISFiHVMng6A5s9BzBCZul8EbmGDURFu8XS7eY_UHlm3GiDi6gdOFic16423it7DSlyIg","username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true,"userAttrs":{"tenantId":"-1"}}
\ No newline at end of file
{"uuid": "b6ba7690-f2f7-4026-af6e-d81cc7bc9a4c", "befores": [{"name": "expect_data", "status": "passed", "start": 1699241332205, "stop": 1699241332205}], "start": 1699241332205, "stop": 1699241332281}
\ No newline at end of file
{"uuid": "111e4a80-eefa-4080-99d0-dd113d66075a", "befores": [{"name": "level", "status": "passed", "start": 1699241347842, "stop": 1699241347842}], "start": 1699241347842, "stop": 1699241347907}
\ No newline at end of file
{"uuid": "baba4a99-9b6c-4d60-9c75-4783c9fd99be", "befores": [{"name": "sql_type", "status": "passed", "start": 1699241363376, "stop": 1699241363376}], "start": 1699241363376, "stop": 1699241363516}
\ No newline at end of file
{"uuid": "c0327354-8b3e-4f4a-81f4-96a276b38e3c", "befores": [{"name": "title", "status": "passed", "start": 1699241304551, "stop": 1699241304551}], "start": 1699241304551, "stop": 1699241304618}
\ No newline at end of file
{"uuid": "f8569bc4-7af8-46ca-bbdb-776800698c79", "befores": [{"name": "api_name", "status": "passed", "start": 1699241363376, "stop": 1699241363376}], "start": 1699241363376, "stop": 1699241363519}
\ No newline at end of file
{"name": "反向用例-password为空-username正确", "status": "passed", "parameters": [{"name": "module_name", "value": "'认证接口'"}, {"name": "api_name", "value": "'登录系统'"}, {"name": "title", "value": "'反向用例-password为空-username正确'"}, {"name": "level", "value": "'中'"}, {"name": "case_url", "value": "'http://120.46.172.186:8080/auth'"}, {"name": "case_method", "value": "'POST'"}, {"name": "case_mime", "value": "'json'"}, {"name": "case_data", "value": "{'password': '', 'username': 'admin'}"}, {"name": "expect_data", "value": "{'state': False, 'message': '账号或密码错误'}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1699241341224, "stop": 1699241341319, "uuid": "816ff72a-ac72-4d00-8673-f082c6159bbf", "historyId": "715df2d5ce04187a9a0ab6a32623056c", "testCaseId": "2d826f9779cfe5666a21cc91e511c236", "fullName": "test_zhangsan.test_bpm.TestBPM#test_bpm", "labels": [{"name": "feature", "value": "认证接口"}, {"name": "story", "value": "登录系统"}, {"name": "severity", "value": "中"}, {"name": "epic", "value": "BPM_张三"}, {"name": "parentSuite", "value": "test_zhangsan"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "LAPTOP-31V3JBFR"}, {"name": "thread", "value": "22076-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_zhangsan.test_bpm"}]}
\ No newline at end of file
{"name": "正向用例-username和password正确", "status": "failed", "statusDetails": {"message": "AssertionError: 断言失败", "trace": "self = <InterfaceAutoTest.test_case.test_zhangsan.test_bpm.TestBPM object at 0x0000019CBA776910>\ndb_fix = <InterfaceAutoTest.common.db.DB object at 0x0000019CB9189B80>\nreq_fix = <InterfaceAutoTest.requests_method.requests_method.RequestsMethod object at 0x0000019CBA951B20>, module_name = '认证接口'\napi_name = '登录系统', title = '正向用例-username和password正确', level = '高', case_url = 'http://120.46.172.186:8080/auth'\ncase_method = 'POST', case_mime = 'json', case_data = {'password': 'MTIzNDU2', 'username': 'admin'}\nexpect_data = {'account': 'admin', 'loginStatus': True, 'username': '超级管理'}, sql_type = None, sql_data = None, update_key = None\n\n @allure.epic(\"BPM_张三\")\n @pytest.mark.parametrize(\"module_name, api_name, title, level, case_url, case_method, case_mime, case_data, expect_data, sql_type, sql_data, update_key\", ReadExcel(\"BPM\", excel_path=excel_path).get_data())\n def test_bpm(self, db_fix, req_fix, module_name, api_name, title, level, case_url, case_method, case_mime, case_data, expect_data, sql_type, sql_data, update_key):\n allure.dynamic.feature(module_name)\n allure.dynamic.story(api_name)\n allure.dynamic.title(title)\n allure.dynamic.severity(level)\n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象执行删除的sql语句\n db_fix.delete(sql_data)\n # 使用RequestsMethod类对象发送请求--pass\n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象执行查询的sql语句,并接收查询的结果\n select_result = db_fix.select(sql_data)\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 使用RequestsMethod类对象发送请求--pass\n \n # 判断sql语句的类型是否为select|delete或者为delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象执行删除的sql语句\n db_fix.delete(sql_data.get(\"delete\"))\n # 使用DB类对象执行查询的sql语句,并接收查询的结果\n select_result = db_fix.select(sql_data.get(\"select\"))\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestsMethod类对象发送请求\n res = req_fix.request_all(req_method=case_method, req_url=case_url, req_mime=case_mime, case_data=case_data)\n \n \n # 断言\n try:\n for key in expect_data:\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '超级管理' == '超级管理员'\nE - 超级管理员\nE ? -\nE + 超级管理\n\ntest_case\\test_zhangsan\\test_bpm.py:57: AssertionError\n\nDuring handling of the above exception, another exception occurred:\n\nself = <InterfaceAutoTest.test_case.test_zhangsan.test_bpm.TestBPM object at 0x0000019CBA776910>\ndb_fix = <InterfaceAutoTest.common.db.DB object at 0x0000019CB9189B80>\nreq_fix = <InterfaceAutoTest.requests_method.requests_method.RequestsMethod object at 0x0000019CBA951B20>, module_name = '认证接口'\napi_name = '登录系统', title = '正向用例-username和password正确', level = '高', case_url = 'http://120.46.172.186:8080/auth'\ncase_method = 'POST', case_mime = 'json', case_data = {'password': 'MTIzNDU2', 'username': 'admin'}\nexpect_data = {'account': 'admin', 'loginStatus': True, 'username': '超级管理'}, sql_type = None, sql_data = None, update_key = None\n\n @allure.epic(\"BPM_张三\")\n @pytest.mark.parametrize(\"module_name, api_name, title, level, case_url, case_method, case_mime, case_data, expect_data, sql_type, sql_data, update_key\", ReadExcel(\"BPM\", excel_path=excel_path).get_data())\n def test_bpm(self, db_fix, req_fix, module_name, api_name, title, level, case_url, case_method, case_mime, case_data, expect_data, sql_type, sql_data, update_key):\n allure.dynamic.feature(module_name)\n allure.dynamic.story(api_name)\n allure.dynamic.title(title)\n allure.dynamic.severity(level)\n # 判断sql语句的类型是否为delete\n if sql_type == \"delete\":\n # 使用DB类对象执行删除的sql语句\n db_fix.delete(sql_data)\n # 使用RequestsMethod类对象发送请求--pass\n # 判断sql语句类型是否为select\n elif sql_type == \"select\":\n # 使用DB类对象执行查询的sql语句,并接收查询的结果\n select_result = db_fix.select(sql_data)\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 使用RequestsMethod类对象发送请求--pass\n \n # 判断sql语句的类型是否为select|delete或者为delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象执行删除的sql语句\n db_fix.delete(sql_data.get(\"delete\"))\n # 使用DB类对象执行查询的sql语句,并接收查询的结果\n select_result = db_fix.select(sql_data.get(\"select\"))\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n \n # 使用RequestsMethod类对象发送请求\n res = req_fix.request_all(req_method=case_method, req_url=case_url, req_mime=case_mime, case_data=case_data)\n \n \n # 断言\n try:\n for key in expect_data:\n assert expect_data[key] == res.json().get(key)\n except:\n log.error(\"断言失败\"+\",用例数据为:\"+str(case_data)+\",期望数据为:\"+str(expect_data)+\",服务器返回的数据为:\"+res.text)\n> raise AssertionError(\"断言失败\")\nE AssertionError: 断言失败\n\ntest_case\\test_zhangsan\\test_bpm.py:60: AssertionError"}, "attachments": [{"name": "log", "source": "118ec5ec-21fc-4ea0-85a1-db2edd5f1e75-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "module_name", "value": "'认证接口'"}, {"name": "api_name", "value": "'登录系统'"}, {"name": "title", "value": "'正向用例-username和password正确'"}, {"name": "level", "value": "'高'"}, {"name": "case_url", "value": "'http://120.46.172.186:8080/auth'"}, {"name": "case_method", "value": "'POST'"}, {"name": "case_mime", "value": "'json'"}, {"name": "case_data", "value": "{'password': 'MTIzNDU2', 'username': 'admin'}"}, {"name": "expect_data", "value": "{'username': '超级管理', 'account': 'admin', 'loginStatus': True}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1699241336385, "stop": 1699241336441, "uuid": "5d57c113-b7af-4f36-af11-2356b37d1d5b", "historyId": "43ae0f0fe3941795b4ca58a9e381a813", "testCaseId": "2d826f9779cfe5666a21cc91e511c236", "fullName": "test_zhangsan.test_bpm.TestBPM#test_bpm", "labels": [{"name": "feature", "value": "认证接口"}, {"name": "story", "value": "登录系统"}, {"name": "severity", "value": "高"}, {"name": "epic", "value": "BPM_张三"}, {"name": "parentSuite", "value": "test_zhangsan"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "LAPTOP-31V3JBFR"}, {"name": "thread", "value": "22076-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_zhangsan.test_bpm"}]}
\ No newline at end of file
{"uuid": "ef3bcd84-6282-4aa1-8693-5ff4e71b7db5", "befores": [{"name": "case_url", "status": "passed", "start": 1699241352272, "stop": 1699241352272}], "start": 1699241352272, "stop": 1699241352459}
\ No newline at end of file
{"uuid": "51d12ffb-bfa6-4dc1-bba6-f3fe617b9331", "befores": [{"name": "sql_data", "status": "passed", "start": 1699241327233, "stop": 1699241327233}], "start": 1699241327233, "stop": 1699241327417}
\ No newline at end of file
{"uuid": "b2481616-8344-497e-b47e-7bf2a21d9b19", "befores": [{"name": "update_key", "status": "passed", "start": 1699241330119, "stop": 1699241330119}], "start": 1699241330119, "stop": 1699241330183}
\ No newline at end of file
{"uuid": "0d4a0c83-3113-4fb5-be4b-dc3e99e28ad2", "befores": [{"name": "update_key", "status": "passed", "start": 1699241363376, "stop": 1699241363376}], "start": 1699241363376, "stop": 1699241363515}
\ No newline at end of file
{"uuid": "09c81261-50d6-44c3-bbeb-797b84aaca18", "befores": [{"name": "case_method", "status": "passed", "start": 1699241309725, "stop": 1699241309725}], "start": 1699241309725, "stop": 1699241309786}
\ No newline at end of file
{"uuid": "acff6841-7a1f-414c-b6c7-f477f6ee05b9", "befores": [{"name": "title", "status": "passed", "start": 1699241311793, "stop": 1699241311793}], "start": 1699241311793, "stop": 1699241311869}
\ No newline at end of file
{"uuid": "904e1196-ec18-4721-9abe-673d04b5ce21", "befores": [{"name": "update_key", "status": "passed", "start": 1699241307188, "stop": 1699241307188}], "start": 1699241307188, "stop": 1699241307279}
\ No newline at end of file
{"uuid": "8b9cd043-1e77-4a45-8b8e-71e441736aa3", "befores": [{"name": "sql_type", "status": "passed", "start": 1699241340641, "stop": 1699241340641}], "start": 1699241340641, "stop": 1699241340696}
\ No newline at end of file
{"uuid": "014a9eb1-86e9-4e5a-849e-f6fb4bdc5764", "befores": [{"name": "expect_data", "status": "passed", "start": 1699241307591, "stop": 1699241307591}], "start": 1699241307591, "stop": 1699241307700}
\ No newline at end of file
{"uuid": "5278395c-87de-4b5f-bf31-50126fd5caa9", "befores": [{"name": "sql_type", "status": "passed", "start": 1699241307493, "stop": 1699241307493}], "start": 1699241307493, "stop": 1699241307583}
\ No newline at end of file
{"uuid": "ad5f2e08-b174-4900-a98b-c9b74e3a3669", "children": ["25c2929a-2172-419b-b112-95c62e34117f", "a4ea8198-1d9f-418d-90d2-a2c5eb748fe4", "cc023b3b-1d33-4c40-b16c-5dc1a2e2be1d", "5d57c113-b7af-4f36-af11-2356b37d1d5b", "a283168f-46b3-45bb-9956-d3970ff72f45", "9c5bd2d7-2ced-46c6-b1b0-a362eb66ce6f", "9f20716b-104f-445f-b35c-cd148e2e1c5c", "fb19acb3-c4b6-478c-9bd5-926de375ee06", "9fdd418e-fb37-4adf-9143-2e2ecdf30502", "b883ba8d-ff7f-487a-8433-31e26e62801f", "41bf060d-bc0f-43a3-be98-843fccfb31f8", "696e7260-fc9d-4c4f-8bcc-32aa6fcb5f3e", "816ff72a-ac72-4d00-8673-f082c6159bbf", "855fa3f7-dbbd-46e2-b759-ca11beaf5059", "98f1495c-9916-4fb9-8bc4-93d25353ed1b", "8966aed8-398e-4341-a8da-9f5e2508c817", "514b0ca3-20fa-4340-8adb-d0ed616fb5ad", "c5a23263-31e7-4e8b-afc0-18eba9aeecee", "e9adba94-b96e-4e18-8dbc-4dc2fa28ceec", "08654395-af37-4c2c-95dd-66216902c5a4", "caea2a88-40f8-463c-93c4-54620fce9d88", "90537e68-d513-4944-8a77-02625747e916", "e06dae3a-9cab-4689-9d2f-7c33481dc91e", "4ed2ccae-7308-4ccf-926a-06fba7e5c903", "9723fb0a-b541-4de2-9737-2b8a2e144af5", "24fb17f3-4fdc-4025-bd8a-6e4270fa28aa", "f24c19fb-9eb8-4d7d-8f0c-8b36ea463aa3", "9d3e321b-b049-4aa7-a1b8-38a5b3359add", "b3fe2939-67d7-4088-95ee-4875f3b11de5", "05712add-90b7-4981-9f0c-5c42f0d0b338", "df13d057-ba93-4982-b993-66cc1a7f4e50", "1c3c5413-4e5b-4c73-aac3-c651b84d4f0f"], "befores": [{"name": "db_fix", "status": "passed", "start": 1699241329810, "stop": 1699241330020}], "afters": [{"name": "db_fix::0", "status": "passed", "start": 1699241363522, "stop": 1699241363522}], "start": 1699241329810, "stop": 1699241363522}
\ No newline at end of file
{"uuid": "0fc1664e-9f85-4119-8b51-aa53de5ef7c0", "befores": [{"name": "case_data", "status": "passed", "start": 1699241352538, "stop": 1699241352538}], "start": 1699241352538, "stop": 1699241352600}
\ No newline at end of file
ERROR  黄总:test_bpm.py:59 断言失败,用例数据为:{'password': 'MTIzNDU2', 'username': 'admin'},期望数据为:{'username': '超级管理', 'account': 'admin', 'loginStatus': True},服务器返回的数据为:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE2OTkzMjc3MzEsImlhdCI6MTY5OTI0MTMzMX0.GU7fcCf68Y2wWyzCPbuIrx_eut3nZvuUxE-xqfC7ETDw8HhMhnpsjnY4P4LOtkxp9LgLcEd9hjt_q1a2I4c4GQ","username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true,"userAttrs":{"tenantId":"-1"}}
ERROR  黄总:test_bpm.py:59 断言失败,用例数据为:{'password': 'MTIzNDU2', 'username': 'admin'},期望数据为:{'username': '超级管理', 'account': 'admin', 'loginStatus': True},服务器返回的数据为:{"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOjE2OTkzMjc3MzMsImlhdCI6MTY5OTI0MTMzM30.Yuj9-BKCSwKe9o6WmGCCUNZqVqsJukgxXGDfF8LOg3YKJaAU0_wQEnItCvTHtksWHTUm42gZ9YWVyC5w2WGkYQ","username":"超级管理员","account":"admin","userId":"1","expiration":86400,"loginStatus":true,"userAttrs":{"tenantId":"-1"}}
\ No newline at end of file
{"uuid": "fdf384bf-766f-4ac3-a180-6b8aaa9a790a", "befores": [{"name": "case_data", "status": "passed", "start": 1699241318538, "stop": 1699241318538}], "start": 1699241318538, "stop": 1699241318596}
\ No newline at end of file
{"uuid": "62fcc1c5-800c-4d90-adf8-fd7ad7cdd2d9", "befores": [{"name": "level", "status": "passed", "start": 1699241318051, "stop": 1699241318053}], "start": 1699241318051, "stop": 1699241318140}
\ No newline at end of file
{"uuid": "84ff2755-2ed6-452d-b966-e4261a218006", "befores": [{"name": "sql_type", "status": "passed", "start": 1699241341331, "stop": 1699241341331}], "start": 1699241341331, "stop": 1699241341425}
\ No newline at end of file
{"name": "反向用例-username为空-password正确", "status": "passed", "parameters": [{"name": "module_name", "value": "'认证接口'"}, {"name": "api_name", "value": "'登录系统'"}, {"name": "title", "value": "'反向用例-username为空-password正确'"}, {"name": "level", "value": "'中'"}, {"name": "case_url", "value": "'http://120.46.172.186:8080/auth'"}, {"name": "case_method", "value": "'POST'"}, {"name": "case_mime", "value": "'json'"}, {"name": "case_data", "value": "{'password': 'MTIzNDU2', 'username': ''}"}, {"name": "expect_data", "value": "{'state': False, 'message': '账号或密码错误'}"}, {"name": "sql_type", "value": "None"}, {"name": "sql_data", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1699241340810, "stop": 1699241340898, "uuid": "9fdd418e-fb37-4adf-9143-2e2ecdf30502", "historyId": "14183ab560fdbe324170499dde95acfe", "testCaseId": "2d826f9779cfe5666a21cc91e511c236", "fullName": "test_zhangsan.test_bpm.TestBPM#test_bpm", "labels": [{"name": "feature", "value": "认证接口"}, {"name": "story", "value": "登录系统"}, {"name": "severity", "value": "中"}, {"name": "epic", "value": "BPM_张三"}, {"name": "parentSuite", "value": "test_zhangsan"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "LAPTOP-31V3JBFR"}, {"name": "thread", "value": "22076-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_zhangsan.test_bpm"}]}
\ No newline at end of file
{"uuid": "3adb1530-3e56-4387-a6c9-f468692726de", "befores": [{"name": "sql_data", "status": "passed", "start": 1699241307493, "stop": 1699241307493}], "start": 1699241307493, "stop": 1699241307583}
\ No newline at end of file
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