Какие шаги следует за выражением «Должно быть верно $ {hex_value} == $ {0xFF}» в Robot Framework? - PullRequest
1 голос
/ 17 января 2020

Рассмотрим следующий код во встроенном library-tests.robot:

***Test Cases***
Use "Convert To Hex"

     ${hex_value} =         Convert To Hex  255   base=10  prefix=0x        # Result is 0xFF

     # Question: How does the following statement work step by step?
     Should Be True      ${hex_value}==${0xFF}           #: is ${0xFF} considered by Robot a string or a integer value in base 16?

     # To Answer My Own Question, here is an hypothesis solution:
     # For python to execute the expression:
     # Should Be True      a_python_expression_in_a_string_without_quotes      # i.e.   0xFF==255

     # To reach that target, i think of a 2 step solution:  
     # STEP 1: When a variable is used in the expressing using the normal ${hex_value} syntax, its value is replaced before the expression is evaluated.
     # This means that the value used in the expression will be the string representation of the variable value, not the variable value itself.
     Should Be True      0xFF==${0xFF}

     # Step 2: When the hexadecimal value 0xFF is given in ${} decoration, robot converts the value to its
     # integer representation 255 and puts the string representation of 255 into the the expression
     Should Be True      0xFF==255

Приведенный выше тест проходит со всеми его этапами. Я хочу уточнить у моего сообщества, правильное ли решение для двухэтапной гипотезы? Выполняет ли Robot точно go через эти шаги, прежде чем оценивать окончательное выражение 0xFF==255 в Python?

1 Ответ

2 голосов
/ 17 января 2020

Робот получает выражение в виде строки ${hex_value}==${0xFF}. Затем он выполняет подстановку переменных, получая строку 0xFF==255. Эта строка затем передается в python s eval .

Причина, по которой правая часть равна 255, описана в руководстве пользователя :

Можно также создавать целые числа из двоичных, восьмеричных и шестнадцатеричных значений, используя префиксы 0b, 0o и 0x соответственно. Синтаксис нечувствителен к регистру.

${0xFF} заменяется на 255, а ${hex_value} заменяется на то, что находится в этой переменной. В этом случае эта переменная содержит четыре байта 0xFF.

Таким образом, ${hex_value}==${0xFF} преобразуется в 0xFF==255, и это передается в eval в виде строки.

Другими словами, это точно так же, как если бы вы набрали eval("0xFF==255") в python интерактивной подсказке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...