电商平台接口自动化框架实践

news2024/11/15 15:32:28

技术栈

Mimproxy(抓包)+pytest+allure+docker+Jenkins+gitlab

语言:电商API接口自动化实现流程

  1. 红色为可实现/尚未完成

  2. 绿色为需要人工干预部分

图片

自动生成测试用例模板(俩种方式二选一):

  1. mimproxy,通过浏览器代理抓包方式,访问 H5 或者 web 页面,将指定域名的接口请求抓包生成标准的测试用例模板+测试数据集

    图片


    抓包流程图

  2. yapi 导出接口标准的 swaggerjson 文件、将指定 tag 的接口导入到测试用例模板

  3. 测试数据集也可以通过 mitmproxy 抓包生成

Cases 生成器,根据测试用例模板,生成标准 TestCases 代码,一个接口为一个 module

  1. 测试用例模板支持预置一些基本断言,包括:状态码校验、响应时间断言、关键字断言、jsonpath 断言、jsonpath 长度断言等,可根据需要进行扩展

  2. 测试用例模板支持对测试用例添加 mark,不添加的话会默认初始化一个 mark,后续 pytest 执行时可以指定执行哪些 mark

  3. 测试用例模板支持添加前置操作(比如执行前置关联接口等,在测试 case 脚本里体现为生成 setupclass 方法)

  4. 测试用例模板支持添加后置操作,主要用途为传递变量(如将该接口返回的指定值写入全局变量中)

如需要自定义断言,将生成的 TestCases 脚本拷贝到新建的 package 下(注意必须是 package,而不能只是一个目录)

  1. 引入私有断言库和一些工具操作类,维护私有断言目前已有的比对和工具操作类,包括:elasticsearch 操作类、redis 操作类、mysql 操作类、sqlserver 操作类、excel 操作类、json 操作类

  2. Json 解析、Json 深度遍历、Json 比对计划增加断言库:通过yapi 导入接口模板时,再增加导入接口 responsebody 的 jsonschema 定义

  3. 引入 python 的 jsonschema 包,增加接口返回 body 的 json 格式校验。

测试数据如何去维护
1. 每一个接口都有其对应的测试数据存储表 datacenter_[项目名称][method][apipath]
2. 表中固定字段:datadesc为数据标签,用于标记该数据,该标签是模糊匹配
3. 正向业务数据[PositiveTest]
4. 反向数据-非法输入[InvalidInput]
5. 反向数据-类型错误[TypeError]
6. 反向数据-适用于GET查询类接口的[empty]等等

自动生成通用测试数据:
1. Check下每个接口的输入参数,是否有范围限制,举个例子:pageSize,限制输入范围1-50,将此类数据手动维护到datacenter_testdatalimit表中,记录参数的range
2. 调用生成通用测试数据的接口,数据中心将针对指定项目下指定接口,批量生成通用测试数据包括:
3. 根据参数range,生成的边界值测试数据
4. 根据是否必填(程序自动采集的),生成的空值、delete测试数据
5. 根据参数类型(程序自动采集) :integer、string、double、boolean等,生成的校验数据类型的反向测试数据,比如:int32型,则生成string、小数、特殊字符、超出int32数值范围的测试数据
6. 根据参数是否支持多值(程序自动采集) ,生成只包含分割符、空格的空数组格式的测试数据

拉取被测系统的测试数据:
1. 根据不同系统的自身业务,定制采集数据的sql,输出到对应接口的测试数据表
2. 此部分需要根据业务自定义,可以抽出通用方法:传入sql集合和接口存储表作为参数
3. 被测系统的数据源在setting配置文件里维护

浏览器抓包(流量录制):
1. 前提:被测接口已经有web前端在调用,被测系统前后端分离,且前端不是用的服务端渲染技术
2. 启动基于mitmproxy包二次开发的录制脚本,指定代理端口如8080,指定需要抓包的3. 请求前缀,如:http://dsapi.xdf.cn
4. 启动浏览器,开启8080代理端口
5. 点点点web前端,享受一边测试业务系统一边自动录制接口业务数据的美妙旅程吧~~

