0

设想 :

我有某些关键字,它们在其中使用硬编码值,例如

PUT Method
    [Arguments]     ${token}      ${PUT_ACTION_URI}     ${req_data}     ${status_code}   
    ${second}     fetch from right   ${PUT_ACTION_URI}     /v2/ip/
    ${PUT_ACTION_URI}     set variable if   '${admin_flag}'=='True'      /v2/ip/admin/${second}      ${PUT_ACTION_URI}
    [Return]    ${responsejsondata}

这里 /v2/ip是硬编码的

现在这个值可以是任何值,即 /v2/ip/v3/ip/v3.1/ip

为了处理这个,我可以考虑

  1. 为 /v3/ip 或 /v3.1/ip 创建单独的 KW

  2. 为每个 v2/V3/V3.1 创建一个单独的分支,并相应地替换 V2/V3。

  3. 创建一个全局变量并用该全局变量替换 /v2/ip

我有大约 400 KW,其中 /v2/ip 在每个文件中至少使用 3 次,遵循这三种方法中的任何一种都将涉及一些手动工作。

如果可以在这里使用装饰器?

他们可以在运行时根据标志集修改底层 KW 中的 /v2/ip。

也欢迎任何其他方法。

4

2 回答 2

1

在机器人框架中有多种方法可以实现这一点。

1.使用全局变量并在运行时分配变量。(如果变量较少,这种方法很好)

${VERSION} v2

并在运行时使用 robot -v VERSION:v3 suite.robot 提供价值

PUT Method
[Arguments]     ${token}      ${PUT_ACTION_URI}     ${req_data}     ${status_code}   
${second}     fetch from right   ${PUT_ACTION_URI}     /${VERSION}/ip/
${PUT_ACTION_URI}     set variable if   '${admin_flag}'=='True'      /${VERSION}/ip/admin/${second}      ${PUT_ACTION_URI}
[Return]    ${responsejsondata}


2.使用标量文件方法(如果您有更多变量,这种方法很好)

  • 创建外部文件让我们说:scalars.py

scalars.py VERSION=2.1 VARIABLE_1="ANY VALUE IN THIS FORMAT" ... ... VARIABLE_N="ANY VALUE IN THIS FORMAT" * 将此文件导入机器人Variables部分。

  • 这些变量的作用域也是全局的

代码

*** 设置 ***

图书馆 You_Other_Custom_libraries

变量标量.py

*** 测试用例 ***

PUT Method
[Arguments]     ${token}      ${PUT_ACTION_URI}     ${req_data}     ${status_code}   
${second}     fetch from right   ${PUT_ACTION_URI}     /${VERSION}/ip/
${PUT_ACTION_URI}     set variable if   '${admin_flag}'=='True'      /${VERSION}/ip/admin/${second}      ${PUT_ACTION_URI}
[Return]    ${responsejsondata}


根据您的问题的编辑(其他方法)

3.使用sed命令替换字符串

写一个脚本:

  • 创建测试用例文件的副本(保持原始文件安全)
  • 使用sed命令 替换内容
    • 前任。sed 's/<str_to_replace>/<str_with_replace>/g' *.robot
  • 执行测试用例
  • 删除复制的文件(以节省空间)

重复上述步骤重新运行测试用例

于 2020-04-21T10:59:55.973 回答
1

创建具有默认值的全局变量并在代码中使用它(如 test_data.robot)

前任:

${VERSION}    v2

代码:

PUT Method
    [Arguments]     ${token}      ${PUT_ACTION_URI}     ${req_data}     ${status_code}   
    ${second}     fetch from right   ${PUT_ACTION_URI}     /${VERSION}/ip/
    ${PUT_ACTION_URI}     set variable if   '${admin_flag}'=='True'      /${VERSION}/ip/admin/${second}      ${PUT_ACTION_URI}
    [Return]    ${responsejsondata}

现在用户也可以在运行时修改 ${VERSION}

robot -v VERSION:v3 suite.robot
于 2020-04-21T09:07:31.100 回答