Python3+RobotFramework自动化测试十:接口测试
本篇使用roboot framework编写简单的接口测试用例。
接口文档
下面分别是get类型和post类型的接口:
接口1(这是一个会议信息查询接口):
http://127.0.0.1:8000/api/get_event_list |
请求参数:
eid --会议id
name --会议名称
|
返回值:
{
"data": {
"start_time":"2020-05-23T14:00:00",
"name":"发布会1",
"address":"北京"
}
"message":"success",
"status":200
}
|
接口2(这是一个参加会议人员签到接口):
http://127.0.0.1:8000/api/user_sign |
请求参数:
eid --会议id
name --签到人员手机号
|
返回值:
{
"message":"sign success",
"status":200
}
|
接口测试用例
下面分别针对上面的2个接口编写一个简单测试用例,内容如下:
*** Settings *** Library RequestsLibrary Library Collections *** Test Cases *** test_interface_get ${payload}= Create Dictionary eid=1 Create Session event http://127.0.0.1:8000/api ${r}= Get Request event /get_event_list params=${payload} Should Be Equal As Strings ${r.status_code} 200 log ${r.json()} ${dict} Set variable ${r.json()} #断言结果 ${msg} Get From Dictionary ${dict} message Should Be Equal ${msg} success ${sta} Get From Dictionary ${dict} status ${status} Evaluate int(200) Should Be Equal ${sta} ${status} test_interface_post Create Session sign http://127.0.0.1:8000/api ${headers} Create Dictionary Content-Type=application/x-www-form-urlencoded ${payload}= Create Dictionary eid=11 phone=13111111111 ${r} Post Request sign /user_sign/ data=${payload} headers=${headers} Should Be Equal As Strings ${r.status_code} 200 log ${r.json()} ${dict} Set variable ${r.josn()} # 断言结果 ${msg} Get From Dictionary ${dict} message Should Be Equal ${msg} sign success ${sta} Get From Dictionary ${dict} status ${status} Evaluate int(200) Should Be Equal ${sta} ${status}
简单分析
首先,引用RequestsLibrary和Collections库。RequestsLibrary就是安装robotframework-requests,提供接口操作相关的关键字。Collections库是用来操作字典的,因为接口返回的数据是json格式,必须转化成字典才能进行断言。
先看下test_interface_get用例的前3行:
${payload}= Create Dictionary eid=1 Create Session event http://127.0.0.1:8000/api ${r}= Get Request event /get_event_list params=${payload}
- 通过Create Dictionary关键字定义字典变量${payload},字典有一个键值eid=1,该字典将会作为接口的参数。
- Create Session关键字用来创建一个http会话服务器,通过event指定http://127.0.0.1:8000/api为该会话的基础URL。
- Get Request关键字用来发起一个Get请求,接口URL=event+/get_event_list/,接口参数为${payload},最后将接口返回数据赋值给变量${r}
Should Be Equal As Strings ${r.status_code} 200
log ${r.json()}
- 通过${r.status_code}可以得到请求的HTTP状态码,通过Should Be Equal As Strings关键字判断其是否为200。
- 通过${r.json()}可以将json格式的数据转化为字典,并通过log关键字打印。
${dict} Set variable ${r.json()} #断言结果 ${msg} Get From Dictionary ${dict} message Should Be Equal ${msg} success ${sta} Get From Dictionary ${dict} status ${status} Evaluate int(200) Should Be Equal ${sta} ${status}
这里主要是对返回数据进行验证:
- 将${r.json()}通过Set variable关键字赋值给变量${dict}
- c关键字由前面引入的Collections提供,可以取到字典中key对应的value,这里获取到的message对应的值给变量${msg}。
- Should Be Equal关键字用于比较${msg}是否等于success
- 通过Get From Dictionary关键字获取status对应的值,并赋值给变量${sta}
- 上一步获取到的status状态码是整数类型200,但是在robot framework中直接编写的内容为字符串,所以这里借用Evauate关键字,直接调用python的方法int()。
- 最后比较接口返回的状态码是否等于200
第2个post接口用例是post接口,与第1个接口用例基本类似,相信大家已经可以自行分析了。