Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过python文件向Robot框架发送命令行参数_Python_Python 3.x_Robotframework_Command Line Arguments - Fatal编程技术网

通过python文件向Robot框架发送命令行参数

通过python文件向Robot框架发送命令行参数,python,python-3.x,robotframework,command-line-arguments,Python,Python 3.x,Robotframework,Command Line Arguments,语言:python-3.7.3 机器人框架-3.1.1 熟练程度:新手 我想从命令提示符向python文件变量传递参数,然后通过添加python文件作为变量,从robot文件打印相同的参数 cmd (Variables) --> python file --> robot (print those variables) 但显然,这些尝试都没有产生预期的结果。任何指导都将不胜感激 注意:Robot和Python文件都在pycharm IDE的同一目录下 命令行:- 1st try:

语言:python-3.7.3 机器人框架-3.1.1 熟练程度:新手

我想从命令提示符向python文件变量传递参数,然后通过添加python文件作为变量,从robot文件打印相同的参数

cmd (Variables) --> python file --> robot (print those variables) 
但显然,这些尝试都没有产生预期的结果。任何指导都将不胜感激

注意:Robot和Python文件都在pycharm IDE的同一目录下

命令行:-

1st try: robot -d Report -V test.py Test_sample.robot|py test.py test@test.com test@123 QA1

2nd try: robot -d Report Test_sample.robot|py test.py test@test.com test@123 QA1

3rd try: robot -d Report --Variablefile py test.py Test_sample.robot|py test.py test@test.com test@123 QA1

4th try: robot -d Report -V | py test.py test@test.com test@123 QA1| Test_sample.robot
import sys

username = str(sys.argv[1])
password = str(sys.argv[2])
environment = str(sys.argv[3])
*** Settings ***
Library     SeleniumLibrary
Library     Collections
Variables  test.py

*** Test Cases ***
Pass variables from Python File

        log to console  The usr is: "${username}"
        log to console  The pwd is: "${password}"
        log to console  The env is: "${environment}"
Python:-

1st try: robot -d Report -V test.py Test_sample.robot|py test.py test@test.com test@123 QA1

2nd try: robot -d Report Test_sample.robot|py test.py test@test.com test@123 QA1

3rd try: robot -d Report --Variablefile py test.py Test_sample.robot|py test.py test@test.com test@123 QA1

4th try: robot -d Report -V | py test.py test@test.com test@123 QA1| Test_sample.robot
import sys

username = str(sys.argv[1])
password = str(sys.argv[2])
environment = str(sys.argv[3])
*** Settings ***
Library     SeleniumLibrary
Library     Collections
Variables  test.py

*** Test Cases ***
Pass variables from Python File

        log to console  The usr is: "${username}"
        log to console  The pwd is: "${password}"
        log to console  The env is: "${environment}"
机器人:-

1st try: robot -d Report -V test.py Test_sample.robot|py test.py test@test.com test@123 QA1

2nd try: robot -d Report Test_sample.robot|py test.py test@test.com test@123 QA1

3rd try: robot -d Report --Variablefile py test.py Test_sample.robot|py test.py test@test.com test@123 QA1

4th try: robot -d Report -V | py test.py test@test.com test@123 QA1| Test_sample.robot
import sys

username = str(sys.argv[1])
password = str(sys.argv[2])
environment = str(sys.argv[3])
*** Settings ***
Library     SeleniumLibrary
Library     Collections
Variables  test.py

*** Test Cases ***
Pass variables from Python File

        log to console  The usr is: "${username}"
        log to console  The pwd is: "${password}"
        log to console  The env is: "${environment}"
期望值:

usr是:test@test.com pwd是:test@123 环境署署长:QA1

实际值:

[ ERROR ] Unexpected error: OSError: [Errno 22] Invalid argument
Traceback (most recent call last):
  File "<<Dir path>>\python\python37-32\lib\site-packages\robot\utils\application.py", line 83, in _execute
    rc = self.main(arguments, **options)
  File "<<Dir path>>\python\python37-32\lib\site-packages\robot\run.py", line 439, in main
    result = suite.run(settings)
  File "<<Dir path>>\python\python37-32\lib\site-packages\robot\running\model.py", line 222, in run
    self.visit(runner)
  File "<<Dir path>>\python\python37-32\lib\site-packages\robot\model\testsuite.py", line 168, in visit
    visitor.visit_suite(self)
  File "<<Dir path>>\python\python37-32\lib\site-packages\robot\model\visitor.py", line 84, in visit_suite
    if self.start_suite(suite) is not False:
  File "<<Dir path>>\python\python37-32\lib\site-packages\robot\running\runner.py", line 83, in start_suite
    test_count=suite.test_count))
  File "<<Dir path>>\python\python37-32\lib\site-packages\robot\output\output.py", line 51, in start_suite
    LOGGER.start_suite(suite)
  File "<<Dir path>>\python\python37-32\lib\site-packages\robot\output\logger.py", line 200, in start_suite
    logger.start_suite(suite)
  File "<<Dir path>>\python\python37-32\lib\site-packages\robot\output\console\verbose.py", line 35, in start_suite
    self._writer.suite_separator()
  File "<<Dir path>>\python\python37-32\lib\site-packages\robot\output\console\verbose.py", line 104, in suite_separator
    self._fill('=')
  File "<<Dir path>>\python\python37-32\lib\site-packages\robot\output\console\verbose.py", line 110, in _fill
    self._stdout.write('%s\n' % (char * self._width))
  File "<<Dir path>>\python\python37-32\lib\site-packages\robot\output\console\highlighting.py", line 53, in write
    self.flush()
  File "<<Dir path>>\python\python37-32\lib\site-packages\robot\output\console\highlighting.py", line 66, in flush
    self.stream.flush()
