Commit 3c5fd37d by yzy

API test-1

parent f51f9a40

Too many changes to show.

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

# -*-coding:utf-8 -*- #
# ---------------------------------------------------------------------------
# ProjectName: test60
# FileName: __init__.py
# Author: lao_zhao
# Datetime: 2024/5/20 15:40
# Description:
#
# ---------------------------------------------------------------------------
import functools
import logging
import os
import time
log_dir_path = os.path.join(os.path.join(os.path.dirname(__file__), "report"), "log")
if not os.path.exists(log_dir_path):
# makedirs(c:\c\d\a) os.mkdir
os.makedirs(log_dir_path)
log_file_name = os.path.join(log_dir_path, time.strftime("%Y_%m_%d_%H_%M_%S") + ".log")
def log():
# 创建logger对象
logger = logging.getLogger()
# 设置日志的级别
logger.level = logging.INFO
# 设置日志文件ERROR
handler = logging.FileHandler(log_file_name, mode="a", encoding="utf-8")
# 设置日志的格式
formatter = logging.Formatter('%(asctime)s - %(levelname)s: %(message)s')
# 将格式添加到handler中
handler.setFormatter(formatter)
# 将handler添加到logger对象中
logger.addHandler(handler)
return logger
log = log()
def log_decorator(func_name):
@functools.wraps(func_name)
def inner(*args, **kwargs):
try:
# 写入info级别的日志
"""
__init__(): 构造方法,初始化对象
__new__(): 为对象分配内存空间
__del__(): 析构方法,回收对象
__enter__()/__exit__(): 实现上下文管理器
__mro__: 查看继承顺序
__file__: 获取文件的路径
__name__: 获取功能/类/方法/模块的名称
__iter__(): 创建迭代器
__next__(): 迭代器和生成器取值
__code__: 获取功能的code属性
func.__code__.co_filename: 获取func所在的py文件名称
func.__code__.co_firstlineno: 获取func所在的py文件中行号
__doc__:获取功能的描述
"""
log.info(f"执行的功能为:{func_name.__name__}, 功能的描述为:{func_name.__doc__}, 所在的文件为:"
f"{func_name.__code__.co_filename}, 所在行为:{func_name.__code__.co_firstlineno}")
# 执行功能
return func_name(*args, **kwargs)
except Exception as e:
# 如果发生错误,写入一个错误的日志
log.error(f"执行的功能为:{func_name.__name__}, 功能的描述为:{func_name.__doc__}, 所在的文件为:"
f"{func_name.__code__.co_filename}, 所在行为:{func_name.__code__.co_firstlineno}, 错误为:{e}")
raise e
return inner
# 报告输出
"""
pytest-html----> pip install pytest-html
生成报告的命名:
pytest 用例层目录名称 -vv --html=存放报告的路径/报告名称.html --self-contained-html
-vv: 终端执行显示详细结果
--html: 存放报告的路径/报告名称.html
--self-contained-html: 报告生成单独的html文件
"""
# allure
"""
allure-pytest --- > pip install allure-pytest
第一步:生成测试结果的json文件:pytest 用例模块/包 --alluredir=存放json文件的路径 --clean-alluredir
第二步:
生成一个服务:allure serve 第一步存放json文件的路径
生成静态报告:allure generate 第一步存放json文件的路径 -o 存放报告的路径
打开allure的静态报告:allure open 存放报告的路径
"""
"""
失败重跑插件:pytest-rerunfailures ---> pip install pytest-rerunfailures
"""
\ No newline at end of file
# -*-coding:utf-8 -*- #
# ---------------------------------------------------------------------------
# ProjectName: test60
# FileName: db.py
# Author: lao_zhao
# Datetime: 2024/5/20 14:08
# Description:
#
# ---------------------------------------------------------------------------
import pymysql
from InterfaceAutoTest import log_decorator
from InterfaceAutoTest.common.read_ini import ReadIni
from InterfaceAutoTest.data_config.settings import *
class DB:
@log_decorator
def __init__(self):
"""链接数据库,获取链接对象和游标对象"""
ini = ReadIni()
try:
self.conn = pymysql.connect(
host=ini.get_db_connect_message(HOST_KEY),
port=int(ini.get_db_connect_message(PORT_KEY)),
user=ini.get_db_connect_message(USERNAME_KEY),
password=ini.get_db_connect_message(PASSWORD_KEY),
database=ini.get_db_connect_message(DATABASE_KEY),
charset="utf8"
)
self.cursor = self.conn.cursor()
except Exception as e:
raise e
@log_decorator
def close(self):
"""关闭吧数据库链接"""
self.cursor.close()
self.conn.close()
@log_decorator
def delete_func(self, sql):
"""执行删除的sql语句"""
try:
self.cursor.execute(sql)
self.conn.commit()
except Exception as e:
raise e
@log_decorator
def select_func(self, sql):
"""执行查询的sql语句,并返回查询结果"""
try:
self.cursor.execute(sql)
except Exception as e:
raise e
else:
result_select = self.cursor.fetchall()
if result_select:
return result_select[0][0]
if __name__ == '__main__':
db = DB()
# -*-coding:utf-8 -*- #
# ---------------------------------------------------------------------------
# ProjectName: test60
# FileName: read_excel.py
# Author: lao_zhao
# Datetime: 2024/5/20 14:15
# Description:
#
# ---------------------------------------------------------------------------
import openpyxl
from InterfaceAutoTest import log_decorator
from InterfaceAutoTest.common.read_ini import ReadIni
from InterfaceAutoTest.common.read_json import read_json
from InterfaceAutoTest.data_config.settings import *
class ReadExcel:
@log_decorator
def __init__(self, username="demo", table_name="BPM"):
"""获取所有json文件的路径,再读取json文件,再获取excel的路径和工作表名称,加载工作簿,获取工作表"""
self.ini = ReadIni()
case_data_path = self.ini.get_file_path(CASE_KEY, username)
expect_data_path = self.ini.get_file_path(EXPECT_KEY, username)
sql_data_path = self.ini.get_file_path(SQL_KEY, username)
self.case_data_dict = read_json(case_data_path)
self.expect_data_dict = read_json(expect_data_path)
self.sql_data_dict = read_json(sql_data_path)
excel_path = self.ini.get_file_path(EXCEL_KEY, username)
# table_name = self.ini.get_table_name("table_name")
try:
wb = openpyxl.load_workbook(excel_path)
self.ws = wb[table_name]
except Exception as e:
raise e
@log_decorator
def __get_cell_value(self, column: str, row: int) -> str:
"""获取指定单元格数据"""
try:
value = self.ws[column+str(row)].value
except Exception as e:
raise e
else:
if value is None:
return None
elif value.strip():
return value.strip()
@log_decorator
def module_name(self, row):
"""获取模块名称"""
return self.__get_cell_value(MODULE, row)
@log_decorator
def api_name(self, row):
"""获取接口名称"""
return self.__get_cell_value(API, row)
@log_decorator
def case_req_method(self, row):
"""获取请求方法"""
return self.__get_cell_value(METHOD, row)
@log_decorator
def case_req_url(self, row):
"""获取请求url"""
value = self.__get_cell_value(URL, row)
if value:
return self.ini.get_host(BPM_KEY) + value
@log_decorator
def case_req_mime(self, row):
"""获取请求的媒体类型"""
value = self.__get_cell_value(MIME, row)
if value:
return value.lower()
@log_decorator
def case_data(self, row):
"""获取用例数据"""
case_data_key = self.__get_cell_value(CASE, row)
if case_data_key:
module_name = self.module_name(row)
api_name = self.api_name(row)
return self.case_data_dict[module_name][api_name][case_data_key]
@log_decorator
def expect_data(self, row):
"""获取用例数据"""
expect_data_key = self.__get_cell_value(EXPECT, row)
if expect_data_key:
module_name = self.module_name(row)
api_name = self.api_name(row)
return self.expect_data_dict[module_name][api_name][expect_data_key]
@log_decorator
def sql_data(self, row):
"""获取用例数据"""
sql_data_key = self.__get_cell_value(SQL, row)
if sql_data_key:
module_name = self.module_name(row)
api_name = self.api_name(row)
return self.sql_data_dict[module_name][api_name][sql_data_key]
@log_decorator
def sql_type(self, row):
"""获取sql语句类型"""
value = self.__get_cell_value(SQL_TYPE, row)
if value:
return value.lower()
@log_decorator
def update_key(self, row):
"""获取更新的key"""
return self.__get_cell_value(UPDATE_KEY, row)
@log_decorator
def case_title(self, row):
"""根据行号,获取用例的标题"""
return self.__get_cell_value(TITLE, row)
@log_decorator
def case_level(self, row):
"""根据行,获取用例等级"""
return self.__get_cell_value(LEVEL, row)
@log_decorator
def get_data(self):
"""获取excel中的数据存放在二维列表中"""
list_data = []
for row in range(2, self.ws.max_row+1):
method = self.case_req_method(row)
url = self.case_req_url(row)
mime = self.case_req_mime(row)
case_data = self.case_data(row)
expect_data = self.expect_data(row)
sql_data = self.sql_data(row)
sql_type = self.sql_type(row)
update_key = self.update_key(row)
# 用例模块,接口,标题,等级
module_name = self.module_name(row)
api_name = self.api_name(row)
case_title = self.case_title(row)
case_level = self.case_level(row)
if method and url:
list_data.append([module_name, api_name, case_title, case_level, method, url, mime, case_data, expect_data, sql_data, sql_type, update_key])
else:
return list_data
if __name__ == '__main__':
excel = ReadExcel()
print(excel.get_data())
\ No newline at end of file
# -*-coding:utf-8 -*- #
# ---------------------------------------------------------------------------
# ProjectName: test60
# FileName: read_ini.py
# Author: lao_zhao
# Datetime: 2024/5/20 14:02
# Description:
#
# ---------------------------------------------------------------------------
import configparser
import os
from InterfaceAutoTest import log_decorator
from InterfaceAutoTest.data_config.settings import *
class ReadIni:
@log_decorator
def __init__(self):
"""获取ini文件的路径,再使用Configparser对象读取ini文件"""
self.data_config_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'data_config')
ini_path = os.path.join(self.data_config_path, 'config.ini')
self.conf = configparser.ConfigParser()
self.conf.read(ini_path, encoding="utf-8")
@log_decorator
def get_file_path(self, key, username="demo"):
"""根据key获取file节点下文件的路径"""
try:
value = self.conf.get(FILE, key)
except Exception as e:
raise e
else:
username_dir = os.path.join(self.data_config_path, username)
return os.path.join(username_dir, value)
@log_decorator
def get_table_name(self, key):
"""根据key获取工作表名称"""
try:
value = self.conf.get(WORKSHEET, key)
except Exception as e:
raise e
else:
return value
@log_decorator
def get_host(self, key):
"""根据key获取域名"""
try:
value = self.conf.get(HOST, key)
except Exception as e:
raise e
else:
return value
@log_decorator
def get_db_connect_message(self, key):
"""根据key获取数据库的链接信息"""
try:
value = self.conf.get(DB, key)
except Exception as e:
raise e
else:
return value
if __name__ == '__main__':
ini = ReadIni()
print(ini.get_host("bpm"))
\ No newline at end of file
# -*-coding:utf-8 -*- #
# ---------------------------------------------------------------------------
# ProjectName: test60
# FileName: read_json.py
# Author: lao_zhao
# Datetime: 2024/5/20 14:13
# Description:
#
# ---------------------------------------------------------------------------
import json
import os.path
from InterfaceAutoTest import log_decorator
@log_decorator
def read_json(filename):
"""读取json文件,将json文件的内容序列化为python对象"""
if os.path.isfile(filename) and filename.endswith(".json"):
try:
with open(filename, mode="r", encoding="utf-8") as f:
return json.load(f)
except Exception as e:
raise e
else:
raise FileNotFoundError("json文件的路径错误")
\ No newline at end of file
# 配置数据配置层中文件的名称
[file1]
# 配置用例管理文件的名称
excel=APIAutoTest.xlsx
# 配置用例数据文件的名称
case=case_data.json
# 配置期望数据的文件
expect=expect_data.json
# sql语句的文件
sql=sql_data.json
[worksheet]
table_name=BPM
[host]
# 配置测试系统的域名
bpm=http://120.46.172.186:8080
[db]
# 配置测试系统的数据库的链接项
host=120.46.172.186
port=3306
username=root
password=root@2023
database=eipsaas
\ No newline at end of file
{
"认证接口":{
"登录系统":{
"LoginSuccess": {"username":"admin","password":"MTIzNDU2"},
"LoginErrorPasswordIsNone": {"username":"admin","password":""},
"LoginErrorPasswordIsLong":{"username":"admin","password":"MTIzNDU2MTIzNDU2MTIzNDU2MTIzNDU2MTIzNDU2MTIzNDU2MTIzNDU2MTIzNDU2MTIzNDU2MTIzNDU2"},
"LoginErrorPasswordIsShort":{"username":"admin","password":"m"},
"LoginErrorPasswordIsSpecial":{"username":"admin","password":"☯㍿卍卐"},
"LoginErrorUsernameIsNone":{"username":"","password":"MTIzNDU2"},
"LoginErrorUsernameIsLong":{"username":"adminadminadminadmin","password":"MTIzNDU2"},
"LoginErrorUsernameIsShort":{"username":"a","password":"MTIzNDU2"},
"LoginErrorUsernameIsSpecial":{"username":"☯㍿卍卐","password":"MTIzNDU2"},
"LoginErrorUsernameIsErr":{"username":"admin123","password":"MTIzNDU2"}
}
},
"维度管理": {
"添加维度": {
"AddDemSuccess": {
"code": "api_auto_test_add_dem",
"description": "api_auto_test_add_dem",
"isDefault": 0,
"name": "api_auto_test_add_dem"
}
},
"根据维度编码删除维度": {
"DeleteDemSuccess": {"ids": "需要更新"}
}
},
"组织管理": {
"添加组织": {
"AddOrgSuccess": {
"code": "test_add_org",
"demId": "需要更新",
"exceedLimitNum": 0,
"grade": "",
"limitNum": 0,
"name": "测试添加的组织",
"nowNum": 0,
"orderNo": 0,
"parentId": "0"
}
},
"组织加入用户": {
"UserAddOrgSuccess": {"orgCode": "test_add_org", "accounts": "admin"}
},
"保存组织参数": {
"SaveParamSuccess": {
"query": {"orgCode": "test_add_org"},
"body": [{"alias":"sz","value":100},{"alias":"kc","value":"语文课"}]
}
},
"删除组织": {
"DeleteOrgSuccess": "test_add_org"
}
}
}
\ No newline at end of file
{
"认证接口":{
"登录系统":{
"LoginSuccess": {"username":"超级管理员","loginStatus":true, "account":"admin"},
"LoginErrorPasswordIsNone": {"message":"账号或密码错误"},
"LoginErrorPasswordIsLong":{"message":"账号或密码错误"},
"LoginErrorPasswordIsShort":{"message":"账号或密码错误"},
"LoginErrorPasswordIsSpecial":{"message":"账号或密码错误"},
"LoginErrorUsernameIsNone":{"message":"账号或密码错误"},
"LoginErrorUsernameIsLong":{"message":"账号或密码错误"},
"LoginErrorUsernameIsShort":{"message":"账号或密码错误"},
"LoginErrorUsernameIsSpecial":{"message":"账号或密码错误"},
"LoginErrorUsernameIsErr":{"message":"账号或密码错误"}
},
"刷新token": {
"RefreshTokenSuccess": {"message": "刷新token成功"}
}
},
"维度管理": {
"添加维度": {
"AddDemSuccess":{"message": "添加维度成功!"}
},
"根据维度编码删除维度": {
"DeleteDemSuccess": {"message": "删除维度成功"}
}
},
"组织管理": {
"添加组织": {
"AddOrgSuccess": {"message": "添加组织成功"}
},
"组织加入用户": {
"UserAddOrgSuccess": {"state":true,"message":"加入成功","value":""}
},
"保存组织参数": {
"SaveParamSuccess": {"state":true,"message":"保存组织参数成功!","value":""}
},
"删除组织": {
"DeleteOrgSuccess": {"state":true,"message":"删除组织成功!","value":""}
}
}
}
\ No newline at end of file
{
"维度管理": {
"添加维度": {
"AddDemSuccess": "delete FROM uc_demension WHERE `CODE_`=\"api_auto_test_add_dem\";"
},
"根据维度编码删除维度": {
"DeleteDemSuccess": "select ID_ FROM uc_demension WHERE `CODE_`=\"api_auto_test_add_dem\";"
}
},
"组织管理": {
"添加组织": {
"AddOrgSuccess": {
"select": "select ID_ FROM uc_demension WHERE `CODE_`=\"api_auto_test_add_dem\";",
"delete": "DELETE FROM uc_org WHERE `CODE_`=\"test_add_org\";"
}
}
}
}
\ No newline at end of file
{
"认证接口":{
"登录系统":{
"LoginSuccess": {"username":"admin","password":"MTIzNDU2"},
"LoginErrorPasswordIsNone": {"username":"admin","password":""},
"LoginErrorPasswordIsLong":{"username":"admin","password":"MTIzNDU2MTIzNDU2MTIzNDU2MTIzNDU2MTIzNDU2MTIzNDU2MTIzNDU2MTIzNDU2MTIzNDU2MTIzNDU2"},
"LoginErrorPasswordIsShort":{"username":"admin","password":"m"},
"LoginErrorPasswordIsSpecial":{"username":"admin","password":"☯㍿卍卐"},
"LoginErrorUsernameIsNone":{"username":"","password":"MTIzNDU2"},
"LoginErrorUsernameIsLong":{"username":"adminadminadminadmin","password":"MTIzNDU2"},
"LoginErrorUsernameIsShort":{"username":"a","password":"MTIzNDU2"},
"LoginErrorUsernameIsSpecial":{"username":"☯㍿卍卐","password":"MTIzNDU2"},
"LoginErrorUsernameIsErr":{"username":"admin123","password":"MTIzNDU2"}
}
},
"维度管理": {
"添加维度": {
"AddDemSuccess": {
"code": "api_auto_test_add_dem",
"description": "api_auto_test_add_dem",
"isDefault": 0,
"name": "api_auto_test_add_dem"
}
},
"根据维度编码删除维度": {
"DeleteDemSuccess": {"ids": "需要更新"}
}
},
"组织管理": {
"添加组织": {
"AddOrgSuccess": {
"code": "test_add_org",
"demId": "需要更新",
"exceedLimitNum": 0,
"grade": "",
"limitNum": 0,
"name": "测试添加的组织",
"nowNum": 0,
"orderNo": 0,
"parentId": "0"
}
},
"组织加入用户": {
"UserAddOrgSuccess": {"orgCode": "test_add_org", "accounts": "admin"}
},
"保存组织参数": {
"SaveParamSuccess": {
"query": {"orgCode": "test_add_org"},
"body": [{"alias":"sz","value":100},{"alias":"kc","value":"语文课"}]
}
},
"删除组织": {
"DeleteOrgSuccess": "test_add_org"
}
}
}
\ No newline at end of file
{
"认证接口":{
"登录系统":{
"LoginSuccess": {"username":"超级管理员","loginStatus":true, "account":"admin"},
"LoginErrorPasswordIsNone": {"message":"账号或密码错误"},
"LoginErrorPasswordIsLong":{"message":"账号或密码错误"},
"LoginErrorPasswordIsShort":{"message":"账号或密码错误"},
"LoginErrorPasswordIsSpecial":{"message":"账号或密码错误"},
"LoginErrorUsernameIsNone":{"message":"账号或密码错误"},
"LoginErrorUsernameIsLong":{"message":"账号或密码错误"},
"LoginErrorUsernameIsShort":{"message":"账号或密码错误"},
"LoginErrorUsernameIsSpecial":{"message":"账号或密码错误"},
"LoginErrorUsernameIsErr":{"message":"账号或密码错误"}
},
"刷新token": {
"RefreshTokenSuccess": {"message": "刷新token成功"}
}
},
"维度管理": {
"添加维度": {
"AddDemSuccess":{"message": "添加维度成功!"}
},
"根据维度编码删除维度": {
"DeleteDemSuccess": {"message": "删除维度成功"}
}
},
"组织管理": {
"添加组织": {
"AddOrgSuccess": {"message": "添加组织成功"}
},
"组织加入用户": {
"UserAddOrgSuccess": {"state":true,"message":"加入成功","value":""}
},
"保存组织参数": {
"SaveParamSuccess": {"state":true,"message":"保存组织参数成功!","value":""}
},
"删除组织": {
"DeleteOrgSuccess": {"state":true,"message":"删除组织成功!","value":""}
}
}
}
\ No newline at end of file
{
"维度管理": {
"添加维度": {
"AddDemSuccess": "delete FROM uc_demension WHERE `CODE_`=\"api_auto_test_add_dem\";"
},
"根据维度编码删除维度": {
"DeleteDemSuccess": "select ID_ FROM uc_demension WHERE `CODE_`=\"api_auto_test_add_dem\";"
}
},
"组织管理": {
"添加组织": {
"AddOrgSuccess": {
"select": "select ID_ FROM uc_demension WHERE `CODE_`=\"api_auto_test_add_dem\";",
"delete": "DELETE FROM uc_org WHERE `CODE_`=\"test_add_org\";"
}
}
}
}
\ No newline at end of file
# -*-coding:utf-8 -*- #
# ---------------------------------------------------------------------------
# ProjectName: test60
# FileName: settings.py
# Author: lao_zhao
# Datetime: 2024/5/21 10:15
# Description:
#
# ---------------------------------------------------------------------------
# excel的列号=======================================
NUMBER = "A"
MODULE = "B"
API = "C"
TITLE = "D"
LEVEL = "E"
METHOD = "F"
URL = "G"
MIME = "H"
CASE = "I"
EXPECT = "J"
SQL = "K"
SQL_TYPE = "L"
UPDATE_KEY = "M"
# ini文件中节点名称======================================
FILE = "file1"
WORKSHEET = "worksheet"
HOST = "host"
DB = "db"
# ini文件中键名称======================================
# file节点============================================
EXCEL_KEY = "excel"
CASE_KEY = "case"
EXPECT_KEY = "expect"
SQL_KEY = "sql"
# worksheet节点============================================
TABLE_NAME_KEY = "table_name"
# host节点============================================
BPM_KEY = "bpm"
# db节点============================================
HOST_KEY = "host"
PORT_KEY = "port"
USERNAME_KEY = "username"
PASSWORD_KEY = "password"
DATABASE_KEY = "database"
\ No newline at end of file
{"uuid": "79c51ef4-2d99-4b73-85ec-3f161c38be14", "befores": [{"name": "update_key", "status": "passed", "start": 1716266062251, "stop": 1716266062251}], "start": 1716266062251, "stop": 1716266062344}
\ No newline at end of file
{"uuid": "9ccf626d-521d-4d8b-85ca-bd79674cf887", "befores": [{"name": "expect_data", "status": "passed", "start": 1716266063435, "stop": 1716266063435}], "start": 1716266063435, "stop": 1716266063500}
\ No newline at end of file
{"uuid": "6535a333-5efb-45ae-8d04-6afcd4bfaf5a", "befores": [{"name": "update_key", "status": "passed", "start": 1716266061825, "stop": 1716266061826}], "start": 1716266061825, "stop": 1716266061920}
\ No newline at end of file
{"uuid": "fdb82576-a6c2-48ee-90c1-3960b8345961", "befores": [{"name": "expect_data", "status": "passed", "start": 1716266061825, "stop": 1716266061825}], "start": 1716266061825, "stop": 1716266061922}
\ No newline at end of file
{"name": "test_bpm[POST-http://120.46.172.186:8080/auth-application/json-case_data2-expect_data2-None-None-None]", "status": "passed", "attachments": [{"name": "log", "source": "e1df5f33-b036-4f2a-acc7-32953218ffc0-attachment.txt", "type": "text/plain"}, {"name": "stdout", "source": "54178589-2fb1-4137-8b91-e1ff74261bb5-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "method", "value": "'POST'"}, {"name": "url", "value": "'http://120.46.172.186:8080/auth'"}, {"name": "mime", "value": "'application/json'"}, {"name": "case_data", "value": "{'username': 'admin', 'password': 'MTIzNDU2MTIzNDU2MTIzNDU2MTIzNDU2MTIzNDU2MTIzNDU2MTIzNDU2MTIzNDU2MTIzNDU2MTIzNDU2'}"}, {"name": "expect_data", "value": "{'message': '账号或密码错误'}"}, {"name": "sql_data", "value": "None"}, {"name": "sql_type", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1716266061826, "stop": 1716266061920, "uuid": "5865cc97-0100-4f50-baf0-d802b847a88e", "historyId": "b47c42dbf6ffec9da36d72391330febd", "testCaseId": "2de48645219de93dc51c83a53a42f952", "fullName": "test_case.test_demo.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_demo"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "DESKTOP-7B0J6EO"}, {"name": "thread", "value": "7108-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_demo.test_bpm"}]}
\ No newline at end of file
{"uuid": "f327570a-5b34-4ed2-813b-03286446b6b5", "befores": [{"name": "sql_type", "status": "passed", "start": 1716266061825, "stop": 1716266061825}], "start": 1716266061825, "stop": 1716266061921}
\ No newline at end of file
{"uuid": "a5a6e5a6-fd59-4746-b06c-93293425a99f", "befores": [{"name": "sql_type", "status": "passed", "start": 1716266062154, "stop": 1716266062154}], "start": 1716266062154, "stop": 1716266062244}
\ No newline at end of file
{"uuid": "189fb2e0-7b46-48c9-a6c2-dbe80fed3b42", "befores": [{"name": "mime", "status": "passed", "start": 1716266064572, "stop": 1716266064572}], "start": 1716266064572, "stop": 1716266064632}
\ No newline at end of file
{"uuid": "38769a42-2031-4baf-8b3d-983bdf53c4e7", "befores": [{"name": "expect_data", "status": "passed", "start": 1716266062044, "stop": 1716266062044}], "start": 1716266062044, "stop": 1716266062146}
\ No newline at end of file
{"uuid": "f19b6b86-c237-4701-983a-0cd3c9ce90f5", "befores": [{"name": "update_key", "status": "passed", "start": 1716266063505, "stop": 1716266063505}], "start": 1716266063505, "stop": 1716266063606}
\ No newline at end of file
{"uuid": "9b715632-4ef6-4a7e-b4fd-d4feb3f1433a", "befores": [{"name": "sql_data", "status": "passed", "start": 1716266061689, "stop": 1716266061689}], "start": 1716266061688, "stop": 1716266061752}
\ No newline at end of file
{"uuid": "0f5cec79-1e0a-4059-8074-d0633478b9d0", "befores": [{"name": "update_key", "status": "passed", "start": 1716266064321, "stop": 1716266064321}], "start": 1716266064321, "stop": 1716266064507}
\ No newline at end of file
{"uuid": "6a328fec-686f-40a4-8f79-b7b0fcbe0d08", "befores": [{"name": "mime", "status": "passed", "start": 1716266063361, "stop": 1716266063361}], "start": 1716266063361, "stop": 1716266063431}
\ No newline at end of file
INFO  root:__init__.py:64 执行的功能为:request_all, 功能的描述为:封装公共的请求方法, 所在的文件为:D:\PythonDoc\PycharmProjects\pythonProject1\InterfaceAutoTest\requests_method\requsts_method.py, 所在行为:26
ERROR  root:test_bpm.py:57 断言成功, 用例数据为{'query': {'orgCode': 'test_add_org'}, 'body': [{'alias': 'sz', 'value': 100}, {'alias': 'kc', 'value': '语文课'}]}, 期望数据为:{'state': True, 'message': '保存组织参数成功!', 'value': ''}, 服务器返回的数据为:{"state":true,"message":"保存组织参数成功!","value":""}
\ No newline at end of file
{"uuid": "9414e9fe-9d97-4dcd-b6ab-8388f77f8acd", "befores": [{"name": "sql_type", "status": "passed", "start": 1716266064321, "stop": 1716266064321}], "start": 1716266064321, "stop": 1716266064507}
\ No newline at end of file
INFO  root:__init__.py:64 执行的功能为:request_all, 功能的描述为:封装公共的请求方法, 所在的文件为:D:\PythonDoc\PycharmProjects\pythonProject1\InterfaceAutoTest\requests_method\requsts_method.py, 所在行为:26
ERROR  root:test_bpm.py:57 断言成功, 用例数据为test_add_org, 期望数据为:{'state': True, 'message': '删除组织成功!', 'value': ''}, 服务器返回的数据为:{"state":true,"message":"删除组织成功!","value":""}
\ No newline at end of file
{"uuid": "4fead871-276e-44d9-b18b-42c5b1d7e2f1", "befores": [{"name": "sql_type", "status": "passed", "start": 1716266063505, "stop": 1716266063505}], "start": 1716266063505, "stop": 1716266063606}
\ No newline at end of file
{"uuid": "c0495f42-d9c7-4e0f-8c2a-1da63a7ae0c6", "befores": [{"name": "mime", "status": "passed", "start": 1716266063505, "stop": 1716266063505}], "start": 1716266063505, "stop": 1716266063609}
\ No newline at end of file
INFO  root:__init__.py:64 执行的功能为:test_bpm, 功能的描述为:None, 所在的文件为:D:\PythonDoc\PycharmProjects\pythonProject1\InterfaceAutoTest\test_case\test_demo\test_bpm.py, 所在行为:20
INFO  root:__init__.py:64 执行的功能为:request_all, 功能的描述为:封装公共的请求方法, 所在的文件为:D:\PythonDoc\PycharmProjects\pythonProject1\InterfaceAutoTest\requests_method\requsts_method.py, 所在行为:26
INFO  root:test_bpm.py:58 断言成功, 用例数据为{'username': 'admin123', 'password': 'MTIzNDU2'}, 期望数据为:{'message': '账号或密码错误'}, 服务器返回的数据为:{"state":false,"message":"账号或密码错误","logId":"1792775927696998400"}
\ No newline at end of file
{"uuid": "b513b413-887f-431a-9af8-dd227082e24c", "befores": [{"name": "mime", "status": "passed", "start": 1716266061688, "stop": 1716266061688}], "start": 1716266061688, "stop": 1716266061755}
\ No newline at end of file
{"uuid": "4e39acd5-0982-4d1e-ae88-945f0fea25d4", "befores": [{"name": "sql_data", "status": "passed", "start": 1716266062380, "stop": 1716266062380}], "start": 1716266062380, "stop": 1716266062472}
\ No newline at end of file
{"uuid": "753781e8-c9e0-470e-93da-042b31b96933", "children": ["9d4d10e5-8f5d-4e53-847c-466e7763ebf6", "f9bda667-88bd-48c7-9f96-6f087f6a668b", "0ec47cd1-bf07-4aa8-9080-860fa17ab846", "f3af5eaf-92f8-492a-8b8c-ecb76549b054", "2cb03f99-d8bf-4e91-8bbd-fc8abd93aabb", "fd71a75a-e7b5-4059-9a60-02567edcd680"], "befores": [{"name": "db_fix", "status": "passed", "start": 1716266063969, "stop": 1716266064178}], "afters": [{"name": "db_fix::0", "status": "passed", "start": 1716266064805, "stop": 1716266064806}], "start": 1716266063969, "stop": 1716266064806}
\ No newline at end of file
{"uuid": "2b2bbe0b-8f6e-49ab-a1a3-a726d900ec9b", "befores": [{"name": "case_data", "status": "passed", "start": 1716266063435, "stop": 1716266063435}], "start": 1716266063435, "stop": 1716266063501}
\ No newline at end of file
{"name": "test_bpm[GET-http://120.46.172.186:8080/refresh-None-None-expect_data10-None-None-None]", "status": "failed", "statusDetails": {"message": "AssertionError: assert '刷新token成功' == None\n + where None = <built-in method get of dict object at 0x000001FE8D8C2900>('message')\n + where <built-in method get of dict object at 0x000001FE8D8C2900> = {'account': '', 'loginStatus': True, 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOj...2NjA2NH0.SEHhkCcMSuKyGvYXEgH4vy827ZbWuTfoZ6BO-Djw8KXcbV_7hEPReDkJ-dA7IIxNLkg0aIP9iGlpmz74nj9GOg', 'userAttrs': {}, ...}.get\n + where {'account': '', 'loginStatus': True, 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOj...2NjA2NH0.SEHhkCcMSuKyGvYXEgH4vy827ZbWuTfoZ6BO-Djw8KXcbV_7hEPReDkJ-dA7IIxNLkg0aIP9iGlpmz74nj9GOg', 'userAttrs': {}, ...} = <bound method Response.json of <Response [200]>>()\n + where <bound method Response.json of <Response [200]>> = <Response [200]>.json", "trace": "self = <InterfaceAutoTest.test_case.test_demo.test_bpm.TestBPM object at 0x000001FE8D5BF560>\nreq_fix = <InterfaceAutoTest.requests_method.requsts_method.RequestsMethod object at 0x000001FE8C89EAB0>\ndb_fix = <InterfaceAutoTest.common.db.DB object at 0x000001FE8D854A10>, method = 'GET', url = 'http://120.46.172.186:8080/refresh'\nmime = None, case_data = None, expect_data = {'message': '刷新token成功'}, sql_data = None, sql_type = None, update_key = None\n\n @log_decorator\n @pytest.mark.parametrize(\"method, url, mime, case_data, expect_data, sql_data, sql_type, update_key\", excel.get_data())\n def test_bpm(self, req_fix, db_fix, method, url, mime, case_data, expect_data, sql_data, sql_type, update_key):\n \n # 判断sql语句类型是否为select\n if sql_type == \"select\":\n # 使用DB类对象调用select_func方法执行查询的sql语句,并接收查询结果\n select_result = db_fix.select_func(sql_data)\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 将更新之后的用例数据发送给服务器。\n \n # 判断sql语句的类型是否为delete\n elif sql_type == \"delete\":\n # 使用DB类对象调用delete_func方法执行删除的sql语句\n db_fix.delete_func(sql_data)\n # 将数据库中的数据删除完之后,再发送请求\n \n # 判断sql语句类型是否为select|delete或者为delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete_func方法执行删除的sql语句\n db_fix.delete_func(sql_data[\"delete\"])\n # 使用DB类对象调用select_func方法执行查询的sql语句,并接收查询结果\n select_result = db_fix.select_func(sql_data[\"select\"])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 将更新之后的用例数据发送给服务器。\n \n # 使用RequestsMethod对象发送请求\n res = req_fix.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n # 断言\n try:\n for key in expect_data:\n assert expect_data[key] == res.json().get(key)\n except AssertionError as e:\n logging.error(f\"断言失败, 用例数据为{case_data}, 期望数据为:{expect_data}, 服务器返回的数据为:{res.text}\")\n> raise e\n\ntest_case\\test_demo\\test_bpm.py:56: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = <InterfaceAutoTest.test_case.test_demo.test_bpm.TestBPM object at 0x000001FE8D5BF560>\nreq_fix = <InterfaceAutoTest.requests_method.requsts_method.RequestsMethod object at 0x000001FE8C89EAB0>\ndb_fix = <InterfaceAutoTest.common.db.DB object at 0x000001FE8D854A10>, method = 'GET', url = 'http://120.46.172.186:8080/refresh'\nmime = None, case_data = None, expect_data = {'message': '刷新token成功'}, sql_data = None, sql_type = None, update_key = None\n\n @log_decorator\n @pytest.mark.parametrize(\"method, url, mime, case_data, expect_data, sql_data, sql_type, update_key\", excel.get_data())\n def test_bpm(self, req_fix, db_fix, method, url, mime, case_data, expect_data, sql_data, sql_type, update_key):\n \n # 判断sql语句类型是否为select\n if sql_type == \"select\":\n # 使用DB类对象调用select_func方法执行查询的sql语句,并接收查询结果\n select_result = db_fix.select_func(sql_data)\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 将更新之后的用例数据发送给服务器。\n \n # 判断sql语句的类型是否为delete\n elif sql_type == \"delete\":\n # 使用DB类对象调用delete_func方法执行删除的sql语句\n db_fix.delete_func(sql_data)\n # 将数据库中的数据删除完之后,再发送请求\n \n # 判断sql语句类型是否为select|delete或者为delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete_func方法执行删除的sql语句\n db_fix.delete_func(sql_data[\"delete\"])\n # 使用DB类对象调用select_func方法执行查询的sql语句,并接收查询结果\n select_result = db_fix.select_func(sql_data[\"select\"])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 将更新之后的用例数据发送给服务器。\n \n # 使用RequestsMethod对象发送请求\n res = req_fix.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n # 断言\n try:\n for key in expect_data:\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '刷新token成功' == None\nE + where None = <built-in method get of dict object at 0x000001FE8D8C2900>('message')\nE + where <built-in method get of dict object at 0x000001FE8D8C2900> = {'account': '', 'loginStatus': True, 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOj...2NjA2NH0.SEHhkCcMSuKyGvYXEgH4vy827ZbWuTfoZ6BO-Djw8KXcbV_7hEPReDkJ-dA7IIxNLkg0aIP9iGlpmz74nj9GOg', 'userAttrs': {}, ...}.get\nE + where {'account': '', 'loginStatus': True, 'token': 'eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsInRlbmFudElkIjoiLTEiLCJleHAiOj...2NjA2NH0.SEHhkCcMSuKyGvYXEgH4vy827ZbWuTfoZ6BO-Djw8KXcbV_7hEPReDkJ-dA7IIxNLkg0aIP9iGlpmz74nj9GOg', 'userAttrs': {}, ...} = <bound method Response.json of <Response [200]>>()\nE + where <bound method Response.json of <Response [200]>> = <Response [200]>.json\n\ntest_case\\test_demo\\test_bpm.py:53: AssertionError"}, "attachments": [{"name": "log", "source": "e08b30ef-afc4-4d99-9c4e-09bd2ce31719-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "method", "value": "'GET'"}, {"name": "url", "value": "'http://120.46.172.186:8080/refresh'"}, {"name": "mime", "value": "None"}, {"name": "case_data", "value": "None"}, {"name": "expect_data", "value": "{'message': '刷新token成功'}"}, {"name": "sql_data", "value": "None"}, {"name": "sql_type", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1716266062683, "stop": 1716266062780, "uuid": "430bf4c5-20fe-4969-b2d4-96336165618b", "historyId": "5b75cba57dfabf3b3fe8031f107d18c6", "testCaseId": "2de48645219de93dc51c83a53a42f952", "fullName": "test_case.test_demo.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_demo"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "DESKTOP-7B0J6EO"}, {"name": "thread", "value": "7108-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_demo.test_bpm"}]}
\ No newline at end of file
{"uuid": "97cfa64e-4b1d-4425-ad8d-cc0ed46351c9", "befores": [{"name": "sql_type", "status": "passed", "start": 1716266064178, "stop": 1716266064178}], "start": 1716266064178, "stop": 1716266064314}
\ No newline at end of file
{"uuid": "e3fbe139-8aa8-44ed-9496-8c0814a37890", "children": ["581bc4c3-d910-434f-88ef-740fd15d4931", "52edb0c3-f79c-4f9f-b39e-840505aaaa6b", "5865cc97-0100-4f50-baf0-d802b847a88e", "7ca8e205-7276-4e8e-aa6d-091f33cea9c8", "b698b780-8d65-4547-b59a-15c907fd423c", "4b6e227a-a6b5-4373-89e5-dc33c89c3f86", "6b739108-5c5e-460f-b43d-443c50c03053", "1c07ec35-2968-4a37-a57f-c7aebe0f619d", "0fa2afa8-e8e5-4cda-9041-d6382f3a5ff5", "657735ba-abe6-4e47-83d1-5257f1dec4cf", "430bf4c5-20fe-4969-b2d4-96336165618b", "05acfa89-10bb-4e38-8b31-ae311635d923", "157ddd15-5b47-4aad-b9f0-ce0dcb4c578b", "afc3139b-f22b-4623-92b7-8eaa752c29a1", "7a795f8c-7ee8-46ba-82bf-ec72d0e93e6f", "4acca2cb-7f92-423e-a6b2-feb896823fcf", "2c0491c4-e537-4559-ac7e-17275e3343db"], "befores": [{"name": "req_fix", "status": "passed", "start": 1716266061385, "stop": 1716266061487}], "afters": [{"name": "req_fix::0", "status": "passed", "start": 1716266064808, "stop": 1716266064808}], "start": 1716266061385, "stop": 1716266064808}
\ No newline at end of file
{"uuid": "ce97f065-f8dd-4514-8fc0-1a0c7a47bcc2", "befores": [{"name": "sql_type", "status": "passed", "start": 1716266064636, "stop": 1716266064636}], "start": 1716266064636, "stop": 1716266064695}
\ No newline at end of file
{"uuid": "488aa7e8-d099-4b78-adf9-e491872beddd", "befores": [{"name": "sql_data", "status": "passed", "start": 1716266064636, "stop": 1716266064636}], "start": 1716266064636, "stop": 1716266064695}
\ No newline at end of file
{"uuid": "258f508e-82ab-4d58-ad5c-f1286664c8e6", "befores": [{"name": "url", "status": "passed", "start": 1716266063361, "stop": 1716266063361}], "start": 1716266063361, "stop": 1716266063431}
\ No newline at end of file
{"uuid": "c5f71f5a-a7d8-437e-9472-0c0d9d48f1c8", "befores": [{"name": "url", "status": "passed", "start": 1716266062153, "stop": 1716266062153}], "start": 1716266062153, "stop": 1716266062247}
\ No newline at end of file
{"uuid": "b9f2a7df-b3a7-4c1b-a078-efd4a87686d0", "befores": [{"name": "expect_data", "status": "passed", "start": 1716266064700, "stop": 1716266064700}], "start": 1716266064700, "stop": 1716266064803}
\ No newline at end of file
{"uuid": "a3978f9c-c6fe-4719-ba88-6718641a0b44", "befores": [{"name": "sql_type", "status": "passed", "start": 1716266063299, "stop": 1716266063299}], "start": 1716266063299, "stop": 1716266063356}
\ No newline at end of file
{"uuid": "ac417dbd-208d-4787-b6b9-72664cd92c65", "befores": [{"name": "mime", "status": "passed", "start": 1716266062044, "stop": 1716266062044}], "start": 1716266062044, "stop": 1716266062147}
\ No newline at end of file
{"uuid": "b837026e-b0ba-4578-b3ca-7c5c39dfb9af", "befores": [{"name": "update_key", "status": "passed", "start": 1716266064700, "stop": 1716266064700}], "start": 1716266064700, "stop": 1716266064801}
\ No newline at end of file
{"uuid": "2383bcfb-ef56-48a1-aa6d-1a248ca0e26c", "befores": [{"name": "method", "status": "passed", "start": 1716266061825, "stop": 1716266061825}], "start": 1716266061825, "stop": 1716266061926}
\ No newline at end of file
{"uuid": "d700c67f-554b-4d60-90b1-f306877d6e46", "befores": [{"name": "expect_data", "status": "passed", "start": 1716266063361, "stop": 1716266063361}], "start": 1716266063361, "stop": 1716266063429}
\ No newline at end of file
{"uuid": "45bd35b8-4926-44cb-af60-ba41d3e7c609", "befores": [{"name": "update_key", "status": "passed", "start": 1716266063106, "stop": 1716266063106}], "start": 1716266063106, "stop": 1716266063291}
\ No newline at end of file
{"name": "test_bpm[pOst-http://120.46.172.186:8080/api/demension/v1/dem/addDem-json-case_data0-expect_data0-delete FROM uc_demension WHERE `CODE_`=\"api_auto_test_add_dem\";-delete-None]", "status": "passed", "attachments": [{"name": "log", "source": "9239dc2d-7f12-4001-9908-1f60abfdc755-attachment.txt", "type": "text/plain"}, {"name": "stdout", "source": "bff91577-f5ea-4d37-aa36-b63c2bc16778-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "method", "value": "'pOst'"}, {"name": "url", "value": "'http://120.46.172.186:8080/api/demension/v1/dem/addDem'"}, {"name": "mime", "value": "'json'"}, {"name": "case_data", "value": "{'code': 'api_auto_test_add_dem', 'description': 'api_auto_test_add_dem', 'isDefault': 0, 'name': 'api_auto_test_add_dem'}"}, {"name": "expect_data", "value": "{'message': '添加维度成功!'}"}, {"name": "sql_data", "value": "'delete FROM uc_demension WHERE `CODE_`=\"api_auto_test_add_dem\";'"}, {"name": "sql_type", "value": "'delete'"}, {"name": "update_key", "value": "None"}], "start": 1716266064179, "stop": 1716266064313, "uuid": "9d4d10e5-8f5d-4e53-847c-466e7763ebf6", "historyId": "9bfeea619433626f30297453ce53b9ef", "testCaseId": "8c3ca9784f7a20f46f527b41c7204e5a", "fullName": "test_case.test_mirZhang.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_mirZhang"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "DESKTOP-7B0J6EO"}, {"name": "thread", "value": "7108-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_mirZhang.test_bpm"}]}
\ No newline at end of file
{"uuid": "3e3ac43a-f78e-4c5f-b40d-6613c64a4683", "befores": [{"name": "sql_data", "status": "passed", "start": 1716266062577, "stop": 1716266062577}], "start": 1716266062577, "stop": 1716266062676}
\ No newline at end of file
{"uuid": "820ffd25-47bd-40de-b2ab-62b92cae8cdc", "befores": [{"name": "update_key", "status": "passed", "start": 1716266063299, "stop": 1716266063299}], "start": 1716266063299, "stop": 1716266063355}
\ No newline at end of file
{"uuid": "6730669a-840d-4edc-a8be-743030e6eceb", "befores": [{"name": "mime", "status": "passed", "start": 1716266061930, "stop": 1716266061930}], "start": 1716266061930, "stop": 1716266062040}
\ No newline at end of file
{"uuid": "e0f64b7f-5a33-4e71-9e5d-4b2cd99db58d", "befores": [{"name": "expect_data", "status": "passed", "start": 1716266063505, "stop": 1716266063505}], "start": 1716266063505, "stop": 1716266063607}
\ No newline at end of file
{"uuid": "0cea413f-2ff0-4a2a-ba20-7d781b707b5f", "befores": [{"name": "mime", "status": "passed", "start": 1716266062683, "stop": 1716266062683}], "start": 1716266062683, "stop": 1716266062947}
\ No newline at end of file
{"uuid": "1a6a02bf-93ef-4466-ac2b-22219fa6dc25", "children": ["9d4d10e5-8f5d-4e53-847c-466e7763ebf6", "f9bda667-88bd-48c7-9f96-6f087f6a668b", "0ec47cd1-bf07-4aa8-9080-860fa17ab846", "f3af5eaf-92f8-492a-8b8c-ecb76549b054", "2cb03f99-d8bf-4e91-8bbd-fc8abd93aabb", "fd71a75a-e7b5-4059-9a60-02567edcd680"], "befores": [{"name": "req_fix", "status": "passed", "start": 1716266063873, "stop": 1716266063969}], "afters": [{"name": "req_fix::0", "status": "passed", "start": 1716266064806, "stop": 1716266064806}], "start": 1716266063873, "stop": 1716266064807}
\ No newline at end of file
{"uuid": "62330ff9-a541-464c-9766-8902aa33d98f", "befores": [{"name": "mime", "status": "passed", "start": 1716266062962, "stop": 1716266062962}], "start": 1716266062962, "stop": 1716266063102}
\ No newline at end of file
INFO  root:__init__.py:64 执行的功能为:test_bpm, 功能的描述为:None, 所在的文件为:D:\PythonDoc\PycharmProjects\pythonProject1\InterfaceAutoTest\test_case\test_demo\test_bpm.py, 所在行为:20
INFO  root:__init__.py:64 执行的功能为:request_all, 功能的描述为:封装公共的请求方法, 所在的文件为:D:\PythonDoc\PycharmProjects\pythonProject1\InterfaceAutoTest\requests_method\requsts_method.py, 所在行为:26
INFO  root:test_bpm.py:58 断言成功, 用例数据为test_add_org, 期望数据为:{'state': True, 'message': '删除组织成功!', 'value': ''}, 服务器返回的数据为:{"state":true,"message":"删除组织成功!","value":""}
\ No newline at end of file
{"uuid": "1e0096d6-fd14-49f8-8b4c-e297fcd71e5b", "befores": [{"name": "method", "status": "passed", "start": 1716266062153, "stop": 1716266062153}], "start": 1716266062153, "stop": 1716266062247}
\ No newline at end of file
{"uuid": "e34e67d8-a566-4333-a58a-08deb4bc4719", "befores": [{"name": "url", "status": "passed", "start": 1716266064512, "stop": 1716266064512}], "start": 1716266064512, "stop": 1716266064569}
\ No newline at end of file
{"uuid": "7642e6be-b1f4-4937-9942-070e87cf9c0c", "befores": [{"name": "expect_data", "status": "passed", "start": 1716266061688, "stop": 1716266061688}], "start": 1716266061688, "stop": 1716266061752}
\ No newline at end of file
{"uuid": "ff951dca-7077-44e3-9508-b68db4a97cdc", "befores": [{"name": "expect_data", "status": "passed", "start": 1716266061930, "stop": 1716266061930}], "start": 1716266061930, "stop": 1716266062039}
\ No newline at end of file
{"uuid": "7ddedb94-c6b1-4b80-b5df-38fc64b5c7fd", "befores": [{"name": "url", "status": "passed", "start": 1716266064178, "stop": 1716266064178}], "start": 1716266064178, "stop": 1716266064317}
\ No newline at end of file
INFO  root:__init__.py:64 执行的功能为:test_bpm, 功能的描述为:None, 所在的文件为:D:\PythonDoc\PycharmProjects\pythonProject1\InterfaceAutoTest\test_case\test_demo\test_bpm.py, 所在行为:20
INFO  root:__init__.py:64 执行的功能为:request_all, 功能的描述为:封装公共的请求方法, 所在的文件为:D:\PythonDoc\PycharmProjects\pythonProject1\InterfaceAutoTest\requests_method\requsts_method.py, 所在行为:26
INFO  root:test_bpm.py:58 断言成功, 用例数据为{'orgCode': 'test_add_org', 'accounts': 'admin'}, 期望数据为:{'state': True, 'message': '加入成功', 'value': ''}, 服务器返回的数据为:{"state":true,"message":"加入成功","value":""}
\ No newline at end of file
{"uuid": "5820a666-186b-452b-9cb4-a50473e08cf6", "befores": [{"name": "update_key", "status": "passed", "start": 1716266062480, "stop": 1716266062480}], "start": 1716266062480, "stop": 1716266062568}
\ No newline at end of file
{"uuid": "8145396f-98d2-4619-bd1b-aee64ff57d9e", "befores": [{"name": "update_key", "status": "passed", "start": 1716266062044, "stop": 1716266062044}], "start": 1716266062044, "stop": 1716266062142}
\ No newline at end of file
{"uuid": "aa52a9dc-e676-4719-9dfb-9489e9c975e0", "befores": [{"name": "expect_data", "status": "passed", "start": 1716266063298, "stop": 1716266063299}], "start": 1716266063298, "stop": 1716266063357}
\ No newline at end of file
{"uuid": "ff183530-22e4-4586-861a-97c6015282c5", "befores": [{"name": "sql_data", "status": "passed", "start": 1716266061762, "stop": 1716266061762}], "start": 1716266061762, "stop": 1716266061818}
\ No newline at end of file
{"name": "test_bpm[pOst-http://120.46.172.186:8080/api/demension/v1/dem/addDem-json-case_data11-expect_data11-delete FROM uc_demension WHERE `CODE_`=\"api_auto_test_add_dem\";-delete-None]", "status": "passed", "attachments": [{"name": "log", "source": "62e1919f-1f99-4e5c-9565-cf0ac9f065d9-attachment.txt", "type": "text/plain"}, {"name": "stdout", "source": "dc340d02-cf8f-4fbd-9cc2-c9657b594a0e-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "method", "value": "'pOst'"}, {"name": "url", "value": "'http://120.46.172.186:8080/api/demension/v1/dem/addDem'"}, {"name": "mime", "value": "'json'"}, {"name": "case_data", "value": "{'code': 'api_auto_test_add_dem', 'description': 'api_auto_test_add_dem', 'isDefault': 0, 'name': 'api_auto_test_add_dem'}"}, {"name": "expect_data", "value": "{'message': '添加维度成功!'}"}, {"name": "sql_data", "value": "'delete FROM uc_demension WHERE `CODE_`=\"api_auto_test_add_dem\";'"}, {"name": "sql_type", "value": "'delete'"}, {"name": "update_key", "value": "None"}], "start": 1716266062962, "stop": 1716266063099, "uuid": "05acfa89-10bb-4e38-8b31-ae311635d923", "historyId": "4b19079f470a45736a844d533ef525d4", "testCaseId": "2de48645219de93dc51c83a53a42f952", "fullName": "test_case.test_demo.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_demo"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "DESKTOP-7B0J6EO"}, {"name": "thread", "value": "7108-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_demo.test_bpm"}]}
\ No newline at end of file
{"uuid": "385c290b-0b9c-45c7-9af6-3ed8397506b3", "befores": [{"name": "sql_data", "status": "passed", "start": 1716266061825, "stop": 1716266061825}], "start": 1716266061825, "stop": 1716266061921}
\ No newline at end of file
{"uuid": "2269e573-6290-45e0-95fb-3efdc2f7fa7c", "befores": [{"name": "case_data", "status": "passed", "start": 1716266064320, "stop": 1716266064320}], "start": 1716266064320, "stop": 1716266064508}
\ No newline at end of file
INFO  root:__init__.py:64 执行的功能为:test_bpm, 功能的描述为:None, 所在的文件为:D:\PythonDoc\PycharmProjects\pythonProject1\InterfaceAutoTest\test_case\test_demo\test_bpm.py, 所在行为:20
INFO  root:__init__.py:64 执行的功能为:select_func, 功能的描述为:执行查询的sql语句,并返回查询结果, 所在的文件为:D:\PythonDoc\PycharmProjects\pythonProject1\InterfaceAutoTest\common\db.py, 所在行为:49
INFO  root:__init__.py:64 执行的功能为:request_all, 功能的描述为:封装公共的请求方法, 所在的文件为:D:\PythonDoc\PycharmProjects\pythonProject1\InterfaceAutoTest\requests_method\requsts_method.py, 所在行为:26
ERROR  root:test_bpm.py:55 断言失败, 用例数据为{'ids': '1792775929462800384'}, 期望数据为:{'message': '删除维度成功'}, 服务器返回的数据为:{"state":true,"message":"删除维度成功!","value":""}
ERROR  root:__init__.py:70 执行的功能为:test_bpm, 功能的描述为:None, 所在的文件为:D:\PythonDoc\PycharmProjects\pythonProject1\InterfaceAutoTest\test_case\test_demo\test_bpm.py, 所在行为:20, 错误为:assert '删除维度成功' == '删除维度成功!'
- 删除维度成功!
? -
+ 删除维度成功
\ No newline at end of file
{"uuid": "be77f0e1-e8d5-40bb-89a3-12da1e5a3687", "befores": [{"name": "update_key", "status": "passed", "start": 1716266064178, "stop": 1716266064178}], "start": 1716266064178, "stop": 1716266064314}
\ No newline at end of file
{"name": "test_bpm[POST-http://120.46.172.186:8080/auth-application/json-case_data0-expect_data0-None-None-None]", "status": "passed", "attachments": [{"name": "log", "source": "5d775447-663c-4c49-a08e-fddb2f60a1ff-attachment.txt", "type": "text/plain"}, {"name": "stdout", "source": "77340d6f-a63a-4f45-8316-5bc6bcc04e6d-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "method", "value": "'POST'"}, {"name": "url", "value": "'http://120.46.172.186:8080/auth'"}, {"name": "mime", "value": "'application/json'"}, {"name": "case_data", "value": "{'username': 'admin', 'password': 'MTIzNDU2'}"}, {"name": "expect_data", "value": "{'username': '超级管理员', 'loginStatus': True, 'account': 'admin'}"}, {"name": "sql_data", "value": "None"}, {"name": "sql_type", "value": "None"}, {"name": "update_key", "value": "None"}], "start": 1716266061689, "stop": 1716266061750, "uuid": "581bc4c3-d910-434f-88ef-740fd15d4931", "historyId": "96afba48650f896ac9490fbca92319df", "testCaseId": "2de48645219de93dc51c83a53a42f952", "fullName": "test_case.test_demo.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_demo"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "DESKTOP-7B0J6EO"}, {"name": "thread", "value": "7108-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_demo.test_bpm"}]}
\ No newline at end of file
{"uuid": "7980bb1c-6543-425a-baac-721ad1445523", "befores": [{"name": "mime", "status": "passed", "start": 1716266064700, "stop": 1716266064700}], "start": 1716266064700, "stop": 1716266064804}
\ No newline at end of file
{"name": "test_bpm[DELETE-http://120.46.172.186:8080/api/demension/v1/dem/deleteDemByIds-query-case_data5-expect_data5-select ID_ FROM uc_demension WHERE `CODE_`=\"api_auto_test_add_dem\";-select-ids]", "status": "failed", "statusDetails": {"message": "AssertionError: assert '删除维度成功' == '删除维度成功!'\n \n - 删除维度成功!\n ? -\n + 删除维度成功", "trace": "self = <InterfaceAutoTest.test_case.test_mirZhang.test_bpm.TestBPM object at 0x000001FE8D632990>\nreq_fix = <InterfaceAutoTest.requests_method.requsts_method.RequestsMethod object at 0x000001FE8D8E0CB0>\ndb_fix = <InterfaceAutoTest.common.db.DB object at 0x000001FE8D9A0770>, method = 'DELETE'\nurl = 'http://120.46.172.186:8080/api/demension/v1/dem/deleteDemByIds', mime = 'query', case_data = {'ids': '1792775934550491136'}\nexpect_data = {'message': '删除维度成功'}, sql_data = 'select ID_ FROM uc_demension WHERE `CODE_`=\"api_auto_test_add_dem\";', sql_type = 'select'\nupdate_key = 'ids'\n\n @pytest.mark.parametrize(\"method, url, mime, case_data, expect_data, sql_data, sql_type, update_key\", excel.get_data())\n def test_bpm(self, req_fix, db_fix, method, url, mime, case_data, expect_data, sql_data, sql_type, update_key):\n \n # 判断sql语句类型是否为select\n if sql_type == \"select\":\n # 使用DB类对象调用select_func方法执行查询的sql语句,并接收查询结果\n select_result = db_fix.select_func(sql_data)\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 将更新之后的用例数据发送给服务器。\n \n # 判断sql语句的类型是否为delete\n elif sql_type == \"delete\":\n # 使用DB类对象调用delete_func方法执行删除的sql语句\n db_fix.delete_func(sql_data)\n # 将数据库中的数据删除完之后,再发送请求\n \n # 判断sql语句类型是否为select|delete或者为delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete_func方法执行删除的sql语句\n db_fix.delete_func(sql_data[\"delete\"])\n # 使用DB类对象调用select_func方法执行查询的sql语句,并接收查询结果\n select_result = db_fix.select_func(sql_data[\"select\"])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 将更新之后的用例数据发送给服务器。\n \n # 使用RequestsMethod对象发送请求\n res = req_fix.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n # 断言\n try:\n for key in expect_data:\n assert expect_data[key] == res.json().get(key)\n except AssertionError as e:\n logging.error(f\"断言失败, 用例数据为{case_data}, 期望数据为:{expect_data}, 服务器返回的数据为:{res.text}\")\n> raise e\n\ntest_case\\test_mirZhang\\test_bpm.py:55: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\nself = <InterfaceAutoTest.test_case.test_mirZhang.test_bpm.TestBPM object at 0x000001FE8D632990>\nreq_fix = <InterfaceAutoTest.requests_method.requsts_method.RequestsMethod object at 0x000001FE8D8E0CB0>\ndb_fix = <InterfaceAutoTest.common.db.DB object at 0x000001FE8D9A0770>, method = 'DELETE'\nurl = 'http://120.46.172.186:8080/api/demension/v1/dem/deleteDemByIds', mime = 'query', case_data = {'ids': '1792775934550491136'}\nexpect_data = {'message': '删除维度成功'}, sql_data = 'select ID_ FROM uc_demension WHERE `CODE_`=\"api_auto_test_add_dem\";', sql_type = 'select'\nupdate_key = 'ids'\n\n @pytest.mark.parametrize(\"method, url, mime, case_data, expect_data, sql_data, sql_type, update_key\", excel.get_data())\n def test_bpm(self, req_fix, db_fix, method, url, mime, case_data, expect_data, sql_data, sql_type, update_key):\n \n # 判断sql语句类型是否为select\n if sql_type == \"select\":\n # 使用DB类对象调用select_func方法执行查询的sql语句,并接收查询结果\n select_result = db_fix.select_func(sql_data)\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 将更新之后的用例数据发送给服务器。\n \n # 判断sql语句的类型是否为delete\n elif sql_type == \"delete\":\n # 使用DB类对象调用delete_func方法执行删除的sql语句\n db_fix.delete_func(sql_data)\n # 将数据库中的数据删除完之后,再发送请求\n \n # 判断sql语句类型是否为select|delete或者为delete|select\n elif sql_type == \"select|delete\" or sql_type == \"delete|select\":\n # 使用DB类对象调用delete_func方法执行删除的sql语句\n db_fix.delete_func(sql_data[\"delete\"])\n # 使用DB类对象调用select_func方法执行查询的sql语句,并接收查询结果\n select_result = db_fix.select_func(sql_data[\"select\"])\n # 将查询结果更新到用例数据中\n case_data[update_key] = select_result\n # 将更新之后的用例数据发送给服务器。\n \n # 使用RequestsMethod对象发送请求\n res = req_fix.request_all(req_method=method, req_url=url, req_mime=mime, case_data=case_data)\n # 断言\n try:\n for key in expect_data:\n> assert expect_data[key] == res.json().get(key)\nE AssertionError: assert '删除维度成功' == '删除维度成功!'\nE \nE - 删除维度成功!\nE ? -\nE + 删除维度成功\n\ntest_case\\test_mirZhang\\test_bpm.py:52: AssertionError"}, "attachments": [{"name": "log", "source": "da73a047-2ca5-4fea-8f33-10df4815a9ec-attachment.txt", "type": "text/plain"}], "parameters": [{"name": "method", "value": "'DELETE'"}, {"name": "url", "value": "'http://120.46.172.186:8080/api/demension/v1/dem/deleteDemByIds'"}, {"name": "mime", "value": "'query'"}, {"name": "case_data", "value": "{'ids': '需要更新'}"}, {"name": "expect_data", "value": "{'message': '删除维度成功'}"}, {"name": "sql_data", "value": "'select ID_ FROM uc_demension WHERE `CODE_`=\"api_auto_test_add_dem\";'"}, {"name": "sql_type", "value": "'select'"}, {"name": "update_key", "value": "'ids'"}], "start": 1716266064700, "stop": 1716266064795, "uuid": "fd71a75a-e7b5-4059-9a60-02567edcd680", "historyId": "10952631cb9d711f308724a66f981162", "testCaseId": "8c3ca9784f7a20f46f527b41c7204e5a", "fullName": "test_case.test_mirZhang.test_bpm.TestBPM#test_bpm", "labels": [{"name": "parentSuite", "value": "test_case.test_mirZhang"}, {"name": "suite", "value": "test_bpm"}, {"name": "subSuite", "value": "TestBPM"}, {"name": "host", "value": "DESKTOP-7B0J6EO"}, {"name": "thread", "value": "7108-MainThread"}, {"name": "framework", "value": "pytest"}, {"name": "language", "value": "cpython3"}, {"name": "package", "value": "test_case.test_mirZhang.test_bpm"}]}
\ No newline at end of file
{"uuid": "5561c67d-ee08-455c-936a-66cd0b158e37", "befores": [{"name": "update_key", "status": "passed", "start": 1716266064636, "stop": 1716266064636}], "start": 1716266064636, "stop": 1716266064694}
\ No newline at end of file
{"uuid": "631a143e-5e8b-4913-8d9b-a1a3c3b29e01", "befores": [{"name": "method", "status": "passed", "start": 1716266064512, "stop": 1716266064512}], "start": 1716266064512, "stop": 1716266064570}
\ No newline at end of file
INFO  root:__init__.py:64 执行的功能为:test_bpm, 功能的描述为:None, 所在的文件为:D:\PythonDoc\PycharmProjects\pythonProject1\InterfaceAutoTest\test_case\test_demo\test_bpm.py, 所在行为:20
INFO  root:__init__.py:64 执行的功能为:request_all, 功能的描述为:封装公共的请求方法, 所在的文件为:D:\PythonDoc\PycharmProjects\pythonProject1\InterfaceAutoTest\requests_method\requsts_method.py, 所在行为:26
INFO  root:test_bpm.py:58 断言成功, 用例数据为{'username': '', 'password': 'MTIzNDU2'}, 期望数据为:{'message': '账号或密码错误'}, 服务器返回的数据为:{"state":false,"message":"账号或密码错误","logId":"1792775925889253376"}
\ No newline at end of file
{"uuid": "6da44e85-2639-4725-bd70-1b0f16ecc544", "befores": [{"name": "sql_data", "status": "passed", "start": 1716266062683, "stop": 1716266062683}], "start": 1716266062683, "stop": 1716266062945}
\ No newline at end of file
{"uuid": "bf30b29d-ff6f-4150-98f5-5515c4c513ae", "befores": [{"name": "method", "status": "passed", "start": 1716266061930, "stop": 1716266061930}], "start": 1716266061930, "stop": 1716266062041}
\ No newline at end of file
{"uuid": "97decc39-81f5-4804-a842-5eca89b32597", "befores": [{"name": "sql_data", "status": "passed", "start": 1716266063435, "stop": 1716266063435}], "start": 1716266063435, "stop": 1716266063499}
\ No newline at end of file
{"uuid": "1628eca9-4817-473f-b801-e72020ea0509", "befores": [{"name": "method", "status": "passed", "start": 1716266064572, "stop": 1716266064572}], "start": 1716266064572, "stop": 1716266064633}
\ No newline at end of file
{"uuid": "e17d91ec-2cfe-4eba-a34f-75067a1f5473", "befores": [{"name": "url", "status": "passed", "start": 1716266061762, "stop": 1716266061762}], "start": 1716266061762, "stop": 1716266061820}
\ No newline at end of file
{"uuid": "e7b54ec5-1d51-4ecc-a5ad-9e52811102b5", "befores": [{"name": "url", "status": "passed", "start": 1716266062380, "stop": 1716266062380}], "start": 1716266062380, "stop": 1716266062475}
\ No newline at end of file
{"uuid": "036bd457-d7a8-42dd-b7a8-fb34dc0b5900", "children": ["581bc4c3-d910-434f-88ef-740fd15d4931", "52edb0c3-f79c-4f9f-b39e-840505aaaa6b", "5865cc97-0100-4f50-baf0-d802b847a88e", "7ca8e205-7276-4e8e-aa6d-091f33cea9c8", "b698b780-8d65-4547-b59a-15c907fd423c", "4b6e227a-a6b5-4373-89e5-dc33c89c3f86", "6b739108-5c5e-460f-b43d-443c50c03053", "1c07ec35-2968-4a37-a57f-c7aebe0f619d", "0fa2afa8-e8e5-4cda-9041-d6382f3a5ff5", "657735ba-abe6-4e47-83d1-5257f1dec4cf", "430bf4c5-20fe-4969-b2d4-96336165618b", "05acfa89-10bb-4e38-8b31-ae311635d923", "157ddd15-5b47-4aad-b9f0-ce0dcb4c578b", "afc3139b-f22b-4623-92b7-8eaa752c29a1", "7a795f8c-7ee8-46ba-82bf-ec72d0e93e6f", "4acca2cb-7f92-423e-a6b2-feb896823fcf", "2c0491c4-e537-4559-ac7e-17275e3343db", "646d97b2-d407-431a-af4a-499d6eed5dc0", "2cb9f57d-9708-44e9-819a-18c8ea339b14", "37176e94-1073-409a-a1cf-d96149d53a8e", "9d4d10e5-8f5d-4e53-847c-466e7763ebf6", "f9bda667-88bd-48c7-9f96-6f087f6a668b", "0ec47cd1-bf07-4aa8-9080-860fa17ab846", "f3af5eaf-92f8-492a-8b8c-ecb76549b054", "2cb03f99-d8bf-4e91-8bbd-fc8abd93aabb", "fd71a75a-e7b5-4059-9a60-02567edcd680"], "befores": [{"name": "_session_faker", "status": "passed", "start": 1716266061235, "stop": 1716266061385}], "start": 1716266061235, "stop": 1716266064809}
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment