使用 python 在 Squish 中导入文件

Importing file in Squish using python

如果两个文件具有同名函数,在脚本中使用 source(findFile()) 导入它们并调用它来访问 last.How 关联文件中的函数以访问特定文件中的函数文件?使用 python 压缩是否支持导入文件语法?

这里有一个参考[​​=14=]

script_1.py

def runner1():
    test.log("Hey")

script_2.py

def runner1():
    test.log("Bye")

脚本:

source(findFile("scripts","script_1.py"))
source(findFile("scripts","script_2.py"))


runner1()//function call

O/P:再见

注意:当我使用文件名导入时,它会抛出错误 "module not present"

当您依次评估文件内容时:

  1. 第一个source()定义了一个“runner1”函数
  2. 第二个 source() 用新的“runner1”函数覆盖它

根据 squish docs 您可以 import 模块。您可能需要通过在其中创建一个名为 __init__.py.

的空文件来将 scripts/ 目录标记为包

你应该可以做到

import scripts.script_1
import scripts.script_2
scripts.script_1.runner1()
scripts.script_2.runner1()

from scripts.script_1 import runner1 as foo1
from scripts.script_2 import runner1 as foo2
foo1()
foo2()

您甚至可以通过保留对第一个 runner1 函数的新引用来继续使用 source()。不过,它实在是太老套了,所以如果你能做到的话,更喜欢 import 解决方案。

source(findFile("scripts","script_1.py"))
foo = runner1
source(findFile("scripts","script_2.py"))

foo()     # runs runner1 from script_1
runner1() # runs runner1 from script_2

source()导致指定文件中的"symbols"(函数、变量)被加载到test.py文件的namespace/scope中。这意味着 source() 是解决此问题的错误工具。

(使用 Orip 展示的技巧,在第一个 source() 之后将函数分配给另一个 symbol/name 我建议不要这样做,因为其他依赖所需函数的代码在初始名称下可用最终会调用错误的函数。)

使用 Python 的导入语句,您可以通过将文件视为 Python 模块来实现函数位于单独的命名空间中。为此,您必须将包含所需文件的目录路径包含到 Python 自己的 "search path" - sys.path:

suite_mine/tst_testcase1/test.py 的内容:

# -*- coding: utf-8 -*-

import os.path
import sys

# Add path to our modules to the Python search path at runtime:
sys.path.append(os.path.dirname(findFile("scripts", "file1.py")))
sys.path.append(os.path.dirname(findFile("scripts", "file2.py")))

# Now import our modules:
import file1
import file2


def main():
    # Access functions in our modules:
    file1.do_it()
    file2.do_it()

suite_mine/tst_testcase1/file1.py 的内容:

# -*- coding: utf-8 -*-

import test


def do_it():
    test.log("file1.py")

suite_mine/tst_testcase1/file2.py的内容:

# -*- coding: utf-8 -*-

import test


def do_it():
    test.log("file2.py")

生成的日志条目:

file1.py
file2.py