如何在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
相关产品推荐
相关产品推荐

