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

news2024/11/27 20:36:14

电商数据采集接口

语言: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.coloradmin.cn/o/1670994.html

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

相关文章

苍穹外卖Day06笔记(复习了jwt的加密解密和传递)

疯玩了一个月,效率好低,今天开始捡起来苍穹外卖~ 1. 为什么不需要单独引入HttpClient的dependency? 因为我们在sky-common的pom.xml中已经引入了aliyun-sdk-oss的依赖,而这个依赖低层就引入了httpclinet的依赖,根据依…

vue3.0(八) 监听器(watch),高级监听器(watchEffect)

文章目录 watch1 watch的用法2 watch的高级用法3 watch性能优化 watchEffect1 停止监听2 侦听多个状态3 懒执行 watch和watchEffect的区别watch和computed的区别 watch watch特性进行了一些改变和优化。与computed不同,watch通常用于监听数据的变化,并执…

深度求索推出DeepSeek-V2:经济高效的多专家语言模型

AI苏妲己 深度求索发布了DeepSeek-V2混合专家(MoE)语言模型,每百万tokens,2元人民币价格,简直便宜到令人发指(而且不是活动价格噢),可以说是继Groq以后,AI领域最惊艳的新…

PyQt:界面无边框+实现窗口最小化(任务栏图标隐藏+托盘图标显示)

一、整体实现效果 诸如WX、各种管家的桌面显示方式。窗口关闭后,往往是任务栏图标消失,保持右下角托盘图标显示,保持后台运行。双击托盘图标后,窗口显示。 二、代码实现 from PyQt5.QtWidgets import * from ato_upgrade impo…

植物ATAC-seq文献集锦(一)——基因组篇

ATAC-seq(Assay for Transposase-Accessible Chromatin with high-throughput Sequencing)是一种用于探究染色质开放性区域的技术,该技术利用Tn5转座酶接近核小体疏松区域切割暴露的DNA,获得开放的染色质区段(Open Chromatin)&…

快速判断出485从站设备是否支持MODBUS RTU无线通讯

对于变频器和仪表设备,都支持485串口通讯,那么怎么判断从站设备支持那种协议呢?通常分为两种方式去判断:1.从设备参数参看2.从设备通讯报文查看。本次文章以以台达MH300系列变频器为例。 1.从设备通讯参数查看 使用设备之前一定…

Apple store 静安·苹果店欣赏

官网: https://www.apple.com/today/Apple 亚洲第一大商店:Apple 静安零售店现已在上海开幕 静安苹果欣赏

智能体Agent笔记

智能体的定义: 1. 可以感受环境中的动态条件 2. 能采取动作影响环境 3. 能运用推理能力理解信息,解决问题,产生推断,决定动作。 我个人觉得智能体是个饼,最核心的问题是,你如何解决大模型的幻觉问题&…

【mysql】主从同步时出错,如何恢复同步

mysql主从同步出错,这个时候从服务器会停止同步服务,等待人工恢复,此时有多种方法来解决。 一、查看状态 在从服务器,登陆mysql,查询从服务器的状态: 从服务器mysql> show slave status\G 图1 可以看…

迪安诊断数智中心战略与PMO负责人徐黎明受邀为第十三届中国PMO大会演讲嘉宾

全国PMO专业人士年度盛会 迪安诊断技术集团股份有限公司数智中心战略与PMO负责人徐黎明先生受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾,演讲议题为“软件研发项目管理指标体系建设实践”。大会将于6月29-30日在北京举办,敬请关注! …

Cocos 2048从创建到发布上线

一、制作2048小游戏过程 扫描体验2048小游戏 场景搭建,4X4棋盘和基础设置绘制背景板,包含预制体等信息考虑在棋盘中随机出现两个数字方块,数字为2,初始化操作滑动事件部分,让方块移动起来,每滑动一次就生成…

文本分类的深度注意图扩散网络 笔记

1 Title Deep Attention Diffusion Graph Neural Networks for Text Classification(Yonghao Liu、Renchu Guan、Fausto Giunchiglia、Yanchun Liang、Xiaoyue Feng)【EMnlp 2021】 2 Conclusion Text classification is a fundamental task with broad…

【刷题】一篇文章搞定“位运算”

只要春天不死,就有迎春的花朵年年岁岁开放,生命讲涅槃,生生不息,并会以另一种形式永存。 – 路遥 《平凡的世界》 (◦′ᆺ‵◦) ♬ ✧❥✧.•✧♡✧ ℒℴѵℯ ✧♡✧•.❥ (◦′ᆺ‵◦) ♬ ✧❥✧.•✧♡✧ ℒℴѵℯ ✧♡✧•.❥…

工作组PTH

文章目录 简述RID 500本地管理员密码喷洒何为RIP 500 安全标识符SID与RIDPTH为何必须是RID 500CrackMapExec进行密码喷洒 简述 在工作组PTH中为什么只有administrator账号可以,下面进行讲解与利用。RID 500本地管理员密码喷洒 何为RIP 500 安全标识符 安全标识符 安全标识符…

太速科技-基于VU3P的双路100G光纤加速计算卡

基于VU3P的双路100G光纤加速计算卡 一、板卡概述 基于Xilinx UltraScale16 nm VU3P芯片方案基础上研发的一款双口100 G FPGA光纤以太网PCI-Express v3.0 x16智能加速计算卡,该智能卡拥有高吞吐量、低延时的网络处理能力以及辅助CPU进行网络功能卸载的能力…

P5490.扫描线(python)

这个洛谷怎么对于python不太友好呢,没几次能全过的 本题使用扫描线的模板,首先把所有x坐标排序去重,放进列表X中。把所有横线lines排序。这样把所有矩阵都分成了块。对于每一块,高lines[i1]-lines[i],宽就等于在这一块…

js图片回显的方法

直接上代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body>// HTML部分<input type"file" id"fileInput"><button onclick"show…

AI虚拟伴侣方案

打造类似Character AI的产品,现成的训练好的模型方案,适合做陪伴型虚拟女友等项目,近期看到的最佳项目: 1、项目背景: (1)项目动机:角色扮演LLM是AI的第二大消费用例,但通常被开源社区忽视。 (2)行业现状:缺乏与https://character.ai/提供的角色扮演LLM相对应的…

SpringBoot集成Curator实现Watch事件监听

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 Zookeeper是一个Ap…

jenkis

文章目录 安装插件配置构建超时自动停止 安装插件 在线安装&#xff1a;安装jenkins后&#xff0c;初次启动的时候安装插件 在线安装&#xff1a;插件管理&#xff0c;可选插件中 离线安装&#xff1a;下载插件(.hpi格式) 使用该方法安装插件每次只能安装一个插件&#xff0c;…