【自动化测试中的自定义函数支持】方案+踩坑
自动化测试(包括其他平台),可能需要不同业务实现不同得处理逻辑,所以必须留一个口子,给不同得同学上传他自己实现得py文件,并且能执行能调用到他自己定义得函数。
方案:自己实现得脚本遵从固定得格式,上传到指定得包路径下,然后根据上传的文件名进行调用
a、脚本格式,如下,比如():
import time,json
import requests
import pymongo
import datetime
import hashlib
'''
tool_name 表示工具的名称,用于前端展示
paras 表示参数列表 每个参数 key表示形参名,show是页面展示的名字,desc是用户将鼠标放上去之后的说明,type表示html控件类型,表示工具的名称,用于前端展示
is_optional表示是否是可选项,默认都是必须的
results 表示返回结果项目
目前需要的控件类型与数据类型映射
input---字符串
select---字符串
checkbox---数组
radio---字符串
'''
tool_name = "XXXX工具"
input_params = [
{"key" : "env" , "show" : "环境" , "type" : "select" ,"value" : [{"text" : "sit" , "value" : "sit"} ,\
{"text" : "uat" , "value" : "uat"},{"text":"dev","value":"dev"}]},
{"key" : "id" , "show" : "值" , "type" : "input"},\
{"key" : "productCode","show":"产品代码","type":"select","value":[{"text":"PA03","value":"PA03"},\
{"text":"PA06","value":"PA06"}]},\
]
output_result = [
{"key" : "result" , "show" : "操作结果","type" : "input" },
{"key" : "errMsg","show":"错误信息","color":"red"},
]
def execute(params):
"""
实现具体的逻辑
:param params: params["env"]key需要和自定义的对应
:return:
"""
result = {"result": "", "errMsg": ""}
return result
b、脚本上传位置,固定在某个package
C、因为脚本的名字是自定义的,使用的时候,怎么导入这部分自定义的脚本并执行呢????
首先,需要在脚本上传的package中动态导入所有的py文件,__init__.py文件内容如下
import os
file_dir = r'D:\wesure\mytoolcode\pratice\script' # package所在路径
file_list = [i for i in os.listdir(file_dir) if i.endswith('.py') and not i.startswith('__init__')]
# 网上有说__import__可以动态导入,但是使用后,执行端还是找不到文件下的函数
for i in file_list:
py_name = i.strip('.py')
__import__(py_name)
# importlib.import_module 可以动态导入package下的所有py文件
import importlib
for i in file_list:
py_name = i.strip('.py')
module = importlib.import_module('script.'+ py_name)
D、__init__.py文件处理了动态加载所有文件之后,在函数调用部分,就可以根据自己上传的文件名,调用函数实现功能了,调用部分如下
import sys
sys.path.append(r".\script") # 将package的路径加载进来
import script # 将package的路径加载进来
params = {}
# 参数需要按自定义的py文件中参数格式定义
params["type"] = "openid"
params["env"] = "sit"
params["op"] = "query"
params["amount"] = "1000000"
params["id"] = "oqYLv0Hl09OUnT6r-1aMyxLPZJoY"
params["productCode"] = "PA06"
r = script.testparse2.execute(params) #testparse2为自定义的py文件的名字
print("r返回值:",r)