如何去做断言:
Test_[method]_[apipath].py 重写正向断言方法
系统内置的常用断言方法:

  1. 项目根路径下的client.py模块下Http类
    该类封装requests方法,主要用于发送请求
    解析请求响应报文,封装属性方法,用于取请求响应的状态码、jsonpath值、body、content内容
    封装基本的断言方法,包括check:状态码、响应时长、关键字、json值

  2. tools.util包下封装了mysql、sqlserver、elasticserch、redis、excel、json操作类

  3. tools.customAssert.commonAssert提供【json对象比对、字典比对、列表比对】 3个常用方法
    2和3结合起来可以实现接口返回数据和数据库、redis、elasticsearch 进行比对断言

执行测试用例输出报告:
1. Pytest支持命令行方式直接执行指定目录下的所有测试代码,有很丰富的插件,支持多线程、按mark过滤测试用例、失败重跑机制……
2. 支持在pytest.ini添加运行时配置,自行学习这一部分内容
3. Pytest有allure插件,在执行命令里添加alluredir,即可自动将执行结果result输出到指定目录下
4. 再用allure generate命令,将输出的result转成html报告
5. 本框架内置执行脚本,runPytest_Private.py ,将pytest执行命令和allure生成报告命令串起来,实现一键完成执行测试、输出报告功能

配置中心

配置全局变量、接口访问域名、数据库/es/redis 连接信息等

图片

Cases代码示例:

图片

执行 Cases

run 脚本执行指定项目的测试用例,目前两种模式:

1、根据配置中心配置的 TESTCASEFILE(支持多个 file 文件),通过 runPytest.py 去执行,执行过程为:

a) 读取对应的测试用例模板文件 xlsx
b) 自动在 TestCases 包下生成接口测试代码
c) 执行 TestCases 包根目录下的所有 Test 开头的测试用例
d) 生成 Allure 报告

此种方法,测试用例的断言必须在测试用例模板文件里提前维护好,一般用于简单断言,如:响应状态码、长度、固定值断言,简单 sql 的数据库断言等等,可以用此种方法。

如需要编写复杂 sql 进行数据库断言、进行 es/redis 断言,需要进行复杂数据处理的,建议自己手工编写断言代码

2、runPytest_Private.py 带上 projectName 参数执行测试用例

a) 执行 Cases 生成器,把维护好的测试用例模板生成接口测试代码,路径也在TestCases 包的根目录
b) 在 TestCases 包下新建 subPackage,按照自己的项目名称命名,如 projectA
c) 把自动生成的接口测试代码文件,拷贝到 projectA 下
d) 编写自己的断言代码
e) 执行 runPytest_Private.py projectA:
将执行 projectA 下所有的测试用例代码,也可以修改runPytest_Private.py 里的代码执行指定 mark 的接口用例
f) 生成 Allure 报告
g) Push 钉钉消息,消息里带上用例总量、失败数量、报告路径
h) 集成 JENKINS 方案:

打包带有 python、openjdk、allure 插件的 docker 镜像,镜像里安装好自动化框架依赖的第三方模块

Jenkins 拉取gitlab 自动化代码到宿主机指定路径

运行 docker 容器,将容器里的工作目录和宿主机的自动化脚本目录挂载上,容器运行时即自动运行自动化,执行完成后,容器自动销毁,保存报告到宿主机

Push 钉钉消息,推送当前运行结果和报告路径

Allure 报告所在大目录集成到 jenkins,通过访问 jenkins 地址查看对应报告

Allure报告示例:

图片

当下问题和优化方案

1、测试数据维护

目前困境:

电商平台souke 的测试数据非自产数据,测试数据极容易随着时间过期,导致一部分测试数据失效,代码覆盖率下降,如果自己造数据成本比较高,也不真实

解决思路:

增加加工测试数据的数据工厂:

