【自动化测试中的自定义函数支持】方案+踩坑

自动化测试(包括其他平台),可能需要不同业务实现不同得处理逻辑,所以必须留一个口子,给不同得同学上传他自己实现得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)

 

 


 


 

 
 

 

posted @ 2021-09-23 11:33  yoyo008  阅读(125)  评论(0编辑  收藏  举报