电商平台接口自动化框架实践||电商API数据采集接口

电商数据采集接口

语言:python

接口自动化实现流程

  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.mzph.cn/bicheng/11426.shtml

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

相关文章

processing完整教程

概述:processing在我眼里就是libgdx的高度封装,如果各位会libgdx,学processing应该可以说是无师自通,当然processing是java语言那边的。 processing是什么? 官网是这样解释的:Processing 是一本灵活的软件…

每周一算法:无向图的最小环

题目链接 观光之旅 题目描述 给定一张无向图,求图中一个至少包含 3 3 3 个点的环,环上的节点不重复,并且环上的边的长度之和最小。 该问题称为无向图的最小环问题。 你需要输出最小环的方案,若最小环不唯一,输出…

core.sshd.xxxxxx文件过大

背景 【紧急】【应用分组】应用: 接入点服务, 分组: 观众预发, ip: xx.xx.xx.xx 【/】,磁盘使用率已连续2次大于90% [当前值:100%]。报警时间: 2024-05-13 14:07:01 原因 登录机器查看,发现根目录下有大量的崩溃文件将 / 打满 处理 1, 删…

【图解计算机网络】TCP 重传、滑动窗口、流量控制、拥塞控制

TCP 重传、滑动窗口、流量控制、拥塞控制 TCP 重传超时重传快速重传 滑动窗口流量控制拥塞控制慢启动拥塞避免拥塞发生快速恢复 TCP 重传 TCP重传是当发送的报文发生丢失的时候,重新发送丢失报文的一种机制,它是保证TCP协议可靠性的一种机制。 TCP重传…

mysql 离线安装

package download mysql https://dev.mysql.com/downloads/mysql/ libaio http://mirror.centos.org/centos/7/os/x86_64/Packages/libaio-0.3.109-13.el7.x86_64.rpm 根据自己服务器选择下载对应的安装包及依赖 删除本机自带mysql相关 # 首先排查服务器自身是否有安装对应m…

抖音小店怎么运营才能出单呢?就这一个步骤做好,爆单不是梦!

哈喽~我是电商月月 新手做抖音小店绝对会有这两个问题:怎么运营?不出单怎么办?被这两个问题困扰着的商家,别着急! 看完我这一篇分享,你就知道自己的问题所在了! 抖音小店的运营中&#xff0c…

找不到msvcp100.dll,无法继续执行代码的问题详细解析

当您在运行某个程序或游戏时遇到提示“找不到msvcp100.dll,无法继续执行代码”,这通常意味着系统中缺失了一个重要的动态链接库文件,从而导致应用程序无法正常启动。为了解决这个问题,本文将介绍5种常见的解决方法,帮助…

法国签证照片尺寸怎么调整?图片调整尺寸的方法介绍

在我们的平时生活中,个人证件照是我们必不可少的身份证明,它是一种具有严格尺寸和比例要求的特殊照片,对于一些特定的场合,比如我们在申请法国签证的时候,需要把照片调整到规定的大小尺寸,那么,…

数字人实训室助推元宇宙人才培养

如今,全身动作捕捉设备已经大量应用在影视、动画、游戏领域,在热门的元宇宙内容领域中,全身动作捕捉设备逐步发挥着重要的作用,在包括体育训练、数字娱乐虚拟偶像、虚拟主持人、非物质文化遗产保护等等场景,数字人实训…

通过任意文件读取获取weblogic账号密码

对于weblogic获取到账号密码的前提是有任意文件读取存在,当任意文件读取存在时是可以读取配置文件来对账号密码进行解密。weblogic密码使用AES(老版本3DES)加密,对称加密可解密,只需要找到用户的密文与加密时的密钥即可…

为什么跨境电商大佬都在自养号测评?看完你就懂了!

在跨境电商的激烈竞争中,各大平台如亚马逊、拼多多Temu、shopee、Lazada、wish、速卖通、煤炉、敦煌、独立站、雅虎、eBay、TikTok、Newegg、Allegro、乐天、美客多、阿里国际、沃尔玛、Nike、OZON、Target以及Joom等,纷纷成为商家们竞相角逐市场份额的焦…

【C#】.net core 6.0 ApiController,API控制器方法,API接口以实体类作为接收参数应该注意的点

欢迎来到《小5讲堂》 这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 背景实体类参数API接口不可空参数可空参数参数类型MVC历程相关文章 背…

【kettle012】kettle访问FTP服务器文件并处理数据至PostgreSQL(已更新)

1.一直以来想写下基于kettle的系列文章,作为较火的数据ETL工具,也是日常项目开发中常用的一款工具,最近刚好挤时间梳理、总结下这块儿的知识体系。 2.熟悉、梳理、总结下FTP服务器相关知识体系 3.欢迎批评指正,跪谢一键三连! kettle访问FTP服务器文件并处理数据至PostgreS…

南京中科微Ci24R1(DFN8)无线收发射频芯片性能介绍

Ci24R1是南京中科微研发的低成本高性能2.4GHz GFSK 无线收发芯片(支持蓝牙版),专为低功耗无限场合设计,集成嵌入式ARQ基带协议引擎的无线收发器芯片。 工作频率为2400MHz-2525MHz,共有126个1MHz带宽的信道&#xff0c…

美股开户,你需要知道这些!

想投资美股,却不知道开户需要多少钱? 别担心,这篇专栏将告诉你美股开户的资金要求以及相关注意事项。 1. 美股开户需要多少钱? 答案是:有的,但门槛并不高。不同平台对开户资金的要求有所不同,一…

APP反抓包 - 服务端证书验证

案例引入: app:泡泡聊天 版本:v1.7.4 发送登录请求,抓包发现提示:403 Forbidden 这里就是使用了服务端证书校验,因为charles没有安装证书,所以到达服务器的响应没有通过验证,返回异常。 美之图: 一,校验逻辑 在安卓开发时,在客户端预设证书(p12/bks),客户端…

flink cdc,读取datetime类型

:flink cdc,读取datetime类型,全都变成了时间戳 Flink CDC读取MySQL的datetime类型时会转换为时间戳的问题,可以通过在Flink CDC任务中添加相应的转换器来解决。具体来说,可以在MySQL数据源的debezium.source.converter配置项中指…

AI仿站源码教程

AI仿站源码教程 随着AI技术的不断发展,仿站技术已经越来越成熟,通过AI一键仿站,开发者们可以更快速、更高效地搭建网站。传统的前端开发过程中,需要大量的手工编码和设计,而AI仿站技术可以通过截图或视频,…

智慧公厕:数据驱动的公共厕所智慧化管理

公共厕所作为城市基础设施的重要组成部分,对于城市居民的生活质量和城市形象有着不可忽视的影响。然而,传统的公共厕所管理模式存在诸多问题,如设施老化、卫生状况不佳等,严重限制了公众对于公共厕所的使用体验。随着大数据和智能…

计算机毕业设计系列~~~基于SSM的宠物销售网站

目录 一、项目介绍 二、开题报告 三、项目截图 一、项目介绍 本项目是一款基于SSM的宠物销售网站,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1. 包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2. …