首页 > 编程语言 >python加载库

python加载库

时间:2024-03-03 22:11:59浏览次数:24  
标签:__ name python commonlib self module libraries 加载

# testInstance.py  
  
import importlib  
import sys  
  
class TestInstance:  
    def __init__(self, projectName):  
        self.projectName = projectName  
        self.lib = self.load_libraries()  
  
    def load_libraries(self):  
        # Import the configuration module  
        import libconfig  
        libraries = {}  
          
        # Append the library paths to sys.path  
        sys.path.append("library/commonlib")  
        sys.path.append("library/projectlib")  
          
        # Load libraries in the specified order  
        for lib_name in libconfig.libraries_order:  
            # Import the library module  
            module = importlib.import_module(lib_name)  
              
            # Add the module's attributes to the libraries dict  
            libraries.update({attr_name: getattr(module, attr_name) for attr_name in dir(module) if not attr_name.startswith('_')})  
          
        # Create a namespace-like object to hold the classes/functions from all libraries  
        class LibraryNamespace:  
            def __getattr__(self, item):  
                # First check if the attribute exists in the current project's libraries  
                if item in libraries:  
                    return libraries[item]  
                # If not found, check commonlib  
                commonlib_module = importlib.import_module(f"commonlib.{item}")  
                return getattr(commonlib_module, item)  
  
        # Return the namespace object  
        return LibraryNamespace()  
  
# Example usage  
if __name__ == '__main__':  
    # Assume the current project name is "projectlib"  
    projectName = "projectlib"  
    test = TestInstance(projectName)  
      
    # Call greet function from libA without explicitly checking for its existence  
    # The framework handles the fallback logic if the function is not found in the project's library  
    print(test.libA.greet("World"))

在这个修改后的代码中,load_libraries方法现在将所有库的属性合并到一个字典中,而LibraryNamespace类则覆盖了__getattr__方法以处理属性的动态查找。当尝试访问test.libA.greet时,如果greet函数在项目的库中不存在,__getattr__方法会尝试从commonlib库中导入libA模块并获取greet函数。

这意味着,脚本中不需要进行任何显式的检查来确定函数的位置。当调用test.libA.greet("World")时,如果函数在项目库中不存在,框架将自动回退到commonlib库并尝试调用该函数。

请确保libconfig.libraries_order列表中的库加载顺序符合你的要求,即项目库应该在commonlib之前,这样项目库中的函数将优先被调用。如果项目库中没有找到函数,那么commonlib中的函数将被调用。

标签:__,name,python,commonlib,self,module,libraries,加载
From: https://www.cnblogs.com/shunguo/p/18050857

相关文章

  • python接口自动化系列(10):保存全局变量
     本系列汇总,请查看这里:https://www.cnblogs.com/uncleyong/p/18033074实现目标如果后续有请求依赖本次请求的响应结果,那么把依赖数据保存到全局变量,比如token 安装模块jsonpath用于解析json数据pipinstalljsonpath 修改工具类global_variable_tool.py添加方法,用于......
  • python接口自动化系列(11):断言请求结果
     本系列汇总,请查看这里:https://www.cnblogs.com/uncleyong/p/18033074实现目标解析测试数据中要断言的字段,进行断言,判断用例是否成功。 添加工具模块utils下添加assert_tool.py#!/usr/bin/envpython#-*-coding:utf-8-*-#@Author:韧#@wx:ren168632201#@Blo......
  • python接口自动化系列(12):集成allure
     本系列汇总,请查看这里:https://www.cnblogs.com/uncleyong/p/18033074实现目标获取到测试结果后,把结果展示在allure报告中,allure报告非常美观,是目前主流。本篇我们先生成json格式的测试结果数据。 安装allure插件pipinstallallure-pytest 修改测试类动态添加allur......
  • python接口自动化系列(09):发送http请求
     本系列汇总,请查看这里:https://www.cnblogs.com/uncleyong/p/18033074实现目标发送http请求,获取服务器响应内容 关于被测试接口配套练习环境(含相关接口):https://www.cnblogs.com/uncleyong/p/17165143.html 安装模块requests提供了方便易用的HTTP请求功能pipinstall......
  • python接口自动化系列(06):解析初始化sql
     本系列汇总,请查看这里:https://www.cnblogs.com/uncleyong/p/18033074实现目标将initSql中常用变量占位符(下图划线的)替换为实际值。 添加替换变量工具模块substitution_tool.py#!/usr/bin/envpython#-*-coding:utf-8-*-#@Author:韧#@wx:ren168632201#@Bl......
  • python接口自动化系列(03):创建自动化框架项目
     本系列汇总,请查看这里:https://www.cnblogs.com/uncleyong/p/18033074实现目标搭建能基于pytest运行测试用例的项目。 创建项目1、输入项目名称2、选择项目位置3、自定义虚拟环境(默认即可) 创建完成 安装pytest补充:python虚拟环境操作,详见:https://www.cnblogs.c......
  • python接口自动化系列(04):读取数据文件并注入到测试方法
     本系列汇总,请查看这里:https://www.cnblogs.com/uncleyong/p/18033074实现目标把用例yaml文件中数据读取出来,依次把每条用例数据传给测试方法。 安装模块安装操作yaml的模块pyyamlpipinstallpyyaml 测试数据文件放data目录case.yaml 内容:----epic:全栈测......
  • python接口自动化系列(05):获取常用变量
     本系列汇总,请查看这里:https://www.cnblogs.com/uncleyong/p/18033074实现目标获取常用变量,方便后面解析初始化sql或者请求参数的时候将常用变量占位符替换为实际值。 添加常用变量数据文件data目录下创建variable.yaml 内容:---'#{username}':tester'#{password_......
  • python接口自动化系列(02):yaml测试数据文件设计
     本系列汇总,请查看这里:https://www.cnblogs.com/uncleyong/p/18033074实现目标对测试数据进行设计,数据设计决定了后续读取数据的代码该如何实现。 关于被测试接口配套练习环境(含相关接口):https://www.cnblogs.com/uncleyong/p/17165143.html 常用数据用例数据频繁使用......
  • python接口自动化系列(01):自动化测试框架设计
     本系列汇总,请查看这里:https://www.cnblogs.com/uncleyong/p/18033074先看下最终效果(gif) 报告总览 前言之前分享了java自动化(详见:https://www.cnblogs.com/uncleyong/p/15867903.html),部分小伙伴建议分享一个python版本,安排!!!当然,通过测试招聘要求大家也可以发现,目前......