流程用例的签名保障,Python接口自动化框架封装案例!

news2024/12/25 9:22:57

目录

 前言:

1.项目背景及需求

2.框架整体架构设计

3.接口管理模块的封装

4.用例管理模块的封装

5.请求模块的封装

6.签名模块的封装

7.案例展示及代码实现

结语:


 前言:

随着互联网技术的不断发展,人们对于软件质量的要求也越来越高,其中接口自动化测试是保证软件质量的重要手段。为了让测试人员更加方便、高效地进行接口自动化测试,我们基于Python语言,使用了测试框架unittest,封装了一个接口自动化框架。

1.项目背景及需求

在进行接口自动化测试时,我们发现很多测试人员都会遇到以下几个问题:

1. 重复造轮子,写重复的代码;
2. 接口模块过多,管理起来非常困难;
3. 没有统一的用例管理方法,测试人员之间的沟通存在问题;
4. 部分接口需要进行签名才能进行访问。

基于以上问题,我们决定封装一个接口自动化框架,用于方便、高效地进行接口自动化测试。

2.框架整体架构设计

整个框架的设计采用了模块化设计,主要包括如下几个模块:

1. 接口管理模块:用于管理所有接口信息,包括接口地址、请求参数、响应结果等;
2. 用例管理模块:用于管理所有测试用例,包括用例名称、用例执行顺序、用例执行状态等;
3. 请求模块:用于发送各种类型的HTTP请求;
4. 签名模块:用于对请求进行签名处理;

3.接口管理模块的封装

接口管理模块是整个框架的核心模块,其主要功能是负责对所有接口信息的管理。具体代码实现如下:

import json

class Api:
    def __init__(self, url, method, params=None):
        self.url = url
        self.method = method
        self.params = params
        self.response = None
        self.result = None

    # 对象转json字符串
    def to_json_str(self):
        return json.dumps({"url": self.url, "method": self.method, "params": self.params})

    # json字符串转对象
    @staticmethod
    def from_json_str(json_str):
        dict_data = json.loads(json_str)
        return Api(dict_data["url"], dict_data["method"], dict_data["params"])

在封装接口信息时,我们主要考虑如下几个因素:

1. 接口地址;
2. 请求方法;
3. 请求参数;

通过实现Api类中的to_json_str()和from_json_str()方法,我们可以方便地将对象转换为json字符串,并将json字符串转换为对象,以方便管理接口信息。

4.用例管理模块的封装

用例管理模块是整个框架中比较重要的一块,它对于测试用例的管理非常关键。具体代码实现如下:

class Case:
    STATUS_READY = 1
    STATUS_PASS = 2
    STATUS_FAIL = 3
    STATUS_ERROR = 4

    def __init__(self, name, api_list=None):
        self.name = name
        self.api_list = api_list or []
        self.status = Case.STATUS_READY

    # 向用例添加接口
    def add_api(self, api):
        self.api_list.append(api)

    # 执行用例
    def execute(self):
        for api in self.api_list:
            api.execute()

    # 对象
    #转字典
    def to_dict(self):
        return {
            "name": self.name,
            "api_list": [api.to_json_str() for api in self.api_list],
            "status": self.status,
        }

    # 字典转对象
    @staticmethod
    def from_dict(dict_data):
        api_list = [Api.from_json_str(api_json_str) for api_json_str in dict_data.get("api_list", [])]
        case = Case(dict_data["name"], api_list)
        case.status = dict_data["status"]
        return case

在封装用例管理模块时,我们着重考虑如下几个因素:

1. 用例名称;
2. 包含的接口列表;
3. 用例执行状态;

通过实现Case类中的add_api()和execute()方法,我们可以方便地进行接口自动化测试,并可以跟踪测试用例的执行状态。

5.请求模块的封装

请求模块是整个框架中最为基础的一部分,其主要功能是发送各种类型的HTTP请求,并能够获取到响应结果。具体代码实现如下:

import requests

