我正在用 Python 开发一个测试引擎,但我遇到了一些与模块加载和全局函数相关的问题。
我正在创建的框架的主要思想是加载一个包含函数和注释“@thisisatest”的 Python 文件,以告知哪些函数是测试。我用 imp.load_source 加载这个文件,然后,我生成从加载的模块调用函数的线程。是这样的:
module = imp.load_source("test", "testdir/test.py")
function = module.testFunction
thread = threading.Thread(target=function)
thread.start()
无论如何,我想将此测试连接到“断言函数”,执行以下操作:
module = imp.load_source("test", "testdir/test.py")
module.__globals__.assertAndTerminate = assertionFunction
function = module.testFunction
thread = threading.Thread(target=function)
thread.start()
没关系。当 test.py 导入另一个在其中使用 assertAndTerminate 函数的模块时,问题就开始了。test.py 加载的模块完全不知道来自 test.py 的 __globals__ 并且不知道我说的 assertAndTerminate 是谁(这是有道理的,因为每个模块都有自己的 __globals__)。
有谁知道我可以为 test.py 模块和它在线程中加载的模块设置相同的 assertAndTerminate 函数的方法?我宁愿不在树中搜索进口,这可能吗?
有没有类似的东西Thread(target=function, global_vars=["assertAndTerminate":assertionFunction])
?