前置条件:目前用 csv 维护的测试数据集迁移到 sqllite 数据库技术栈:

计划使用 pandas 数据分析利器,也能很好的支持导入导出 excel 和数据库数据

实现思路:

划分等价类,制定测试数据的筛选规则,从被测数据库同步测试数据到测试数据集

制定通用的测试数据生成规则,根据参数的类型自动生成通用的测试数据,主要用在参数格式、特殊字符等反向测试

2、代码覆盖率测试

目前情况:

目前只是根据测试经验,依据等价类划分,手工寻找测试数据用于测试,不能完全保证测试覆盖率

后续计划:

电商平台souke 用的 java 技术栈,后续计划把 jacoco 与电商接口自动化相结合,接口自动化脚本执行完成后统计代码覆盖率

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

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

相关文章

074:vue+mapbox 加载here地图(影像瓦片图 v2版)

第074个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中加载here地图的影像瓦片图 v2软件版本。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共77行)相关API参考:专栏目标示例效果

区块链游戏:Web3时代玩法的全新演绎

随着区块链技术的蓬勃发展,区块链游戏正成为数字娱乐领域的一颗璀璨明珠。在Web3时代,区块链游戏以其去中心化、透明、可验证的特性,为玩家带来了全新的游戏体验。本文将深入探讨区块链游戏在Web3时代的崭新玩法和引领未来的可能性。 1. 去中…

GPTBots:利用FlowBot中的卡片和表单信息,提供丰富的客服体验

在当今的数字化时代,客户服务的形式和体验正在经历着前所未有的变革。传统的文字消息方式已经无法满足现代用户对于服务体验的多元化需求。那么,如何才能在这个信息爆炸的时代,让我们的服务方式更加个性化、多样化,从而提供更丰富…

分享一个“产业级,开箱即用”的NLP自然语言处理工具

NLP的全称是Natuarl Language Processing,中文意思是自然语言处理,是人工智能领域的一个重要方向 自然语言处理(NLP)的一个最伟大的方面是跨越多个领域的计算研究,从人工智能到计算语言学的多个计算研究领域都在研究计…

记录一次从有道云笔记迁移到语雀笔记

推荐阅读 智能化校园:深入探讨云端管理系统设计与实现(一) 智能化校园:深入探讨云端管理系统设计与实现(二) 1、安装git,python3等准备工作 文章中标注python3,为避免与python2 冲…

【正点原子STM32】C语言重点知识(配置MDK支持C99、位操作清零置一、带参数的宏定义、头文件的条件编译和代码条件编译、关键字、结构体指针、代码规范)

一、stdint.h简介 配置MDK支持C99 二、位操作 如何给寄存器某个位赋值(清零置一) 三、宏定义 带参数的宏定义 四、条件编译 头文件的条件编译和代码条件编译 五、extern声明 六、类型别名(typedef) 类型别名应用 七、结构体 应用举例&#xf…

muduo网络库剖析——线程Thread类

muduo网络库剖析——线程Thread类 前情从muduo到my_muduo 概要框架与细节成员函数使用方法 源码结尾 前情 从muduo到my_muduo 作为一个宏大的、功能健全的muduo库,考虑的肯定是众多情况是否可以高效满足;而作为学习者,我们需要抽取其中的精…

CentOS7安装Docker和docekr-compose

CentOS7安装Docker Docker 分为 CE 和 EE 两大版本。CE免费版,EE付费版 Docker CE 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10 第一步、检测系统环境 如果之前或者安装系统时候自带docker的话可以卸载(可选) 如果之…

用ChatGPT教学、科研!亚利桑那州立大学与OpenAI合作

亚利桑那州立大学(简称“ASU”)在官网宣布与OpenAI达成技术合作。从2024年2月份开始,为所有学生提供ChatGPT企业版访问权限,主要用于学习、课程作业和学术研究等。 为了帮助学生更好地学习ChatGPT和大语言模型产品,AS…

Linux下软件安装的命令【RPM,YUM】及常用服务安装【JDK,Tomcat,MySQL】

