httprunner 2.x学习20 - HttpRunner().run()连续执行2个不同项目,只会解析到第一个项目的debugtalk.py
前言
调用HttpRunner().run() 连续执行2个不同的项目时,只会解析到第一个项目的debugtalk.py。
问题描述
下版本信息:
操作系统类型: windows
Python 版本 3.6.8
HttpRunner 版本 2.5.7
问题描述
比如我有 test 和 xxx两个项目,每个项目分别有不同的debugtalk.py文件内容
xxx项目debugtalk.py
def user():
return "test5"
def get_userx():
return "testxc"
test项目debugtalk.py
def get_user():
return "test1"
运行命令
当我使用api方式调用执行用例,连续执行2个项目 xxx 和 test
from httprunner.api import HttpRunner
from pathlib import Path
p = Path(__file__)
p_project1 = p.parent.joinpath('xxx')
print(p_project1)
runner1 = HttpRunner(
# failfast=False,
save_tests=True,
log_level="DEBUG",
)
summary1 = runner1.run(path_or_tests=str(p_project1.joinpath('api').resolve()),
)
p_project2 = p.parent.joinpath('test')
print(p_project2)
runner2 = HttpRunner(
# failfast=False,
save_tests=True,
log_level="DEBUG",
)
summary2 = runner2.run(path_or_tests=str(p_project2.joinpath('api').resolve()),
)
此时生成的all.loaded.json 文件中可以看出
xxx项目加载的functions(第一次调用读到的debugtalk文件是对的)
{
"project_mapping":{
"env":{
"userxxx":"test",
"password":"123456"
},
"PWD":"D:\\soft\\hrun2_web_manager\\hrun2_web\\test",
"functions":{
"user":"<function user at 0x000002676F75C2F0>",
"get_userx":"<function get_userx at 0x000002677195B268>"
},
"test_path":"D:\\soft\\hrun2_web_manager\\hrun2_web\\test\\api"
},
text项目加载的functions (第二次读的还是第一个项目的debugtalk文件)
{
"project_mapping":{
"env":{
"userxxx":"test",
"password":"123456"
},
"PWD":"D:\\soft\\hrun2_web_manager\\hrun2_web\\xxx",
"functions":{
"user":"<function user at 0x000002676F75C2F0>",
"get_userx":"<function get_userx at 0x000002677195B268>"
},
"test_path":"D:\\soft\\hrun2_web_manager\\hrun2_web\\xxx\\api"
},
PWD 和 test_path 路径都是对的,但是functions 中读的始终是第一个项目的。
不知道如何才能让第二次执行项目读取对应项目的debugtalk文件内容?
有没大神能解答下,感激不尽!!!!
问题临时解决办法
找到问题原因了,load_debugtalk_functions(),导入importlib.import_module("debugtalk")后,
后面有同名称模块导入时,未重新加载,源代码在buildup.py
def load_debugtalk_functions():
""" load project debugtalk.py module functions
debugtalk.py should be located in project working directory.
Returns:
dict: debugtalk module functions mapping
{
"func1_name": func1,
"func2_name": func2
}
"""
# load debugtalk.py module
imported_module = importlib.import_module("debugtalk")
return load_module_functions(imported_module)
临时解决办法,在调用api之前,打个补丁替换下源代码里面的load_debugtalk_functions 函数
from httprunner.loader import buildup
import importlib
"""
打个补丁,解决 debugtalk 导入不更新问题
"""
def new_load_debugtalk_functions():
""" load project debugtalk.py module functions
debugtalk.py should be located in project working directory.
Returns:
dict: debugtalk module functions mapping
{
"func1_name": func1,
"func2_name": func2
}
"""
import sys
if sys.modules.get('debugtalk'):
imported_module = importlib.reload(sys.modules['debugtalk'])
else:
imported_module = importlib.import_module("debugtalk")
return buildup.load_module_functions(imported_module)
buildup.load_debugtalk_functions = new_load_debugtalk_functions
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2021-04-01 Python3 收集100+练习题(面试题笔试题)
2021-04-01 面试题-python3 找出列表中出现的所有连续数字
2021-04-01 面试题-python3 找出一个字符串中所有子串是回文的次数
2020-04-01 pytest文档33-Hooks函数获取用例执行结果(pytest_runtest_makereport)
2019-04-01 python测试开发django-43.session机制(登录/注销)