使用Robot Framework运行接受参数的python脚本



假设我有一个位于C:script.py的python脚本。这是脚本的内容:

def func1(arg1):
print (arg1)
if __name__ == "__main__":
func1(arg1)

现在,我想使用Robot Framework运行这个脚本。我正在考虑做这样的事情:

*** Test Cases ***
Test1
Run Process    python     C:script.py ${arg1}

但它不起作用。如何运行此脚本并向其传递参数?

我同意@Helio的观点,将python程序作为关键字将是更快、更容易实现的解决方案。在库下的设置部分导入py脚本。

${result}= func1 arg1

这里func1充当一个关键字来做它作为一个函数应该做的任何事情。然后结果变量将捕获输出,然后可以将其记录或打印到控制台。

如果你发布了一个我们可以实验的真实例子,那就更好了:

但它不起作用。

正如您在Run Process的文档中所看到的,您必须重定向流程的输出,这样您才能看到它(如果这是您的问题(。

以下是一个基于您的工作示例:

import sys
arg1 = sys.argv[1] or None
def func1(argument):
print(argument)
if __name__ == "__main__":
func1(arg1)
*** Settings ***
Library           Process
*** Test Cases ***
Test1
Run Process    python    C:/script.py    This is my argument to script.    stdout=C:/script_output.log

但也许最好的解决方案是将脚本作为关键字。

首先,您必须修改脚本以使用命令行参数,这些参数可以在sys.argv.中找到

例如:

import sys
def func1(arg1):
print (arg1)
if __name__ == "__main__":
func1(sys.argv[1])

接下来,您必须确保script.py和参数之间有两个或多个空格

Run Process    python     C:\script.py  ${arg1}

当然,您需要定义什么是${arg1},而您在示例中没有这样做。

就这么简单:您的python文件,test.py

def printme(x, y):   
with open("output.txt", "a") as f:        
f.write("n ===> " + x + " / " + y)

你的机器人文件:

*** Settings ***
Library    test.py

*** Test Cases ***
Test        
printme   Hello World   second argument

你得到一个文件output.txt,带有:

===>Hello World/第二个参数

你可以有变量,任何你想要的,而不是一个简单的字符串。你可以有几个论点,它们之间至少有两个空格。

最新更新