为什么即使Python关键字已经修改了字典,我在Robot中也没有修改过的字典?

HKN

这是我的机器人文件(robot-dictionary-tests.robot)

*** Settings ***
Documentation  Passing a dictionary object from Robot to Python and vice versa
Library        Utils.py

# To run:
# robot -L debug -d Results/  Tests/robot-dictionary-tests.robot


*** Keywords ***
Call Python To Modify The Dictionary
[arguments]  &{named}
modify dictionary   ${named}

*** Test Cases ***
Test Modifying Robot Dictionary in Python
    &{d} =          Create Dictionary       key=original
    &{expected} =   Create Dictionary       key=modified
    Call Python To Modify The Dictionary    &{d}
    Should Be Equal   ${d}      ${expected}

这是我的Utils.py:

from robot.api import logger

@keyword('modify dictionary')
def modify_dictionary(d):
   logger.debug(f'before modification, d: {d}')
   for key in d:
       d[key] = 'modified'
   logger.debug(f'after modification, d: {d}')

Python中的测试用例测试修改机器人字典失败:在此处输入图片说明

我的问题

即使我将字典d引用传递给@keyword('modify dictionary'),为何机器人测试仍会失败?

考特斯特拉

正如您所怀疑的那样,变量是通过引用进行更改的。据我所知,这更多与Python有关,而与Robot Framework有关。

将字典作为对象传递应该通过$ {VarName}而不是&{VarName}完成。关于字典变量的文档解释如下:

... Python字典或类似字典的对象可用作&{EXAMPLE}之类的字典变量。实际上,这意味着将字典中的各个项目作为命名参数传递给关键字

在下面的代码关键字Call Python To Modify The Dictionary更改关键字参数&{named}${named}而且关键字被调用&{d}${d}

*** Keywords ***
Call Python To Modify The Dictionary
    [arguments]  ${named}
    modify dictionary   ${named}

*** Test Cases ***
Test Modifying Robot Dictionary in Python
    &{d} =          Create Dictionary       key=original
    &{expected} =   Create Dictionary       key=modified
    Call Python To Modify The Dictionary    ${d}
    Should Be Equal   ${d}      ${expected}

导致:

Suite Executor: Robot Framework 3.1.2 (Python 3.7.0 on win32)
==============================================================================
SO003                                                                         
==============================================================================
SO003.Test :: Passing a dictionary object from Robot to Python and vice versa 
==============================================================================
Test Modifying Robot Dictionary in Python                             | PASS |
------------------------------------------------------------------------------
SO003.Test :: Passing a dictionary object from Robot to Python and... | PASS |
1 critical test, 1 passed, 0 failed
1 test total, 1 passed, 0 failed
==============================================================================
SO003                                                                 | PASS |
1 critical test, 1 passed, 0 failed
1 test total, 1 passed, 0 failed
==============================================================================

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么即使我修改了草稿,Immer却没有返回我新的状态?

为什么即使我更改了 src 图像也没有改变?

运行关键字(如果字典中存在关键字)(Robot Framework)

为什么Kotlin中没有并发关键字?

为什么我的字典没有在python中更新

为什么Dart中没有await关键字的async关键字功能?

为什么说即使我已经定义了您也没有定义

为什么我的 .php 网页背景颜色即使我更改了 CSS 样式表中的 background-color 属性也没有改变?

为什么在Python中没有Inf,-Inf和NaN关键字?

为什么这段代码在没有我告诉它的情况下修改了我的数组?

为什么即使我没有修改变量也会自动修改?

为什么关键字搜索比通过python字典迭代更快

为什么即使我没有在函数中点击yield关键字,为什么我仍然收到生成器

在字典关键字中定义python中的变量?

在 Javascript 中修改此关键字

在python中计算字典中关键字的数量

动态在字典中添加关键字

关键字和字典中的函数

在字典中搜索关键字

计算字典中的关键字

减少python中字典上带有关键字参数的函数列表

修改关键字与修改列关键字

在Python中修改字典的子集

为什么我没有得到ref关键字错误

为什么 return 关键字没有给我想要的结果?

如何使用列表中具有字典关键字的元素访问字典值?

为什么 Ghostscript 不能识别我修改过的“cidfmap”文件?

为什么Django不迁移我修改过的模型?

为什么即使修改了锁变量,我也会得到一个无限的while循环?