Как вы и подозревали, переменные приведены по ссылке и, следовательно, изменены. Насколько мне известно, это больше связано с Python, чем с Robot Framework.
Передача словаря как объекта должна осуществляться через $ {VarName}, а не & {VarName}. Документация по словарным переменным объясняет это следующим образом:
... a 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
==============================================================================