求助:Robot测试框架从会话获取Access Token返回None
从你提供的脚本片段来看,拿不到access_token大概率是请求格式或者响应处理的细节没做对,我给你拆解几个排查和修复方向:
先确认请求是否正确发送并返回预期响应
首先要验证你的Post请求是否成功,接口有没有返回包含access_token的响应。可以在请求后加这两行代码,先排查基础问题:Should Be Equal As Integers ${resp.status_code} 200 Log To Console ${resp.json()}运行后看控制台输出的完整响应JSON,确认里面确实有
access_token这个键(注意拼写,比如是不是写成了access_to或者其他变体)。如果响应里根本没有这个字段,那得先排查接口为什么没返回,比如参数是否正确、权限是否足够。修复请求体的传递方式
你设置了Content-Type=application/json,但用了data=${dict}参数传递请求体——这是个常见坑!Robot Framework的RequestsLibrary中,data参数会把字典编码成form-data格式,即使你手动设置了JSON的Content-Type也没用。正确的做法是用json=${dict}参数,这样库会自动把字典序列化为JSON字符串,并设置正确的Content-Type:${resp} Post Request httpbin /api/Owners json=${dict} headers=${header}正确处理响应中的access_token
你用evaluate的方式没问题,但要注意Robot变量的引用语法,以及键名的正确性。正确的写法应该是:${accessToken}= evaluate ${resp}.json().get("access_token", None)或者更符合Robot风格的写法,用BuiltIn库的
Get From Dictionary(需要先把响应转成字典):${resp_json}= Set Variable ${resp.json()} ${accessToken}= Get From Dictionary ${resp_json} access_token ${None}这样如果键不存在,会返回你指定的默认值
${None},方便排查。检查会话创建的细节
确认${server_URL}是否正确,verify=${True}会不会因为SSL证书问题导致请求失败?如果是测试环境的自签证书,可以改成verify=${False}先排除这个问题:Create Session httpbin ${server_URL} verify=${False}
先按上面的步骤逐一排查,尤其是请求体的传递方式,这个是最容易踩的坑!
内容的提问来源于stack exchange,提问作者Pothuri Sravanasandhya

