优化测试脚本。
This commit is contained in:
parent
506c12a946
commit
f0e38e9c31
|
@ -775,3 +775,9 @@
|
|||
2023-06-16 02:14:44 | INFO | | called get_init | args: ('E:\\apitest\\cases\\cases\\test_api.xlsx',) kwargs:{}
|
||||
2023-06-16 02:14:44 | ERROR | | called get_init | error: 读取excel中初始化数据异常: "There is no item named 'xl/sharedStrings.xml' in the archive"
|
||||
2023-06-16 02:14:44 | INFO | -----------分割线-----------
|
||||
2023-06-16 02:24:12 | INFO | -----------分割线-----------
|
||||
2023-06-16 02:24:12 | INFO | | called load_and_execute_script | args: ('E:\\apitest\\scripts', 'request_script_sheetname_id.py', 'setup', {'y': 'z'}) kwargs:{}
|
||||
2023-06-16 02:24:12 | INFO | -----------分割线-----------
|
||||
2023-06-16 02:24:12 | INFO | | called load_script | args: ('E:\\apitest\\scripts\\request_script_sheetname_id.py',) kwargs:{}
|
||||
2023-06-16 02:24:12 | INFO | | end called load_script | return:<module 'request_script_sheetname_id.py' from 'E:\\apitest\\scripts\\request_script_sheetname_id.py'>, duration:0.000835s
|
||||
2023-06-16 02:24:12 | INFO | | end called load_and_execute_script | return:{'y': 'z'}, duration:0.003896s
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
2023-06-16 02:22:02,537-ERROR-logger.py-[ line:62 ] - 日志信息:读取excel中初始化数据异常: "There is no item named 'xl/sharedStrings.xml' in the archive"
|
||||
2023-06-16 02:26:50,713-ERROR-logger.py-[ line:62 ] - 日志信息:读取excel中初始化数据异常: "There is no item named 'xl/sharedStrings.xml' in the archive"
|
|
@ -0,0 +1,2 @@
|
|||
2023-06-16 02:22:02,534-INFO-logger.py-[ line:64 ] - 日志信息:读取测试用例excel文件:E:\apitest\cases\cases\test_api.xlsx
|
||||
2023-06-16 02:26:50,710-INFO-logger.py-[ line:64 ] - 日志信息:读取测试用例excel文件:E:\apitest\cases\cases\test_api.xlsx
|
|
@ -1,6 +1,8 @@
|
|||
import importlib.util
|
||||
import os
|
||||
import sys
|
||||
|
||||
sys.path.append('../../common')
|
||||
from common.utils import logger
|
||||
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@ import sys
|
|||
|
||||
sys.path.append("../../../")
|
||||
sys.path.append("../../common")
|
||||
|
||||
from common.config import Config
|
||||
from common.validation.validator import Validator
|
||||
from common.file_handling.get_excel_init import get_init
|
||||
|
@ -9,7 +10,7 @@ from common.data_extraction.dependent_parameter import DependentParameter
|
|||
from common.database.mysql_client import MysqlClient
|
||||
from common.utils.mylogger import MyLogger
|
||||
from common.dependence import Dependence
|
||||
from common.validation import loaders
|
||||
|
||||
|
||||
test_file = Config.test_api # 获取 excel 文件路径
|
||||
excel_handle, init_data, test_case = get_init(test_file)
|
||||
|
|
|
@ -6,30 +6,15 @@ from ddt import ddt, data
|
|||
|
||||
sys.path.append("../../../")
|
||||
sys.path.append("../../common")
|
||||
from common.config import Config
|
||||
|
||||
from common.file_handling.get_excel_init import get_init
|
||||
from common.data_extraction.dependent_parameter import DependentParameter
|
||||
from common.data_extraction.data_extractor import DataExtractor
|
||||
from common.crypto.encryption_main import do_encrypt
|
||||
from common.database.do_mysql import DoMysql
|
||||
from common.utils.http_client import http_client
|
||||
from common.utils.mylogger import MyLogger
|
||||
from test_script.automation import *
|
||||
from common.validation import loaders
|
||||
from common.dependence import Dependence as dep
|
||||
from common.validation.validator import Validator
|
||||
from common import bif_functions
|
||||
from common.crypto.encryption_main import do_encrypt
|
||||
from common.data_extraction.data_extractor import DataExtractor
|
||||
from common.http_client.http_client import http_client
|
||||
from common.utils.load_and_execute_script import load_and_execute_script
|
||||
|
||||
test_file = Config.test_api # 获取 excel 文件路径
|
||||
excel_handle, init_data, test_case = get_init(test_file)
|
||||
databases = init_data.get('databases') # 获取数据库配置信息
|
||||
mysql = DoMysql(databases) # 初始化 mysql 链接
|
||||
dep.set_dep(eval(init_data.get("initialize_data"))) # 初始化依赖表
|
||||
dep_par = DependentParameter() # 参数提取类实例化
|
||||
log = MyLogger()
|
||||
host = init_data.get('host', "") + init_data.get("path", "")
|
||||
|
||||
|
||||
@ddt
|
||||
class TestProjectApi(unittest.TestCase):
|
||||
|
@ -37,10 +22,10 @@ class TestProjectApi(unittest.TestCase):
|
|||
|
||||
@classmethod
|
||||
def setUpClass(cls) -> None:
|
||||
log.info("开始加载内置方法...")
|
||||
logger.info("开始加载内置方法...")
|
||||
loaders.set_bif_fun(bif_functions) # 加载内置方法
|
||||
log.info("内置方法加载完成")
|
||||
log.info(f"所有用例执行开始...")
|
||||
logger.info("内置方法加载完成")
|
||||
logger.info(f"所有用例执行开始...")
|
||||
|
||||
@data(*test_case) # {"":""}
|
||||
def test_api(self, item): # item = {測試用例}
|
||||
|
@ -61,17 +46,18 @@ class TestProjectApi(unittest.TestCase):
|
|||
keys = item.pop("正则变量")
|
||||
deps = item.pop("绝对路径表达式")
|
||||
jp_dict = item.pop("Jsonpath")
|
||||
print(f"当前的:{item}")
|
||||
|
||||
if not item.get("Run") or item.get("Run").upper() != "YES":
|
||||
log.info(f"测试用例:{item_id} 不执行,跳过!!!")
|
||||
logger.info(f"测试用例:{item_id} 不执行,跳过!!!")
|
||||
return
|
||||
|
||||
if sleep_time:
|
||||
try:
|
||||
time.sleep(int(sleep_time))
|
||||
log.info(f"暂停:{sleep_time}")
|
||||
logger.info(f"暂停:{sleep_time}")
|
||||
except Exception as e:
|
||||
log.info(f'暂停时间必须是数字')
|
||||
logger.info(f'暂停时间必须是数字')
|
||||
raise e
|
||||
|
||||
# 首先执行sql替换,将sql替换为正确的sql语句
|
||||
|
@ -79,17 +65,16 @@ class TestProjectApi(unittest.TestCase):
|
|||
|
||||
try:
|
||||
execute_sql_results = mysql.do_mysql(sql)
|
||||
log.info(f'sql 执行成功:{execute_sql_results}')
|
||||
logger.info(f'sql 执行成功:{execute_sql_results}')
|
||||
if execute_sql_results and sql_variable:
|
||||
# 执行sql数据提取
|
||||
DataExtractor(execute_sql_results).substitute_data(jp_dict=sql_variable)
|
||||
log.info('sql 提取成功')
|
||||
logger.info('sql 提取成功')
|
||||
if method == "SQL" and mysql:
|
||||
return
|
||||
except Exception as e:
|
||||
log.error(f'执行 sql 失败:{sql},异常信息:{e}')
|
||||
logger.error(f'执行 sql 失败:{sql},异常信息:{e}')
|
||||
raise e
|
||||
|
||||
# 拼接动态代码段文件
|
||||
prepost_script = f"prepost_script_{sheet}_{item_id}.py"
|
||||
item = load_and_execute_script(Config.SCRIPTS_DIR, prepost_script, "setup", item)
|
||||
|
@ -123,7 +108,7 @@ class TestProjectApi(unittest.TestCase):
|
|||
'headers': headers
|
||||
}
|
||||
response = http_client(host, url, method, **kwargs)
|
||||
result_tuple = Validator().run_validate(expected, response.json()) # 执行断言 返回结果元组
|
||||
result_tuple = validator.run_validate(expected, response.json()) # 执行断言 返回结果元组
|
||||
self.assertNotIn("FAIL", result_tuple, "FAIL 存在结果元组中")
|
||||
try:
|
||||
# 提取响应
|
||||
|
@ -131,7 +116,7 @@ class TestProjectApi(unittest.TestCase):
|
|||
# 执行后置代码片段
|
||||
load_and_execute_script(Config.SCRIPTS_DIR, prepost_script, "teardown", response)
|
||||
except Exception as err:
|
||||
log.error(f"提取响应失败:{sheet}_{item_id}_{name}_{description}"
|
||||
logger.error(f"提取响应失败:{sheet}_{item_id}_{name}_{description}"
|
||||
f"\nregex={regex};"
|
||||
f" \nkeys={keys};"
|
||||
f"\ndeps={deps};"
|
||||
|
@ -139,7 +124,7 @@ class TestProjectApi(unittest.TestCase):
|
|||
f"\n{err}")
|
||||
except Exception as e:
|
||||
result = "FAIL"
|
||||
log.error(f'异常用例: {sheet}_{item_id}_{name}_{description}\n{e}')
|
||||
logger.error(f'异常用例: {sheet}_{item_id}_{name}_{description}\n{e}')
|
||||
raise e
|
||||
finally:
|
||||
response_value = response.text if response is not None else str(response)
|
||||
|
@ -150,7 +135,7 @@ class TestProjectApi(unittest.TestCase):
|
|||
|
||||
@classmethod
|
||||
def tearDownClass(cls) -> None:
|
||||
log.info(f"所有用例执行完毕")
|
||||
logger.info(f"所有用例执行完毕")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
Loading…
Reference in New Issue