Templates 如何在Robot框架中将数据驱动的概念应用于用户关键字?

Templates 如何在Robot框架中将数据驱动的概念应用于用户关键字?,templates,keyword,robotframework,Templates,Keyword,Robotframework,假设已为以下操作定义了user关键字: 发送电子邮件 阅读电子邮件 FLAG_电子邮件 我想在机器人框架中随机执行这些动作10次。我怎样才能最好地做到这一点 例如,当我运行此测试几次时,Robot框架可以执行以下操作 运行1:发送电子邮件。阅读电子邮件、阅读电子邮件、标记电子邮件、阅读电子邮件、发送电子邮件、标记电子邮件、发送电子邮件、发送电子邮件、标记电子邮件、标记电子邮件、阅读电子邮件 运行2:阅读电子邮件、标记电子邮件、发送电子邮件、标记电子邮件、发送电子邮件、标记电子邮件、标记电子邮件、

假设已为以下操作定义了user关键字: 发送电子邮件 阅读电子邮件 FLAG_电子邮件 我想在机器人框架中随机执行这些动作10次。我怎样才能最好地做到这一点

例如,当我运行此测试几次时,Robot框架可以执行以下操作 运行1:发送电子邮件。阅读电子邮件、阅读电子邮件、标记电子邮件、阅读电子邮件、发送电子邮件、标记电子邮件、发送电子邮件、发送电子邮件、标记电子邮件、标记电子邮件、阅读电子邮件 运行2:阅读电子邮件、标记电子邮件、发送电子邮件、标记电子邮件、发送电子邮件、标记电子邮件、标记电子邮件、阅读电子邮件、发送电子邮件、标记电子邮件、标记电子邮件、发送电子邮件

我希望Robot框架具有类似的功能,但我似乎找不到任何方法在下面写“从3个可能的操作中选择1个”:

对于从1到10的循环: 从三种可能的操作中选择一种(发送电子邮件、阅读电子邮件、标记电子邮件)

尝试如下操作:

*** Settings ***

Library  String

*** Test Cases ***

Perform Test Once
    Perform Test

Perform Test Twice
    Perform Test
    Perform Test


*** Keywords ***

SEND_EMAIL
    Log SEND_EMAIL  WARN

READ_EMAIL
    Log READ_EMAIL  WARN

FLAG_EMAIL
    Log FLAG_EMAIL  WARN

Call Random
#   Generate Random String With Length 1 From Numbers 1,2 and 3
    ${random}=  Generate Random String  1  123
#   Call Keyword Randomly Using If/Else If/Else
    Run Keyword If  ${random} == 1  SEND_EMAIL
    ... ELSE IF     ${random} == 2  READ_EMAIL
    ... ELSE        FLAG_EMAIL

Perform Test
#   Call Keyword "Call Random" 10 Times Using FOR loop
    :FOR  ${number}  IN RANGE  0  10
    \   Call Random

您可以使用
Evaluate
关键字让python返回一个范围内的随机数。然后,您可以使用该数字从关键字列表中选择关键字。这样,编写一个从列表中随机选取一个关键字并运行该关键字的关键字就很容易了

一旦你做到了这一点,你可以使用一个循环来做你想做的很多次

例如:

*** Test Cases ***
| Run random email keywords ten times
| | :FOR | ${counter} | IN RANGE | 10
| | | Run one of these keywords randomly:
| | | ... | SEND_EMAIL | READ_EMAIL | FLAG_EMAIL


*** Keywords ***
| Run one of these keywords randomly:
| | [Arguments] | @{args}
| | [Documentation] | Run a random keyword from a list of keywords
| | 
| | # Get a random number to use to pick a keyword
| | ${index}= | Evaluate | random.randint(0, len(${args})-1) | random
| | 
| | # Get a keyword using the random number
| | ${keyword}= | Get variable value | ${args[${index}]}
| | 
| | # Run the keyword
| | Run keyword and continue on failure | ${keyword}

请注意,这将作为单个测试用例而不是10个测试用例出现在日志中。您可以选择让所有10个关键字都像示例中那样运行,也可以在第一个关键字失败时失败

这如何适用于数据驱动的概念?