• 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
    
  • 相关阅读:
    MySQL_创建数据库和表
    MySQL注释的3中方法
    子查询概念和分类
    弱网测试如何进行
    Fiddler_ 移动端抓包配置IOS&Android,Fiddler获取APP端的流量
    Fiddler_HTTPS 如何抓包和浏览器设置
    Fiddler_弱网测试
    Three.js 游戏操作案例
    flex 教程
    JS知识
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/16085180.html
Copyright © 2020-2023  润新知