robot框架中的Switch语句

2024-10-08 19:29:00 发布

您现在位置:Python中文网/ 问答频道 /正文

实际上,我在robot框架中使用了很多if语句,它们很容易成为switch语句。 我在robot框架中找不到任何switch语句的示例(它是否存在?)。 这是我代码的一部分:(在我的代码中,像这样的if语句有50多个可能性,它非常大,日志太大,无法找到信息片段(所有的if都写在日志文件中,甚至那些false)。 谢谢你的帮助

# 1st posibility
\    ${varA}    Run Keyword And Continue On Failure    Run Keyword If    '${Type}' == 'Deal'    keyword1    ${Name}
# 2d posibility
\    ${varB}    Run Keyword And Continue On Failure    Run Keyword If    '${Type}' == 'Scenario' and '${varA}' != 'None'     keyword2    ${Name}
# 3rd posibility
\    ${varC}    Run Keyword And Continue On Failure    Run Keyword If    '${Type}' == 'Site' and '${varA}' != 'None'    keyword3   ${Name}
# 4th posibility
\    Run Keyword And Continue On Failure    Run Keyword If    '${Type}' == 'SiteFile' and '${varA}' != 'None'    keyword4  ${varA}

Tags: andrunnamenoneiffailureontype
2条回答

如果在所有情况下,您都根据单个值(即${Type})决定要执行的关键字,那么您可以尝试使用type=keyword之类的映射创建字典,并动态找出要执行的关键字。下面是一个简单的例子:

*** Settings ***
Library    Collections

*** Variables ***
&{TYPE_MAPPING}    deal=keyword1    scenario=keyword2    site=keyword3    sitefile=keyword4

*** Test Cases ***
Dynamic-Keyword-Name
    Take Action Based On Type    deal
    Take Action Based On Type    scenario
    Take Action Based On Type    site
    Take Action Based On Type    sitefile
    Take Action Based On Type    xyz

*** Keywords ***
Take Action Based On Type
    [Arguments]    ${type}
    ${kw_name}    Map Type To Keyword Name    ${type}
     Run Keyword And Continue On Failure    ${kw_name}

Map Type To Keyword Name
    [Arguments]    ${type}
    ${result}    ${value}    Run Keyword And Ignore Error    Get From Dictionary    ${TYPE_MAPPING}    ${type.lower()}
    Run Keyword If    '${result}' == 'FAIL'    Fail    msg=Was not able to map type "${type}" to keyword name
    Return From Keyword    ${value}

keyword1
    Log    Deal

keyword2
    Log    Scenario

keyword3
    Log    Site

keyword4
    Log    SiteFile

和日志: screenshot of logs

这就是我所做的

我的日志不清晰

test.robot
*** Settings ***
Library    myLib.py

*** Test Case ***
TC_run
     Switch Keyword    ${Type}



myLib.py
def    Calculate_funct(var1):
                 BuiltIn().run_keyword('CalculateKeyword', '${el1}', '${el2}','${el3}')
                                                                

def ValidateSite_funct(var1):
       if Id != "" :
             BuiltIn().run_keyword('ValidateKeyword', '${el1}', '${el2}')
             else : 
                    return "error"


def switch_keyword(keyword, **kwargs):
       """select the correct function to apply in function of the given keyword.\n
       *Args:*\n
             keyword: keyword in the first column of the file.\n
             arguments: columns content.\n
             "Calculate"\n
             "Validate"\n
       *Returns:*\n
             does the call to the correct api.\n
       *Example:*\n
       | Switch Keyword | ${Type} |
       """
       switcher = {
             "Calculate": Calculate_funct,
             "Validate" : Validate_funct,   
       }
       func = switcher.get(keyword, lambda: "invalid keywork")
       returned_thing = func(**kwargs)
       return returned_thing
       

                        

相关问题 更多 >

    热门问题