httprunner 2.x学习20 - HttpRunner().run()连续执行2个不同项目,只会解析到第一个项目的debugtalk.py
Posted 上海-悠悠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
以上是关于httprunner 2.x学习20 - HttpRunner().run()连续执行2个不同项目,只会解析到第一个项目的debugtalk.py的主要内容,如果未能解决你的问题,请参考以下文章
httprunner 2.x学习18 - 报告validate显示LazyString($msg)问题解决
httprunner 2.x学习19 - 参数化显示不同的用例标题$title