Linux下软件安装的命令 源码安装 以源代码安装软件,每次都需要配置操作系统、配置编译参数、实际编译,最后还要依据个人喜好的方式来安装软件。这个过程很麻烦很累人。 RPM软件包管理 RPM安装软件的默认路径: 注意: /etc 配置文件放置目录…

基于Java SSM框架实现共享单车管理系统项目【项目源码+论文说明】

基于java的SSM框架实现共享单车管理系统演示 摘要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于共享单车管理系统当然也不能排除在外,随着网络技术的不断成熟,带动了…

鸿蒙自定义刷新组件使用

前言 DevEco Studio版本:4.0.0.600 1、RefreshLibrary_HarmonyOS.har,用于HarmonyOS "minAPIVersion": 9, "targetAPIVersion": 9, "apiReleaseType": "Release", "compileSdkVersion": "3.…

核苷酸与相对论的数学关系猜想

质量-鸟嘌呤 M-G 金 收缩 能量-胸腺嘧啶 E-T 火 混沌 时间-胞嘧啶 T-C 水 次序 空间-腺嘌呤 S-A 木 扩散 确定了这三种对应关系之后,我们就可以用相对论里面的数学关系来确定基因的关系 四边形理论有六个方…

python24.1.22创建类-定义对象属性

类:创建对象的模板,定义对象的属性和方法 对象:类的实例 Pascal命名法定义类名称 定义类 创建对象 返回对象属性

【百面机器学习】读书笔记(一)

本文系列主要作用就是读书笔记,自己看的话比较杂,没怎么归类过,所以现在跟着这个分类走一遍。本文主要内容为前两章,特征工程和模型评估。 如果我想起一些相关的内容也会做适当的补充,主打就是一个intuition&#xff…

基于XG24-EK2703A的BLE HID蓝牙键盘+鼠标复合设备功能开发(BLE+HID+FreeRTOS+Gecko SDK)

目录 项目介绍硬件介绍项目设计开发环境及工程参考总体流程图硬件基本配置应用初始化按键中断回调定时器回调按键响应任务蓝牙事件回调BLE HIDReport Map及报文键盘设备鼠标设备复合设备 发送字符串上/下滚动 功能展示项目总结 👉 【Funpack3-1】基于XG24-EK2703A的…

Django后台列表显示图片

在列表中显示ImageField的图片预览 编辑应用的models.py&#xff0c;添加下面代码&#xff1a; class Product(models.Model):# ...image models.ImageField(upload_toproducts/%Y/%m/%d, blankTrue)def image_data(self):if self.image:return format_html(<img src"…

2017年认证杯SPSSPRO杯数学建模B题(第二阶段)岁月的印记全过程文档及程序

2017年认证杯SPSSPRO杯数学建模 B题 岁月的印记 原题再现&#xff1a; 对同一个人来说&#xff0c;如果没有过改变面容的疾病、面部外伤或外科手术等经历&#xff0c;年轻和年老时的面容总有很大的相似性。人们在生活中也往往能够分辨出来两张不同年龄段的照片是不是同一个人…

Elasticsearch:介绍 kNN query,这是进行 kNN 搜索的专家方法

作者&#xff1a;来自 Elastic Mayya Sharipova, Benjamin Trent 当前状况&#xff1a;kNN 搜索作为顶层部分 Elasticsearch 中的 kNN 搜索被组织为搜索请求的顶层&#xff08;top level&#xff09;部分。 我们这样设计是为了&#xff1a; 无论分片数量多少&#xff0c;它总…

【人工智能大脑】仿生学与人工智能交汇:基于MP神经网络的精准农业实践

MP神经网络&#xff0c;即McCulloch-Pitts模型&#xff08;MCP Model&#xff09;&#xff0c;是神经网络的早期形式之一&#xff0c;由Warren McCulloch和Walter Pitts在1943年提出。这个模型为现代人工神经网络的发展奠定了理论基础&#xff0c;并首次尝试模拟了生物神经元的…