1.安装robotframework-requests
github:https://github.com/bulkan/robotframework-requests/#readme
RF的接口测试库主要有2个:requestsLibrary、requests。注意requests一定要先安装,已安装的话请忽略。
命令:
py -3 -m pip install requests
py -3 -m pip install robotframework-requests
- requestsLibrary常用关键字
2.1. Create Session:
作用:创建一个session,连接某个服务器
语法:
Name:Create Session
Source:RequestsLibrary
Arguments:
[ alias | url | headers={}| cookies=None| auth=None| timeout=None| proxies=None| verify=False| debug=debug | max_retries=max_retries | backoff_factor=backoff_factor | disable_warnings=disable_warnings ]
参数说明:
l alias :别名,用来表示当前会话,后续提交请求的时候通过这个名字来提交(必填)
l url:服务器的base url,也就是?前的信息(必填)
l headers:header字段。注意:在调用post request方法的时候,如果headers为空就赋值data为空,即使传递了字典类型,所以如果data存在的时候必须有headers参数,代表数据的格式,有以下4种:
1) application/x-www-form-urlencoded:表示浏览器的原生 form 表单
2) application/json:表示使用表单上传文件时(最常用)
3) multipart/form-data:表示消息主体是序列化后的 JSON 字符串
4) text/xml:XML格式
l timeout:设定超时时间
2.2. Get Request
作用:通过给定的别名以GET方式发起请求
语法:
Name:Get Request
Source:RequestsLibrary
Arguments:
[ alias | uri | headers=headers | json=json | params=params | allow_redirects=allow_redirects | timeout=timeout ]
参数说明:
l alias:会话别名,也就是用Create Session关键字创建的(必填)
l uri:请求发送的uri(必填)
l params:请求参数,字典,列表或文件等
l headers:请求头,字典类型
l json:请求参数,格式为json
l allow_redirects:是否允许重定向
l timeout:超时时间
2.3. Post Request
作用:通过给定的别名以POST方式发起请求
语法:
Name:Post Request
Source:RequestsLibrary
Arguments:
[ alias | uri | data=data | json=json | params=params | headers=headers | files=files | allow_redirects=allow_redirects | timeout=timeout ]
参数说明:
l alias:会话别名,也就是用Create Session关键字创建的(必填)
l uri:请求发送的uri(必填)
l data:字典类型的数据
l params:url参数,添加到uri之后的内容
l headers:请求头,字典类型
l json:请求参数,格式为json
l allow_redirects:是否允许重定向
l timeout:超时时间
2.4. To Json:
作用:将Python字典和Json格式进行互相转换象,本质使用的还是Python中dumps方法(将字典转换为Json),loads方法(将Json转换为字典)
语法:
Name:To Json
Source:RequestsLibrary
Arguments:[ content | pretty_print=false]
参数说明:
content :字典或json类型的数据
pretty_print:默认是false,表示将Content 从Json转换为字典类型;为true表示将字典类型的content转换为json对象。
示例:
*** Settings ***
Library RequestsLibrary
*** Test Cases ***
Test
# 从Json转换为字典类型
${j} To Json {"pass":"Authorized access"}
log ${j}
# 从字典类型转换为Json
${d} To Json {"pass":"Authorized access"} pretty_print=true
log ${d}
执行结果:
- 导入自定义python文件:计算MD5
用户密码下次登录时输入的是密码的MD5值,robot framework自带的库中没有这种关键字,所以我们可以定义在python文件中,然后在test suit文件中通过Settings表导入即可。
md5_encrypt.py:
--coding:utf-8 --
from hashlib import md5
def md5_encrypt(text):
“”"
md5计算摘要
:param text: 传入的是字符串类型
:return: 返回hash值
“”"
m = md5()
# TypeError: Unicode-objects must be encoded before hashing
if isinstance(text, str):
text = text.encode()
m.update(text)
return m.hexdigest()
test suite文件用Library关键字导入即可:
*** Settings ***
Library md5_encrypt.py
- 代码示例1:面向过程的方式
流程:
1、register:post方式,根据输入的用户名和密码注册,注册成功后将用户名保存为全局变量${USERNAME} ,登录时使用;
2、login:post方式,使用全局变量USERNAME,密码(MD5加密后的数据)登录,登录成功后保存{USERNAME} ,密码(MD5加密后的数据)登录,登录成功后保存USERNAME,密码(MD5加密后的数据)登录,登录成功后保存{TOKEN}和${USER_ID};
3、create:post方式,使用登录成功后生成的TOKEN和{TOKEN}和TOKEN和{USER_ID}创建博文
4、getBlogContent:get方式,查询博文内容
配置信息:
*** Settings ***
Library md5_encrypt.py #自定义的计算MD5的Python文件
Library RequestsLibrary #导入RequestsLibrary库
Library Collections #RF自带的库,包含字典和列表的一些操作
*** Variables ***
${name} ksh #用户名的一部分,会和随机的数字拼接到一起
${URL} http://39.106.41.11:8080 #URL
${PASSWORD} 2514836ksh #密码,固定值
register:
*** Test Cases ***
register
log ************register
# 调用python的random.randint方法生成1个随机正整数
KaTeX parse error: Expected 'EOF', got '#' at position 73: … random
#̲将{name}和随机数拼接作为用户名
${user_name} Catenate SEPARATOR= ${name} ${rand_num}
创建一个字典,包括注册的参数信息
${payload} Create Dictionary username=${user_name} password=${PASSWORD} email=ksh@126.com
${headers} Create Dictionary Content-Type=application/json
# 连接服务器,会话的别名为register
Create Session register ${URL}
# 发送post请求
${r}= Post Request register /register/ data=${payload} headers=${headers}
# 判断http协议响应码为200
Should Be Equal As Strings ${r.status_code} 200
# 判断响应数据中code为00
${code} Get From Dictionary ${r.json()} code
Should Be Equal As Strings ${code} 00
# 如果登录成功获取token
${USERNAME} Set Variable If ${code}==00 ${user_name}
#将USERNAME设置为全局变量,后续接口使用
Set Global Variable ${USERNAME}
login:
*** Test Cases ***
login
log ************login
# 密码值进行md5加密
${pw} md5_encrypt ${PASSWORD}
# 创建一个字典,包括登录的参数信息
payloadCreateDictionaryusername={payload} Create Dictionary username=payloadCreateDictionaryusername={USERNAME} password=${pw}
# 创建header,指定数据类型
${headers} Create Dictionary Content-Type=application/json
# 创建会话,别名为login
Create Session login ${URL}
#发送post请求
r=PostRequestlogin/login/data={r}= Post Request login /login/ data=r=PostRequestlogin/login/data={payload} headers=${headers}
log ${r.json()}
# 判断http协议响应码为200
Should Be Equal As Strings ${r.status_code} 200
# 判断响应数据中code为00
${code} Get From Dictionary ${r.json()} code
Should Be Equal As Strings ${code} 00
# 如果登录成功获取token和userid
${TOKEN} Run Keyword If ${code}==00 Get From Dictionary ${r.json()} token
${USER_ID} Run Keyword If ${code}==00 Get From Dictionary ${r.json()} userid
#将TOKEN和USER_ID设置为全局变量,后续接口使用
Set Global Variable ${TOKEN}
Set Global Variable ${USER_ID}
create:
*** Test Cases ***
create
log ************create
payloadCreateDictionaryuserid={payload} Create Dictionary userid=payloadCreateDictionaryuserid={USER_ID} token=${TOKEN} title=test py web content=python port test2019
${headers} Create Dictionary Content-Type=application/json
# 连接服务器,会话的别名为create
Create Session create ${URL}
# 发送post请求
r=PostRequestcreate/create/data={r}= Post Request create /create/ data=r=PostRequestcreate/create/data={payload} headers=${headers}
# 判断http协议响应码为200
Should Be Equal As Strings ${r.status_code} 200
# 判断响应数据中code为00
${code} Get From Dictionary ${r.json()} code
Should Be Equal As Strings ${code} 00
# 判断userid和输入的一致
${response_user_id} Get From Dictionary ${r.json()} userid
Should Be Equal ${response_user_id} ${USER_ID}
getBlogContent:
*** Test Cases ***
getBlogContent
log ************getBlogContent
${headers} Create Dictionary Content-Type=application/json
# 连接服务器,会话的别名为create
Create Session getBlogContent ${URL}
# 发送get请求
${r}= Get Request getBlogContent /getBlogContent/1
log ${r.json()}
# 判断http协议响应码为200
Should Be Equal As Strings ${r.status_code} 200
# 判断响应数据中code为00
${code} Get From Dictionary ${r.json()} code
Should Be Equal As Strings KaTeX parse error: Expected 'EOF', got '#' at position 18: …ode} 00
#̲ 判断userid和输入的一致…{article_id} Get From Dictionary ${r.json()} articleId
#Should Be Equal ${response_user_id} 1
本文详细介绍了如何使用Robot Framework的RequestsLibrary进行接口测试,包括创建session、GET/POST请求及ToJson转换技巧,以实际案例展示了MD5加密在登录验证中的应用。
1123

被折叠的 条评论
为什么被折叠?