class Request:
    @staticmethod
    def send(url, method, params=None):
        if method.lower() == "get":
            response = requests.get(url, params=params)
        elif method.lower() == "post":
            response = requests.post(url, data=params)
        elif method.lower() == "put":
            response = requests.put(url, data=params)
        elif method.lower() == "delete":
            response = requests.delete(url, data=params)
        else:
            raise Exception("Unsupported HTTP method: {}".format(method))
        return response

在封装请求模块时,我们主要考虑如下几个因素:

1. 请求地址;
2. 请求方法;
3. 请求参数;
4. 响应结果;

通过实现Request类中的send()方法,我们可以方便、快速地发送各种类型的HTTP请求,并可以获取到响应结果。

6.签名模块的封装

签名模块是整个框架的一个补充模块,其主要功能是对请求进行签名处理,以保证接口的访问安全性。具体代码实现如下:

import hashlib

class Signature:
    @staticmethod
    def generate(params):
        # 对请求参数按照key进行排序
        sorted_params = sorted(params.items(), key=lambda x: x[0])
        # 拼接成字符串
        raw_str = "".join([str(key) + str(value) for key, value in sorted_params])
        # 进行md5签名
        sign = hashlib.md5(raw_str.encode("utf-8")).hexdigest()
        return sign

在封装签名模块时,我们主要考虑如下几个因素:

1. 请求参数;
2. 根据请求参数生成签名;

通过实现Signature类中的generate()方法,我们可以对请求参数进行签名处理以保证访问接口的安全性。

7.案例展示及代码实现

下面我们以一个简单的接口为例,演示如何使用我们封装的接口自动化框架进行测试。

首先,我们需要定义一个接口:

api = Api("https://www.example.com/api/get_data", "get", {"name": "test"})

然后,我们需要定义一个用例,并向其中添加该接口:

case = Case("test_case")
case.add_api(api)

最后,我们可以执行这个用例,并将测试结果输出:

case.execute()

if case.status == Case.STATUS_PASS:
    print("测试通过!")
else:
    print("测试失败!")

到这里,我们已经对接口自动化框架的封装进行了详细的介绍。

总的来说,我们的接口自动化框架具有以下几个优点:

1. 封装了重复的代码;
2. 管理接口信息非常方便;
3. 用例管理方便高效;
4. 签名功能保证接口访问安全;

通过使用我们封装的接口自动化框架,可以帮助测试人员更加方便、高效地进行接口自动化测试,提高测试质量和效率。同时,我们的封装方法也可以为其他自动化测试框架的封装提供参考。

完整的代码实现和使用教程可以点击此链接访问:

