如何在机器人框架中将列表连接为字符串

6

我正在使用机器人框架创建字符串的md5哈希值,并且希望将该哈希值拆分并仅保留前32个字符。

我尝试使用列表然后剪切列表,但是我无法将列表连接回字符串。这是我的代码:

${test1}=    Md 5    ${pwd_arg}
${test3}=    Hexdigest
${test4}=    Convert To List    ${test3}
${test5}=    Convert To String    ${test4}[0:32]
${test6}=    Catenate    SEPARATOR=    ${test4}

这里是日志,基本上我可以截取列表,但我无法将列表中的所有元素连接成字符串。
INFO : ${test3} = 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8
INFO : ${test4} = ['0', 'e', '5', '7', '5', '1', 'c', '0', '2', '6', 'e', '5', '4', '3', 'b', '2', 'e', '8', 'a', 'b', '2', 'e', 'b', '0', '6', '0', '9', '9', 'd', 'a', 'a', '1', 'd', '1', 'e', '5', 'd', 'f', '4', '7',...
INFO : ${test5} = ['0', 'e', '5', '7', '5', '1', 'c', '0', '2', '6', 'e', '5', '4', '3', 'b', '2', 'e', '8', 'a', 'b', '2', 'e', 'b', '0', '6', '0', '9', '9', 'd', 'a', 'a', '1']
INFO : ${test6} = ['0', 'e', '5', '7', '5', '1', 'c', '0', '2', '6', 'e', '5', '4', '3', 'b', '2', 'e', '8', 'a', 'b', '2', 'e', 'b', '0', '6', '0', '9', '9', 'd', 'a', 'a', '1']
FAIL : b1404d6cc07abe3805e5960771c0ba72 != 0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8
Ending test

感谢您的帮助。

不熟悉机器人框架,但这会将列表返回为字符串吗?"".join(${test4}[0:32]) - LearningNoob
Robot Framework 与关键字一起工作,我实际上正在寻找这种类型的关键字(join)。 - Lou Gyde
1
使用 Evaluate 似乎可以调用 Python 的 join 方法。${test5}= Evaluate "".join(${test4}[0:32]) - LearningNoob
2个回答

4

首先,在机器人中切片列表有一种更简单的方法。其次,Convert to string在您的代码中的使用方式并非您所期望的。

以下是实现您想要做的事情的代码:

${test4}=                 Convert To List      ${test3}
${test5}=                 Get Slice From List  ${test4}            0     32
${convertListToString}=   Evaluate             "".join(${test5})
${test6}=                 Catenate             SEPARATOR=   ${convertListToString}    ${otherStringToCatenate} 

评估 "".join(${test5}) 将把列表转换为字符串,然后可以使用 Catenate 关键字将其连接到其他字符串中。

1

针对这个问题 - 如何将列表成员连接成字符串。
你已经接近了答案 - 关键字Catenate非常适合这个问题。你需要传递不同的值来连接 - 但是你只传递了一个单独的列表变量。最简单的方法是一次性获取所有值(即列表成员),使用格式@{a list variable} - 使用@前缀,框架将解压缩列表 - 并将所有成员作为单独的参数传递。所以如果您的列表变量是${test4},则调用将如下:

${test6}=    Catenate    SEPARATOR=${EMPTY}    @{test4}

(${EMPTY}是系统变量,表示空字符串 "",更明确地说是一个空字符串。)

这与Python的 "".join(an_iterable)非常相似 - 实际上该关键字的实现就是这样做的。


除了问题以外,看起来你的最终目标是从字符串中获取前32个字符。如果是这样,有一个更加直接的方法可以做到 - 只需使用关键字 获取子字符串; 就像这样:
${substring}=    Get Substring    ${test3}    0    32

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接