• RobotFramework 接口测试实战落地


    目前我在负责一个APP的测试工作。在项目中使用 RobotFramework作为工具搭建接口自动化框架,进行接口自动化的工作。

    本文将从我个人对接口测试和自动化框架的理解以及RobotFramework在实际项目中落地两个大方面进行讲解。

    对接口测试的理解

    浅谈接口自动化框架

    可以实现接口测试的框架有很多,比如 Pytest,TestNG,RobotFramework 等等,今天就不过多展开对框架的对比了。但是想从公共的角度聊一聊,当你想使用一个工具搭建一套属于自己项目的框架,都应该包括以下几个组成部分:

    图片

    (作者原创整理)

    这是一个大致通用的结构,想明白、设计好这几个组件之间的关系,那么不管咱们使用任何自动化框架都会很快上手。

    浅谈接口测试用例设计思路

    在做接口测试时,应该关注的角度有:功能,边界,性能。在设计接口测试用例时,可以从下方图示中根据项目的实际情况设计用例。

    图片

    (作者原创整理)

    实战中接口用例编写

    但是在项目的实际运行当中,把接口测试用例设计完备是我们的目标,但是项目中,是否有时间,是否有必要对每个接口都进行完备的编写,还需要根据实际情况酌情设计测试策略,根据我平时的工作经验,我把接口测试分为三个层面:

    1.连通性验证层次:对接口能否调用通的验证,验证状态码(比如200,500等),对入参出参进行验证(如格式,边界等);

    2.业务逻辑验证层次:在校验入参和出差的同时,结合实际的业务进行验证,会引入前提条件,从业务角度校验入参出参的正确性;

    3.场景验证层次:在验证逻辑层次的基础上,结合具体的业务场景,此时单个接口测试已经不够,需要多个接口进行配合,有逻辑的前后顺序。

    自动化测试的核心目的之一就是节省人力,从2和3的层面测试上,就已经可以覆盖功能测试点,节省人力测试的时间了。

    RobotFramework项目中的落地

    在这一部分中,主要以几个关键环节做一个简单的扩展,希望对你能有些启发。

    文件目录设计

    根据项目的实际情况,参考框架的组成部分,设计自动化框架的项目的目录结构。

    图片

    公共类库设计

    根据项目的实际情况,设计一些公共方法。在我这个项目中,我着重处理的是对Python Requests类的封装。之所以封装Requests,是为了实现我测试用例中想实现的一些公共的功能,举例说明一些想实现的能力:

    登录后可以在后续的请求中复用token

    class CommonRequest:
        # 创建静态类,封装Requests
        def __init__(self):
            """基类初始化
            """
            self.headers = {
                "Content-Type": "application/json;charset=utf-8",
            }
            self.token = None        # 在后续新建的方法中获取token赋值
            self.username = None
            self.password = None
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在其他封装的方法中,完善自己想要的功能,为了在用例中多角度去断言。

    以封装Get请求为例,将响应码和请求的响应时间封装到body里,用于断言。

    def get_request(self, url, params=None, headers=None, **kwargs):
        """封装get操作
        """
        try:        response = requests.get(url=url, headers=self.headers, verify=False, **kwargs)
            content = json.loads(response.text)
            response_d = dict()
            response_d["code"] = response.status_code  # 将响应码返回到body中
            response_d["response_time"] = response.elapsed.total_seconds()  # 将响应时间返回到body中
        except Exception as e:        raise Exception("Exception: {}".format(e))
        response_d["body"] = content
    
        return response_d
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    梳理配置文件关系

    设计好配置文件的上下引用关系,可以大大提高接口项目的健壮性,拿接口地址为例,将环境信息不断抽层,最终实现只改动一个变量来匹配不同的环境。

    &{uat}        app_base_url=https://demo-api.com        app_h5_url=https://demo-h5.com
    ${app_url}        ${uat}[app_base_url]
    ${api_url}        ${app_url}/v1/demo/test
    
    • 1
    • 2
    • 3

    编写测试用例

    上面的工作准备差不多后,就可以开始真正的测试用例编写了。你会发现,当你设计一个框架的时候,用例是最后编写的,准备工作就绪后,编写用例就变成了体力活。

    Class_01_Demo用例
        #定义测试接口
        ${url}    Set Variable    ${api_url}
        #发送请求(此时的Get Request已经是封装后的了)
        ${response}    Get Request    ${url}
        #断言
        Should Be Equal As Strings    ${response["code"]}    200    #断言响应码应该是200
        Should Be True    ${response["response_time"]}<1             #断言响应时间小于1s
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    以上是一个很粗的落地过程,省略了很多通用步骤,将一些重要的环节拿出来做了阐述。如果是RobotFramework 初学者可能看不懂上面的内容,上面的流程比较适用于在 RobotFramework上摸爬滚打了一段时间的小伙伴,希望可以对你有些启发,也欢迎随时与我交流,共同进步!

    如果你不想一个人野蛮生长,找不到系统的资料,问题得不到帮助,坚持几天便放弃的感受的话,可以加入我们的QQ群:746506216,大家可以一起讨论交流,里面会有各种软件测试资料和技术交流。


    资源分享

    下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 【保证100%免费】

    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    UNIX环境高级编程 学习笔记 第二十章 数据库函数库
    Python + UnitTest 软件测试流程总结
    【cpu_entry_area mapping】SCTF2023-sycrop
    vue-(5)
    Java面试题:解释死锁的概念,给出避免死锁的常见策略。你能给我一个具体的例子吗?
    Unity 2021 LTS / Unity 2022 LTS New Shader Graph Node 参考样本
    python爬取boss直聘数据(selenium+xpath)
    【计算机毕业设计】家政服务平台
    c++ 单源最短路径-狄杰斯特拉算法
    识别验证码
  • 原文地址:https://blog.csdn.net/m0_67695717/article/details/127921047