基于RobotFramework的接口自动化测试

基于 RobotFramework 的接口自动化测试是提高测试效率和质量的重要手段。本文将分享我在实践中所掌握的几个技巧和经验。

用 Apifox,节省研发团队的每一分钟

基于RobotFramework的接口自动化测试

免费使用 Apifox

相关推荐

最新文章

API

一体化协作平台

API 设计

API 文档

API 调试

自动化测试

API Mock

API Hub

立即体验 Apifox
目录

Robot Framework

Robot Framework 是一个通用的开源自动化框架。它可以用于测试自动化和机器人过程自动化(RPA)。

Robot Framework 由 Robot Framework 框架基金会支持。许多行业领先的公司在软件开发中使用该工具。它是开放的和可扩展的,几乎可以与任何其他工具集成,以创建强大而灵活的自动化解决方案。同时它是可以免费使用,无需支付许可费用的。

Robot Framework 有一个简单的语法,利用了人类可读的关键字。它的功能可以通过使用 Python、Java 或许多其他编程语言实现的库来扩展。Robot Framework 有一个丰富的生态系统,由作为单独项目开发的库和工具组成。

基于RobotFramework的接口自动化测试
Robot Framework

项目使用 RobotFramework 做接口自动化测试

项目的技术栈为:

  • Robot Framework
  • RequestsLibrary
  • HttpLibrary.HTTP

项目的基本结构图如下:

RobotFramework 做接口自动化测试

项目说明

框架使用接口分层的方式,分层规则是:接口的数据和业务分离。表现为:

  • 项目的目录,要分层
  • 接口的用例与数据、业务要分离
  • 测试用例中可以传入不定参数,同时也可以定义用例的执行顺序

目录结构说明

  • 公共配置:主要存放一些配置文件、公用方法、公用函数
  • 基础模块:主要存放封装的请求函数、工具函数
  • 功能组件:主要存放一些封装好的请求组件
  • 主干用例&项目用例:存放接口测试用例

安装 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 做接口自动化测试
新建测试用例

填入对应的测试用例信息:

RobotFramework 做接口自动化测试
填写信息

请求

我们需要先使用 RobotFramework 创建一个 Session,这个 Session 做了这几件事:

  • 为后面的请求提供了“容器”,之后多个请求都可以在这一个会话中发起。
  • 保持状态,比如你创建了会话后,在会话上发起了login的接口请求并成功,后面所有在这个会话上的请求都是“已登录”状态的请求。
  • 在会话中设置或获取的 headers 和 cookies 信息,在每次请求时都会使用,起到了“默认值”的效果。
RobotFramework 做接口自动化测试
创建一个 Session

接着到会话界面,填入基本的信息:

RobotFramework 做接口自动化测试
填入信息

填写完之后,你可以直接发送请求。

RobotFramework 做接口自动化测试
发送请求

也可以选择在 Session 上发送请求。

RobotFramework 做接口自动化测试
Session 上发送请求

Apifox-更方便做测试

其实 RobotFramework 是属于 UI 测试工具的范畴,只能做简单的 API 测试,如果要做复杂的 API 测试,还是需要借助 Apifox 这种专业级别的 API 工具。Apifox 提供更好的可视化体验,更加方便快捷地操作,以及对于中文有要求的同学,可以选择Apifox进行测试,它提供了以下功能:

  • 可视化的,清晰的调试选项
  • 本身支持中文显示
  • 测试过程可视化展示
  • 单个测试用例可点击进入查看

创建接口用例

可以通过可视化的后置操作选项,更加清晰地添加断言校验脚本。

Apifox 可视化后置操作
可视化后置操作

选择自定义脚本之后,填入对应的脚本代码,三个接口操作都是一样的。

Apifox 可视化后置操作
填入对应的脚本代码

创建测试用例

创建测试用例,可设置测试用例的优先级

Apifox 创建测试用例
创建测试用例

开始接口测试

点击进入测试用例,并选择导入接口用例。

Apifox 创建测试用例
导入接口用例

右方的参数可设置一些重要运行参数:

  • 运行环境
  • 循环次数
  • 循环次数延迟
  • 遇到错误时忽略与否

点击运行按钮,可以清晰看到运行过程的可视化展示,包括:

  • 运行数量百分比
  • 通过率
  • 失败率
  • 未测数

等等

Apifox 测试报告
测试报告

并且在运行完成后,也可获取到整体的:

  • 总耗时
  • 平均接口耗时
  • 循环数
  • 断言数

你也可以选择导出测试报告,并分享给其他同事看~

Apifox 导出报告
导出报告

如果你想单独看某一个测试例子的具体数据,可以点击对应的更多详情按钮,进行查看。

Apifox 测试步骤详情
查看更多

对接口运行结果还可以单独调试该步骤。

Apifox 测试步骤详情
单独调试

关于Apifox

Apifox 是一体化 API 协作平台,可以实现 API 文档、API 调试、API Mock、 API 自动化测试,是更先进的 API 设计/开发/测试工具。

Apifox 提供了一种全面的 API 管理解决方案。使用 Apifox ,你可以在统一的平台上设计、调试、测试以及协作你的 API,消除了在不同工具之间切换和数据不一致的问题。

个人使用体验还是不错的,点击免费使用

Apifox 接口调试工具

知识扩展: