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


    Robot Framework框架简介

    • Robot Framework框架是一个通用的验收测试和验收测试驱动开发的自动化测试框架(ATDD),使用的是关键字驱动的测试方法。它本身拥有强大的标准库,此外还可以根据项目需要,使用Python对其测试库和框架本身进行扩展和优化,能同时满足对接口、数据库、UI自动化和服务器端自动化的测试需求,编写测试用例的成本低,维护方便。

    项目说明

    • 本框架使用的是接口设计的分层玩法,分层的原则是:接口数据和接口业务分离。具体为:项目目录结构分层,接口数据与接口用例分离,接口用例与接口业务分离,公共方法和公共配置也接口业务分离,在测试用例中可以传入不定参数,同时也可以定义用例的执行顺序。

    技术栈

    • Robot Framework
    • RequestsLibrary
    • HttpLibrary.HTTP

    框架目录结构及相关说明

    1、框架目录结构图如下

    2、目录结构说明

    • 公共配置 ===========> 配置文件,定义公共请求头、请求域名等
    • 基础模块 ===========> 封装请求方法,公共方法和工具方法模块
    • 功能组件 ===========> 封装接口业务模块,接口依赖模块,多个接口组合复杂业务场景等
    • 主干用例&项目用例 ===========> 存放接口测试用例

    代码设计与功能说明

    1、封装请求方法,如下


    *** 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}
    
    • post请求

    • get请求

    • 以不定参数的形式封装请求,后续调用时,可传入不同个数的参数,方便不同场景下测试用例的设计

    2、封装接口业务模块

    • 根据业务应用场景,组合接口模块
    • 发起请求,获取响应,并进行响应断言

    3、测试用例设计

    • 根据业务场景,设计测试用例
    • 调用组合的接口模块,并依据场景需要,传入不同的参数

    项目实例演示

  • 相关阅读:
    [luogu4053 JSOI2007] 建筑抢修 (贪心 优先队列)
    [luogu2272 ZJOI2007] 最大半连通子图 (tarjan缩点 拓扑排序 dp)
    20180705 考试记录
    [luogu4310] 绝世好题 (递推)
    [luogu2765 网络流24题] 魔术球问题 (dinic最大流)
    [luogu4151 WC2011] 最大XOR和路径 (线性基)
    [luogu3232 HNOI2013] 游走 (高斯消元 期望)
    [luogu3726 HNOI2017] 抛硬币 (拓展lucas)
    20180703 考试记录
    [spoj] HIGH
  • 原文地址:https://www.cnblogs.com/jun-zi/p/12011583.html
Copyright © 2020-2023  润新知