Exception ignored in: <_io.TextIOWrapper name='<stdout>' mode='w' encoding='cp1252'>
OSError: [Errno 22] Invalid argument
[ERROR]意外错误:OSError:[Errno 22]参数无效
回溯(最近一次呼叫最后一次):
文件“\python\python37-32\lib\site packages\robot\utils\application.py”,第83行,在执行
rc=self.main(参数,**选项)
文件“\python\python37-32\lib\site packages\robot\run.py”,第439行,在main中
结果=suite.run(设置)
文件“\python\python37-32\lib\site packages\robot\running\model.py”,第222行,运行中
自我访问(跑步者)
文件“\python\python37-32\lib\site packages\robot\model\testsuite.py”,第168行,访问
访客。参观套房(自助)
文件“\python\python37-32\lib\site packages\robot\model\visitor.py”,第84行,在visit\u套件中
如果self.start_suite(suite)不是False:
文件“\python\python37-32\lib\site packages\robot\running\runner.py”,第83行,在start\u套件中
测试计数=套件。测试计数)
文件“\python\python37-32\lib\site packages\robot\output\output.py”,第51行,在start\u套件中
记录器启动套件(套件)
文件“\python\python37-32\lib\site packages\robot\output\logger.py”,第200行,在start\u套件中
记录器启动套件(套件)
文件“\python\python37-32\lib\site packages\robot\output\console\verbose.py”,第35行,在start\u套件中
self.\u writer.suite\u separator()
文件“\python\python37-32\lib\site packages\robot\output\console\verbose.py”,第104行,在suite\u分隔符中
自填充('='))
文件“\python\python37-32\lib\site packages\robot\output\console\verbose.py”,第110行,填充
self.\u stdout.write(“%s\n%”(字符*self.\u宽度))
写入文件“\python\python37-32\lib\site packages\robot\output\console\highlighting.py”,第53行
self.flush()
文件“\python\python37-32\lib\site packages\robot\output\console\highlighting.py”,第66行,刷新
self.stream.flush()
在中忽略异常:
OSError:[Errno 22]参数无效

对此我不太确定,我猜我们还应该将脚本的名称传递给sys.argv

下面示例中的sys.argv[0]是脚本传递参数的名称

import sys
print "This is the name of the script: ", sys.argv[0]
print "Number of arguments: ", len(sys.argv)
print "The arguments are: " , str(sys.argv)

参考资料:

在您写的评论中:

我的目标是从命令行传递凭据

Robot使用
--variable
(和
-v
)命令行选项支持该操作。使用此选项将覆盖任何导入的变量或robot文件中定义的变量

例如,您可以在测试本身内设置凭据的默认值:

*** Variables ***
${USER}         test@test.com
${PASSWORD}     test@123
${ENVIRONMENT}  QA1

*** Test cases ***
Example
    log to console  \n*****
    log to console  username: ${USER}
    log to console  password: ${PASSWORD}
    log to console  environment: ${ENVIRONMENT}
您可以使用
-v
--variable
从命令行修改这些值:

$ robot -v USER:bob -v PASSWORD:bob@123  -v ENVIRONMENT:QA2 ...
如果需要在python函数中访问这些变量而不传入,可以使用内置关键字获取值:

from robot.libraries.BuiltIn import BuiltIn
...
user = BuiltIn().get_variable_value('${USER}')

您知道robot有一种机制,可以通过--variable选项从命令行设置变量吗?您不需要从
sys.argv
@BryanOakley获取信息:是的,我试过使用-v(变量)和-v(变量文件)。如果我单独运行python文件,我可以打印变量,但问题只有在我尝试从robot文件打印相同的变量时才会开始,正如我前面所述。不清楚您正试图解决什么问题。可以使用--variable从命令行设置变量。您实际上是在问如何从python库打印robot值的值吗?或者你是想找出一种既能使用机器人又能不使用机器人的方法?@BryanOakley:如果我的描述不够清楚,那很抱歉。我的目标是从命令行传递凭据。因此,其他同事可以使用自己的凭据运行我的自动化脚本。所以对于操作,我决定首先从命令行获取凭据,将其存储在python中,并将其传递到robot文件以供进一步操作。现在,看起来python在执行完成后会清除变量。CMD行>>机器人-d报告测试_sample.robot&&py Methods.py Prasad Rajassekaran 33;;;结果::查询是:从表中选择*,其中username=-d和password=report显然是相同的结果此线程应该可以帮助您