Robot Framework创建带认证与请求头的会话遇TypeError问题求助
嘿,你的这个TypeError: __init__() takes exactly 3 arguments (2 given)错误我之前也碰到过,主要是认证参数的写法不对,再加上变量定义、请求路径等几处小问题导致的,下面一步步给你修正:
1. 先把变量定义改对
Robot Framework里变量赋值不用=连接,也不需要额外加引号(除非值本身带特殊字符),你的变量定义应该改成这样:
*** Variables *** ${user} user1api ${passwd} password! &{headers} Content-Type=application/json
这里我去掉了headers里的
Authorization,因为如果用auth参数的话,Robot会自动生成Basic认证的请求头,避免重复设置导致冲突。
2. 认证列表的写法要规范
你创建认证列表的时候,没给变量加${}标识,Robot根本识别不出这是变量,得改成:
${auth}= Create List ${user} ${passwd}
3. Create Session和Get Request的正确用法
Create Session的auth参数需要接收一个包含用户名和密码的列表,另外Get Request的路径要和会话的基础URL配合好,别重复写URL部分。修正后的关键字代码如下:
*** Keywords *** DO Status Get API ${auth}= Create List ${user} ${passwd} Create Session DOStatus https://test.abc.com/api/status/7661/job headers=${headers} auth=${auth} ${resp}= Get Request DOStatus /basic-auth/user/passwd # 可以加个日志看看响应内容,方便排查 Log To Console ${resp.json()}
额外补充两种认证方式
如果你的接口要求手动设置
Authorization头(不用auth参数),那得自己生成正确的Base64编码字符串:${auth_str}= Catenate ${user}:${passwd} ${auth_b64}= Encode String To Base64 ${auth_str} &{headers} Content-Type=application/json Authorization=Basic ${auth_b64}这种情况就不用在Create Session里加
auth=${auth}参数了。记得检查请求路径是否正确:会话的基础URL是
https://test.abc.com/api/status/7661/job,加上后面的/basic-auth/user/passwd,最终请求的URL是https://test.abc.com/api/status/7661/job/basic-auth/user/passwd,如果这不是你要的,得调整基础URL或者请求路径。
内容的提问来源于stack exchange,提问作者Madhu

