python - 通过 python 文件到 Robot 框架的命令行参数
问题描述
语言:python - 3.7.3 机器人框架- 3.1.1 熟练度:新手
我想从命令提示符将参数传递给 python 文件变量,然后想通过将 python 文件添加为变量来从机器人文件中打印相同的参数。
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
Python:-
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 env 是: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
解决方案
你在评论中写道:
我的目标是从命令行传递凭据。
Robot 支持使用--variable
(and -v
) 命令行选项。使用它会覆盖任何导入的变量或机器人文件中定义的变量。
例如,您可以在测试本身中为您的凭据设置默认值:
*** 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 函数中访问这些变量而不传递它们,您可以使用内置关键字get_variable_value来获取值:
from robot.libraries.BuiltIn import BuiltIn
...
user = BuiltIn().get_variable_value('${USER}')
推荐阅读
- java - 如何导入一个maven项目并使其成为另一个项目的模块
- generics - Kotlin 中 Reactor Mono 扩展函数的泛型问题
- redis - 如何使用 Apache NiFi RedistributedMapCacheClientService 在 Redis 上设置 TTL
- javascript - 如何从文本数组中替换句子中的多个单词?
- angular - 如何使用angular8中的反应形式将模型绑定到formbuilder
- pandas - 在 x 轴上按年绘制图表
- mysql - “SELECT...WHERE 1”是否使用索引停止 MySQL?
- java - 如何使用 Scenebuilder 在 AppBar 中插入图标 - JavaFX
- python - 在 pytorch 而不是两个 FOR 循环中执行此操作的矢量化方式是什么
- ios - Firebase iOS SDK 上的 FIRCLSReportManager 错误