python globals()[]将字符串转化类,并通过反射执行方法

背景:

通过关键字设计ui自动化框架,将测试用例及其步骤存放到excel文件;其中步骤中包含了封装好的关键字方法,如打开浏览器、输入页面操作等,关键字保存的内容:具体类实例.方法

 

通过excel获取到关键字,关键字的类型是str,希望将关键字里面的类,转化为对应的类,再实例化这个类,配合反射getattr(类实例,具体方法),实现调起传入的关键字方法

如:

Fun = getattr(obj,open_browser)

Fun()  # 执行,有参数可传入参数 Fun(*args)

 

要解决问题: 将字符串,转化为类/class

使用:Globals()[字符串]:字符串即要转化的类的名称

 

使用方法:

以下操作都在文件A下操作

1、先使用globals(),在文件A中打印,可以查看到文件A中有引用的类

2、当前文件下有模块,转化为类成功,

转化为类之后,可以使用类调用其下的方法

3、文件A下没有导入模块datetime,转化为类失败

4、eval()和globals()一样可以转化类,前提是当前文件有引入这个模块

 

在当前文件A,引入模块datetime

解决报错方法

1、在要使用的文件里面,import 这个类

2、或者通过动态判断,是否存在这个类,如果不存在的话,使用python的动态导入,进行导入

if file_module not in sys.modules:
   module = importlib.import_module(file_module)

导入返回的类型为module

注意:

封装自动导入方法时,判断当前文件是否包含传入的文件的模块,这个判断条件要写在要操作的文件,不能和导入方法封装在一起,否则,导入的是封装导入文件里面,而不是当前操作的文件

参考:http://www.proyy.com/6982427777509097485.html

检查是否存在模块

https://www.cnpython.com/qa/31900

动态导入模块

https://blog.csdn.net/edward_zcl/article/details/88809212?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-88809212-blog-103053773.t5_searchtargeting_download_v1&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-88809212-blog-103053773.t5_searchtargeting_download_v1&utm_relevant_index=1

posted on 2022-08-19 16:06  刚刚好1  阅读(408)  评论(0编辑  收藏  举报

导航