前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >httprunner 2.x学习20 - HttpRunner().run()连续执行2个不同项目,debugtalk读取问题

httprunner 2.x学习20 - HttpRunner().run()连续执行2个不同项目,debugtalk读取问题

作者头像
上海-悠悠
发布2022-04-02 13:15:05
3730
发布2022-04-02 13:15:05
举报

前言

调用HttpRunner().run() 连续执行2个不同的项目时,只会解析到第一个项目的debugtalk.py。

问题描述

下版本信息: 操作系统类型: windows Python 版本 3.6.8 HttpRunner 版本 2.5.7

问题描述

比如我有 test 和 xxx两个项目,每个项目分别有不同的debugtalk.py文件内容

xxx项目debugtalk.py

代码语言:javascript
复制
def user():
    return "test5"

def get_userx():
    return "testxc"

test项目debugtalk.py

代码语言:javascript
复制
def get_user():
    return "test1"

运行命令

当我使用api方式调用执行用例,连续执行2个项目 xxx 和 test

代码语言:javascript
复制
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文件是对的)

代码语言:javascript
复制
{
    "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文件)

代码语言:javascript
复制
{
    "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

代码语言:javascript
复制
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 函数

代码语言:javascript
复制
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

2022年第 1 期《Python 测试平台开发》课程

2022年第 10 期《python接口web自动化+测试开发》课程,2月13号开学!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 问题描述
  • 问题描述
  • 运行命令
  • 问题临时解决办法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档