[接口自动化框架封装项目实战:流程用例带签名混合封装](https://github.com/ChatAiTeam/Interface-Automation-Framework)

在使用本框架过程中,我们也应该注意以下几点:

1. 合理管理接口信息;
2. 定义规范的用例结构;
3. 对于需要签名的接口,需要提前完成签名的逻辑编写;
4. 不断完善和优化框架的功能。

结语:

在日益增长的技术需求下,软件测试必须要持续的创新和改进,用自动化测试工具更科学的尽可能的发现缺陷,提高测试质量成为测试人员的重要任务之一,而接口自动化测试在自动化测试中发挥着至关重要的作用。利用本文介绍的框架,实际运用于项目中进行接口自动化测试,一定会让测试人员的工作更加高效、轻松。

 作为一位过来人也是希望大家少走一些弯路,在这里我给大家分享一些自动化测试前进之路的必须品,如果你用得到的话可以直接拿走,希望能对你带来帮助。(WEB自动化测试、app自动化测试、接口自动化测试、持续集成、自动化测试开发、大厂面试真题、简历模板等等),相信能使你更好的进步!

获取方式:留言【自动化测试】即可获取
【自动化测试交流】:574737577(进群备注ccc)icon-default.png?t=N4N7http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=odSMPmGHlyaD8rCmmNtxOnxgbTny92qe&authKey=%2BzeQysUw0Ux2FXY4G%2BQEOZh%2BDurjUV2vBF4XIm4HSYt73n5ISqUnjwMJSYlSSeZp&noverify=0&group_code=574737577

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/568303.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

臻图信息跟进新基建建设,构建“智慧铁路”“指挥调度”管理系统

铁路作为国民经济的骨干、国家关键性基础建设,在社会经济发展中起到关键性作用,交通在全天运行、运量多、运价少、占地面积小和安全环保等方面有着显著的优势。 近年来,我国高度重视铁路发展,2020年8月国铁集团出台《新时代交通强…

Windows系统自带远程桌面和远程协助怎么连接?

随着IT技术的发展和远程办公的兴起,在日常工作中,远程桌面和远程协助等功能已经成为很多用户需要掌握的技能之一。而对于使用Windows系统的用户来说,Windows系统自带的远程桌面和远程协助功能,更是令人欣喜的利器。下面我们就来一…

油猴安装教程及ChatGPT配置

文章目录 目录 文章目录 前言 一. 安装油猴 二、使用步骤 三.安装插件 (ChatGPT) 四. 脚本推荐 前言 作者简介: zuiacsn 座右铭: 抱怨身处黑暗,不如提灯前行 内容介绍: 油猴 油猴(Tampermonkey)指的是一个流行的用户脚本管理器,它能使…

GAMES202作业1

目录 Shadow MapCalcLightMVP函数useShadowMap函数Bias函数 最终效果 PCF两个采样函数PCF函数最终效果 PCSSfindBlocker函数PCSS函数最终效果 参考 先放上公式: 后面的积分项是我们在作业0中就做好的blinnphong项,我们要求的就是积分项前,等…

认识 Protobuf 及其简单使用

文章目录 一、序列化与反序列化1.1 序列化1.2 反序列化1.3 序列化与反序列化的使用场景 二、初识 Protobuf三、Protobuf 的安装四、Protobuf 的使用案例4.1 创建并编写 .proto 文件的基本规范与语法4.2 编译 .proto 文件4.3 序列化与反序列化的使用 五、总结 ProtoBuf 的使用特…

spring boot日志

日志介绍日志的使用日志级别日志持久化更简单的输入日志lombok的运行原理 日志介绍 日志的作用: 1:发现问题; 2:定位问题; 3:记录用户的行为:看哪些是方法用户;还能拿到用户的ip&am…

【云原生|探索 Kubernetes 系列 4】理解现代云原生时代的引擎

文章目录 系列文章目录👹 关于作者一、前言|回顾二、静态和动态视图三、爆火的容器编排工具 Kubernetes 的诞生四、Kubernetes 要解决的问题是什么?五、理解 Kubernetes 全局架构图Master(控制节点)Node(计算节点&…

源码分析:springboot如何确定当前应用程序类型

文章目录 一、介绍二、源码分析三、测试 一、介绍 大多数java后端开发的朋友们想必都是通过创建springboot项目,然后通过编写Controller进行接口开发的,该接口底层是由非响应式的servlet提供支持的,其接口内部逻辑为阻塞式的。但也有一部分朋…

leetcode 837. New 21 Game(新21点)

起始点数为0&#xff0c;当手上点数 < k 时抽取新的卡片&#xff0c; 每次抽取的点数范围在 1 ~ maxPts. 每次收取是独立的&#xff0c;每个点数概率相同。 当手上点数 > k 时游戏结束。 返回手上点数 < n 的概率。 思路&#xff1a; 先看特殊情况&#xff0c; k …

JQuery实现小项目

博主简介&#xff1a;想进大厂的打工人博主主页&#xff1a;xyk:所属专栏: JavaEE初阶 目录 文章目录 一、JQuery是什么 二、JQuery项目 2.1 猜数字 2.2 表白墙 2.3 聚合搜索 2.4 计算器 一、JQuery是什么 jQuery是一个快速、简洁的JavaScript框架&#xff0c;是继Prototype之…

MQTT(1):MQTT协议介绍

随着 5G 时代的来临&#xff0c;万物物联的伟大构想正在成为现实。联网的物联网设备在 2018 年已经达到了 70 亿&#xff0c;在未来两年&#xff0c;仅智能水电气表就将超过10亿 海量的设备接入和设备管理对网络带宽、通信协议以及平台服务架构都带来了很大挑战。对于物联网协议…

pandas 遇到Key Error错误的一个小问题

最近刚刚接触Python&#xff0c;安装了Anaconda&#xff0c; 编程小白一个&#xff0c;照着教程准备做一个中考成绩录取分数线分析的案例&#xff0c; 使用read_excel()读入数据后&#xff0c; import pandas as pd data pd.read_excel(rC:\2021-2022深圳中考录取分数线(1).xl…

SpringBoot配置文件 | 多环境配置 | 读取配置的4种方式

文章目录 一、写配置文件的位置读取的优先级&#xff1a;1.文件位置&#xff1a;2.文件名和文件后缀&#xff1a;3.配置文件中的profile-specific文件&#xff1a;4.命令行参数 二、多环境配置1. properties&#xff1a;2. yaml 三、yaml配置文件yaml、properties、xml对比&…

【软考-中级】系统集成项目管理工程师 【13合同管理】

持续更新。。。。。。。。。。。。。。。 【第十三章】合同管理 2 分 考点 1考点 2考点 3考点4:成本补偿合同考点5:工料合同考点6:合同类型的选择考点 7考点 8:合同管理包括考点9考点 10考点 11考点 12考点 13考点 14考点 15历年真题2022 年 05 月2021 年 11 月2021 年 05 月 考…

Redis底层原理深入学习

一、基本类型及底层实现 1.String 1&#xff09;使用场景&#xff1a;简单字符串存储、分布式锁、计数器、全局唯一ID 2&#xff09;数据结构&#xff1a;C语言中String用char[]表示&#xff0c;源码中用SDS封装char[]&#xff0c;这是Redis存储的最小单元&#xff0c;一个SD…

安全中级3-nginx反向代理负载均衡的webshell

目录 一、负载均衡 1.nginx的负载均衡 2.nginx 支持的几种策略&#xff1a; 二、负载均衡下的webshell连接&#xff08;负载均衡下的wenbshell环境下载地址&#xff09; 1.内部网络的结构 2.场景描述 3.利用我们的中国蚁剑连接我们的代理服务器nginx 三、webshell遇到的…

电脑待机或者睡眠后TeamViewer就无法连接了

电脑待机或者睡眠后TeamViewer就无法连接了 设置睡眠状态下不关闭网卡驱动 公司的笔记本&#xff0c;安装了teamviewer&#xff0c;离开时把teamviewer打开&#xff0c;回家后连接时提示伙伴未在机器上运行&#xff0c;此时电脑处于黑屏、待机、睡眠状态 其实电脑睡眠后会关掉网…

创新管理工具:低代码平台在学校管理中的应用实践

随着信息技术的不断发展&#xff0c;学校管理也随之发生了变革。传统的学校管理方式往往是依靠人工操作&#xff0c;存在信息不透明、效率低下等问题&#xff0c;而数字化管理的出现&#xff0c;可以帮助学校提高管理效率、降低管理成本、提升数据统计和分析能力。而低代码技术…

SWAT模型教程

详情点击链接&#xff1a;SWAT模型教程详情点击链接&#xff1a;SWAT模型&#xff08;建模方法、实例应用、高级进阶&#xff09; 一&#xff1a;基于网络资源的SWAT模型快速建模​ 二&#xff1a;基于遥感产品的SWAT模型率定与验证​ 三&#xff1a;基于水文响应单元&#xff…

相机光圈和快门

相机光圈和快门 光圈光圈结构光圈值由来光圈范围光圈作用控制画面明暗控制画面景深和锐度 自动光圈 Auto IrisDC-IRIS原理及问题P-IRIS工作原理 快门快门简介快门速度与曝光快门速度与运动安全快门速度高速快门和慢速快门B门和T门 参考文献 光圈 光圈结构 光圈&#xff08;Ap…