针对Robot Framework中的单个条件运行For循环

时间:2018-03-19 10:25:37

标签: robotframework

我正在解析excel文件[session_data,csv],excel文件如下所示:

Case, StartTime, EndTime
Case_1=Covering 3 time-slots,T00:00:00,T05:00:00
Case_2=Covering multiple time-slots,T00:15:00
Case_3=Covering one time-slot,T00:18:00,T00:47:00

我正在解析文件如下:

${LIST}=  Process Data File  ${CURDIR}/session_data.csv   
     : FOR    ${LINE}    IN    @{LIST}
         \    Log    ${LINE}
         \    @{COLUMNS}=    Split String    ${LINE}    separator=,
         \    ${TESTCASE}=    Get From List    ${COLUMNS}    0
         \    ${STARTTIME}=    Get From List    ${COLUMNS}    1
         \    ${ENDTIME}=    Get From List    ${COLUMNS}    2

现在我不需要为每个案例运行循环,但仅针对我的行(案例列)以“Case_2”或“Case_3”开头的单个案例

如何添加该条件?

2 个答案:

答案 0 :(得分:0)

你可以通过两种方式实现这一目标;第一个是过滤Process Data File关键字中的记录,这超出了此问题的范围。

另一种方法是强制FOR循环继续 - 例如在某种情况下不再执行任何陈述。这是通过使用关键字this project并提供条件来完成的 - 在这种情况下,拆分的第一个结果是以该字符串开头。

: FOR    ${LINE}    IN    @{LIST}
     \    Log    ${LINE}
     \    @{COLUMNS}=    Split String    ${LINE}    separator=,
     \    ${TESTCASE}=    Get From List    ${COLUMNS}    0
     \    Continue For Loop If   not("""${TESTCASE}""".startswith("Case_2") or """${TESTCASE}""".startswith("Case_3"))
     # the following lines will be ran only if the ${TESTCASE} value starts with any of those strings
     \    ${STARTTIME}=    Get From List    ${COLUMNS}    1
     \    ${ENDTIME}=    Get From List    ${COLUMNS}
     # the rest of your processing logic

条件not("""${TESTCASE}""".startswith("Case_2") or """${TESTCASE}""".startswith("Case_3"))是一个普通的python表达式,"""是一个“字符串文字” - 因此如果实际值引用了换行符,它就不会破坏表达式。

答案 1 :(得分:0)

这是一个简单的修复,我使用了Robot库'String'中的关键字“Get Lines Containing String”并删除了“For Loop”。要获取特定行,我使用下面的代码:

    ${LIST}=  Process Data File  ${CURDIR}/pricing.csv
    ${LINE}=  Get Lines Containing String  ${LIST}  ${case}
    Log    ${LINE}
    @{COLUMNS}=    Split String    ${LINE}    separator=,
    ${TESTCASE}=    Get From List    ${COLUMNS}    0
    ${STARTTIME}=    Get From List    ${COLUMNS}    1
    ${ENDTIME}=    Get From List    ${COLUMNS}    2