rebotframewoke实现接口测试

本文详细介绍了如何使用Robot Framework的RequestsLibrary进行接口测试,包括创建session、GET/POST请求及ToJson转换技巧,以实际案例展示了MD5加密在登录验证中的应用。

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

  1. 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}

执行结果:

  1. 导入自定义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:面向过程的方式

流程:

1、register:post方式,根据输入的用户名和密码注册,注册成功后将用户名保存为全局变量${USERNAME} ,登录时使用;

2、login:post方式,使用全局变量USERNAME,密码(MD5加密后的数据)登录,登录成功后保存{USERNAME} ,密码(MD5加密后的数据)登录,登录成功后保存USERNAMEMD5{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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值