Robot Framework
Robot Framework 是一个通用的开源自动化框架。它可以用于测试自动化和机器人过程自动化(RPA)。
Robot Framework 由 Robot Framework 框架基金会支持。许多行业领先的公司在软件开发中使用该工具。它是开放的和可扩展的,几乎可以与任何其他工具集成,以创建强大而灵活的自动化解决方案。同时它是可以免费使用,无需支付许可费用的。
Robot Framework 有一个简单的语法,利用了人类可读的关键字。它的功能可以通过使用 Python、Java 或许多其他编程语言实现的库来扩展。Robot Framework 有一个丰富的生态系统,由作为单独项目开发的库和工具组成。
项目使用 RobotFramework 做接口自动化测试
项目的技术栈为:
- Robot Framework
- RequestsLibrary
- HttpLibrary.HTTP
项目的基本结构图如下:
项目说明
框架使用接口分层的方式,分层规则是:接口的数据和业务分离。表现为:
- 项目的目录,要分层
- 接口的用例与数据、业务要分离
- 在测试用例中可以传入不定参数,同时也可以定义用例的执行顺序
目录结构说明
- 公共配置:主要存放一些配置文件、公用方法、公用函数
- 基础模块:主要存放封装的请求函数、工具函数
- 功能组件:主要存放一些封装好的请求组件
- 主干用例&项目用例:存放接口测试用例
安装 RobotFramework
首先,需要安装 RobotFramework。可以通过 pip 安装,具体命令如下:
pip install robotframework
安装相关库
接着,需要安装一些与接口自动化测试相关的库。具体命令如下:
Copy code
pip install robotframework-requests
pip install robotframework-jsonlibrary
pip install robotframework-databaselibrary
其中,robotframework-requests
用于发送 HTTP 请求,robotframework-jsonlibrary
用于处理 JSON 格式的数据,robotframework-databaselibrary
用于与数据库进行交互。
请求方法
请求方法的封装如下:
* Settings *
Library RequestsLibrary
Library Collections
Library HttpLibrary.HTTP
Resource ../icmcenterApi/公共配置/公共配置_index.txt
* Keywords *
SendPost
[Arguments] ${root_url} ${uri} ${ParameterDict} ${DataType} ${header}
[Documentation] ${root_url}:接口的host;
... ${uri}:接口uri;
... ${dict}:接口传入参数,字典数据类型;
... ${DataType}:传入参数类型,如data等;
... ${header}:请求头,字典类型。
...
... 响应数据为json类型。
...
... 若为独立请求,可在请求结束后立即释放连接。
${RequestData} Create Dictionary
log ${ParameterDict.keys()}
: FOR ${key} IN @{ParameterDict.keys()}
\ set to dictionary ${RequestData} ${key} ${ParameterDict['${key}']}
log ${RequestData}
create session api ${root_url}
${response} post request api ${uri} ${DataType}=${RequestData} headers=${header} timeout=${timeout}
# 将json的string类型的数据转成python的字典类型
Comment ${ResponseBody} To Json ${response.content}
sleep ${sleepTime}
log ${response.text}
[Return] ${response.text}
SendGet
[Arguments] ${root_url} ${uri} ${ParameterDict} ${header}
[Documentation] 响应数据为json类型
${RequestData} Create Dictionary
log ${ParameterDict.keys()}
: FOR ${key} IN @{ParameterDict.keys()}
\ set to dictionary ${RequestData} ${key} ${ParameterDict['${key}']}
log ${RequestData}
create session api ${root_url}
${response} get request api ${uri} params=${RequestData} headers=${header} timeout=${timeout}
Comment ${ResponseBody} To Json ${response.content}
sleep ${sleepTime}
log ${response.text}
[Return] ${response.text}
re_session
[Arguments] ${host}
[Documentation] 创建会话
create session session ${host}
re_post
[Arguments] ${uri} ${ParameterDict} ${DataType} ${header}
[Documentation] 不创建会话,仅发送post请求;
... 响应数据为json类型
${RequestData} Create Dictionary
log ${ParameterDict.keys()}
: FOR ${key} IN @{ParameterDict.keys()}
\ set to dictionary ${RequestData} ${key} ${ParameterDict['${key}']}
log ${RequestData}
${response} post request session ${uri} ${DataType}=${RequestData} headers=${header} timeout=${timeout}
Comment ${ResponseBody} To Json ${response.content}
sleep ${sleepTime}
log ${response.text}
[Return] ${response}
re_get
[Arguments] ${uri} ${ParameterDict} ${header}
[Documentation] 不创建会话,仅发送get请求;
... 响应数据为json类型
${RequestData} Create Dictionary
log ${ParameterDict.keys()}
: FOR ${key} IN @{ParameterDict.keys()}
\ set to dictionary ${RequestData} ${key} ${ParameterDict['${key}']}
log ${RequestData}
${response} get request session ${uri} params=${RequestData} headers=${header} timeout=${timeout}
Comment ${ResponseBody} To Json ${response.content}
sleep ${sleepTime}
log ${response.text}
[Return] ${response}
新建测试用例
在测试套件上新建测试用例:
填入对应的测试用例信息:
请求
我们需要先使用 RobotFramework 创建一个 Session,这个 Session 做了这几件事:
- 为后面的请求提供了“容器”,之后多个请求都可以在这一个会话中发起。
- 保持状态,比如你创建了会话后,在会话上发起了login的接口请求并成功,后面所有在这个会话上的请求都是“已登录”状态的请求。
- 在会话中设置或获取的 headers 和 cookies 信息,在每次请求时都会使用,起到了“默认值”的效果。
接着到会话界面,填入基本的信息:
填写完之后,你可以直接发送请求。
也可以选择在 Session 上发送请求。
Apifox-更方便做测试
其实 RobotFramework 是属于 UI 测试工具的范畴,只能做简单的 API 测试,如果要做复杂的 API 测试,还是需要借助 Apifox 这种专业级别的 API 工具。Apifox 提供更好的可视化体验,更加方便快捷地操作,以及对于中文有要求的同学,可以选择Apifox进行测试,它提供了以下功能:
- 可视化的,清晰的调试选项
- 本身支持中文显示
- 测试过程可视化展示
- 单个测试用例可点击进入查看
创建接口用例
可以通过可视化的后置操作选项,更加清晰地添加断言校验脚本。
选择自定义脚本之后,填入对应的脚本代码,三个接口操作都是一样的。
创建测试用例
创建测试用例,可设置测试用例的优先级 :
开始接口测试
点击进入测试用例,并选择导入接口用例。
右方的参数可设置一些重要运行参数:
- 运行环境
- 循环次数
- 循环次数延迟
- 遇到错误时忽略与否
点击运行按钮,可以清晰看到运行过程的可视化展示,包括:
- 运行数量百分比
- 通过率
- 失败率
- 未测数
等等
并且在运行完成后,也可获取到整体的:
- 总耗时
- 平均接口耗时
- 循环数
- 断言数
你也可以选择导出测试报告,并分享给其他同事看~
如果你想单独看某一个测试例子的具体数据,可以点击对应的更多详情按钮,进行查看。
对接口运行结果还可以单独调试该步骤。
关于Apifox
Apifox 是一体化 API 协作平台,可以实现 API 文档、API 调试、API Mock、 API 自动化测试,是更先进的 API 设计/开发/测试工具。
Apifox 提供了一种全面的 API 管理解决方案。使用 Apifox ,你可以在统一的平台上设计、调试、测试以及协作你的 API,消除了在不同工具之间切换和数据不一致的问题。
个人使用体验还是不错的,点击免费使用~
知识扩展: