You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Robot Framework中跨关键字共享${token}变量?

Robot Framework跨关键字传递${token}变量的实现方案

原始代码

*** Keywords ***
JSON Object-Token 
    Create Session     Portal     ${portalUrlData}
    ${auth_token}=  Evaluate    "Basic " +***********************************'.encode('utf-8')).decode('utf-8')
    ${headers}    Create Dictionary    Content-Type=application/x-www-form-urlencoded       Authorization=${auth_token}
    ${response}    Post On Session    Portal    /oidc/token    headers=${headers}    data=${tokenData}
    Should Be Equal As Strings    ${response.status_code}    200
    Log    Response: ${response.text}
    **${token}**        Set Variable        ${response.json()['access_token']}

JSON Object-User  
   Create Session    Admin    ${adminUrlData}
   ${headersWithToken}    Create Dictionary        Authorization=Bearer **${token}**   
   ${responseUser}    Post On Session    Admin       /api/users    headers=${headersWithToken}    json=${userDetails}
   Should Be Equal As Strings    ${responseUser.status_code}    201
   Log    Response: ${responseUser.text}    
   ${userid}          Set Variable        ${response.json()['id']}
   ${username}        Set Variable        ${response.json()['username']}

问题

我在Robot Framework中定义了上述两个关键字,JSON Object-Token会生成${token}变量,现在需要将这个变量应用到JSON Object-User关键字中,该怎么操作?

解决步骤

Robot Framework里关键字的变量默认是局部作用域,无法直接跨关键字访问,必须通过返回值传递+参数接收的方式实现,具体修改如下:

1. 修正JSON Object-Token,让它返回${token}

把关键字里错误的变量赋值写法修正,并添加返回声明,将生成的token作为关键字的返回值:

JSON Object-Token 
    Create Session     Portal     ${portalUrlData}
    ${auth_token}=  Evaluate    "Basic " +***********************************'.encode('utf-8')).decode('utf-8')
    ${headers}    Create Dictionary    Content-Type=application/x-www-form-urlencoded       Authorization=${auth_token}
    ${response}    Post On Session    Portal    /oidc/token    headers=${headers}    data=${tokenData}
    Should Be Equal As Strings    ${response.status_code}    200
    Log    Response: ${response.text}
    ${token}=    Set Variable        ${response.json()['access_token']}
    [Return]    ${token}  # 将token作为关键字返回值传出

注:原代码里**${token}** Set Variable是语法错误,必须改成标准的变量赋值格式。

2. 修改JSON Object-User,添加token参数接收

给关键字添加参数声明,内部直接使用传入的token变量,同时修正原代码里的响应对象错误:

JSON Object-User    [Arguments]    ${token}  # 声明接收token参数
    Create Session    Admin    ${adminUrlData}
    ${headersWithToken}    Create Dictionary        Authorization=Bearer ${token}   
    ${responseUser}    Post On Session    Admin       /api/users    headers=${headersWithToken}    json=${userDetails}
    Should Be Equal As Strings    ${responseUser.status_code}    201
    Log    Response: ${responseUser.text}    
    ${userid}          Set Variable        ${responseUser.json()['id']}  # 原代码错误使用了${response},改为${responseUser}
    ${username}        Set Variable        ${responseUser.json()['username']}

3. 在测试用例中调用并传递token

在测试用例里先调用JSON Object-Token获取token,再将其传入JSON Object-User:

*** Test Cases ***
Create User With Auth Token
    ${token}=    JSON Object-Token
    JSON Object-User    ${token}

这样就能实现把JSON Object-Token生成的token变量成功传递给JSON Object-User使用了。

内容的提问来源于stack exchange,提问作者kahirrao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 19:45:08