当前位置: 首页 > news >正文

扩展pytest接口自动化框架-MS数据解析功能

【软件测试行业现状】2023年了你还敢学软件测试?未来已寄..测试人该何去何从?【自动化测试、测试开发、性能测试】

开篇
MeterSphere的数据源通过html页面上传后,需要将请求方式进行拆分。

get接口的参数,常以params的方式进行传参,也就是在url后带上参数。

post接口一般是以json字符串的形式传参,也有params方式进行传参的。而在MeterSphere里面,post可以使用它所自带的jsonSchema的界面功能来定义参数,也就是key-value的方式。也可以手写json。这里我们以jsonSchema的方式进行解析。

基于这两种类型的接口(put、delete接口也遵循get接口)来做分支。get接口走get接口参数的生成方法。post同理。

沿着这个思路,就开始着手准备自动化脚本逆向用例生成的第一个函数。

思路梳理
首先确定我们所想要的用例模板以及我们要解析的数据结构。我将两个数据结构的示例都列在了下面。
明确了目标,最先要做的,就是获取数据流
获取到数据流后,判断接口请求的类型
根据请求类型,将数据流分成不同的分支,然后发给所对应的生成参数的方法。
最后将这些参数拼接成我们想要的用例模板
下例为MeterSphere的json格式示例

{"projectName": "","protocol": "HTTP","projectId": ","version": "v1.20.6-lts-1e3d1547","data": [{"id": "","projectId": "","name": "测试","method": "POST","modulePath": "/path1/path2/...","environmentId": null,"schedule": null,"status": "Underway","moduleId": "","userId": "admin","createTime": 1655860767171,"updateTime": 1655860767171,"protocol": "HTTP","path": "/api/v1/pub/stop","num": 100666,"tags": null,"originalState": null,"createUser": "Administrator","caseTotal": "0","caseStatus": "-","casePassingRate": "-","deleteTime": null,"deleteUserId": null,"order": 3155000,"refId": "08f6bde7-c906-459d-8a9b-95632bbeb5ee","versionId": "989beb9c-ebc8-45d3-8a80-967b06f2d192","latest": true,"description": null,"request": "{name:ss,canshu:111}","response": "respone","remark": null}],"cases": [],"mocks": [],
}

下例为最后解析成的用例样式

- api_name: callback_roomscase_name: $ddt{case_name}content_type: application/jsonparameterize:- - case_name- 字段1- 字段2- 字段3- - 常规用例- oU- 70- 79request:base_url: url...headers: nulljson:root:字段1: $ddt{字段1}字段2: $ddt{字段2}字段3: $ddt{字段3}method: POSTurl: /xxx/xxxvalidata:- contains: 200

得到MeterSphere数据并做解析

# 得到MeterSphere数据并做解析
def get_ms_data(filename):"""get_data: 数据源apis: 接口清单get_params: get请求参数api_name: 接口名称method: 请求方式get_apis: get接口:return:拼接好的数据集"""# 所有接口的字典数据集合apis = {}# 获取ms文件流with open(filename, "r", encoding="utf-8") as f:request_params = json.load(f)# 解析参数.判断接口是什么请求for i in request_params["data"]:get_data = ipath = get_data["path"]api_name = str(path).split("/")if len(api_name) > 1:api_name = api_name[-2] + "_" + api_name[-1]else:api_name = api_name[-1]method = get_data["method"]get_apis = {path: {"api_name": api_name,"method": method,"content_type": "application/json"}}if method.lower() in ["get", "put", "delete"]:# 如果是get请求.调用解析get参数try:# 调用生成params参数get_params = get_arguments(json.loads(get_data["request"])["arguments"])get_apis[path].update(get_params)apis.update(get_apis)except Exception as e:print_log(Exception(e))else:try:# 兼容post接口中的请求参数是parasm类型if "arguments" in get_data["request"] and "jsonSchema" not in json.loads(get_data["request"])["body"]:# 调用生成params参数get_params = get_arguments(json.loads(get_data["request"])["arguments"])get_apis[path].update(get_params)get_apis[path]["content_type"] = "application/text"apis.update(get_apis)else:# 兼容post是jsonSchema对象的参数类型if "jsonSchema" in json.loads(get_data["request"])["body"]:try:global NODENODE = Truepost_params = deal_with_data(data=json.loads(get_data["request"])["body"]["jsonSchema"],required_list=json.loads(get_data["request"])["body"]["jsonSchema"]["required"])get_apis[path].update(post_params)apis.update(get_apis)except KeyError:post_params = deal_with_data(data=json.loads(get_data["request"])["body"]["jsonSchema"])get_apis[path].update(post_params)apis.update(get_apis)else:print("测试")# 后续迭代...except Exception as e:print_log(Exception(e))raise Exception(e)return apis

这个函数我把它构想成一个经理,接到需求后,根据每个人的职责不同,分给所对应的人。然后接收这些手下的工作反馈,把这些反馈组装成报告。

在编写过程中,只是一股脑的想把这件事做完。忽略了定义函数时需要遵循的单一职责原则(SRP原则,在python工匠中提到,每个函数应该遵循单一职责。这样方便后期维护)。上面这个函数,即做了类型判断的工作,也做了数据拼接、分配给指定函数的工作。这样如果要修改某一个职责的话。这个函数就需要做好整体维护的准备。基于此大家在编写函数的时候,也尽可能保证函数的单一职责。
下面是配套学习资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

软件测试面试小程序

被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

涵盖以下这些面试题板块:

1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础

 

文档获取方式:

这份文档,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

相关文章:

扩展pytest接口自动化框架-MS数据解析功能

【软件测试行业现状】2023年了你还敢学软件测试?未来已寄..测试人该何去何从?【自动化测试、测试开发、性能测试】 开篇 MeterSphere的数据源通过html页面上传后,需要将请求方式进行拆分。 get接口的参数,常以params的方式进行传…...

docker容器安装MongoDB数据库

一:MongoDB数据库 1.1 简介 MongoDB是一个开源、高性能、无模式的文档型数据库,当初的设计就是用于简化开发和方便扩展,是NoSQL数据库产品中的一种。是最 像关系型数据库(MySQL)的非关系型数据库。 它支持的数据结构…...

Python机器学习实战-特征重要性分析方法(3):迭代删除法:Leave-one-out(附源码和实现效果)

实现功能 迭代地每次删除一个特征并评估准确性 实现代码 from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import accuracy_score impo…...

Go的error接口

从本书的开始,我们就已经创建和使用过神秘的预定义error类型,而且没有解释它究竟是什么。实际上它就是interface类型,这个类型有一个返回错误信息的单一方法: type error interface { Error() string } 创建一个error最简单的方…...

RabbitMQ 集群 - 普通集群、镜像集群、仲裁队列

目录 一、RabbitMQ 集群 1.1、前言 1.2、普通集群 1.3、镜像集群 1.4、仲裁队列 一、RabbitMQ 集群 1.1、前言 前面我们已经解决了消息可靠性问题,以及延迟消息问题 和 消息堆积问题. 这最后一章,我们就来解决以下 mq 的可用性 和 并发能力. 1.2、…...

高项新版教程(第四版)解读+学习指导

第四版主要内容 技术部分 信息化教程、软件工程、网络技术是原来的,学习原来的录播。 新基建、工业互联网、车联网、农业现代化、数字化转型、元宇宙等是新增,以直播讲。 管理部分 变化不是太大 。 整合管理、人力变为资源管理、风险管理新增内容。 …...

【Debian】Debian10.0.0安装选项问答

debian的LXQT是什么? LXQT是一套轻量级的桌面环境,主要基于Qt框架开发。 LXQT在debian中的具体特点包括: - 使用Openbox作为窗口管理器,提供平铺式窗口布局。 - 文件管理器为PCManFM-Qt。 - 设置中心集成 debconf 配置界面。 - 支持GTK和Qt应用程序。 - 资源消耗较低…...

【基于React-Native做位置信息获取,并展示出来】

基于React-Native做位置信息获取 在这个里面最重要的是两个部分&#xff0c;一个是位置定位的权限获取&#xff0c;一个是实时位置的监听&#xff0c;在安卓项目中&#xff0c;在 android/app/src/main/AndroidManifest.xml该文件下&#xff0c;在< manifest > 标签内写…...

ansible安装、点对点Ad-Hoc、模块、剧本Playbook

DevOps: 官网&#xff1a;https://docs.ansible.com 自动化运维工具对比 C/S 架构:客户端/服务端 Puppet:基于 Ruby 开发,采用 C/S 架构,扩展性强,基于 SSL,远程命令执行相对较弱 SaltStack:基于 Python 开发,采用 C/S 架构,YAML使得配置脚本更简单.需要配置客户端及服务器…...

Ceph入门到精通-ceph pool 删除导致 misplaced 的原因

misplaced 的原因 Ceph中的misplaced对象是指将对象&#xff08;或对象的副本&#xff09;存储在错误的位置上&#xff0c;这可能会导致性能下降或数据不一致的问题。在删除Ceph池时&#xff0c;可能会导致misplaced的原因有以下几个&#xff1a; 删除过程中的操作失误&#x…...

计算机组成原理课程设计

操作控制和顺序控制 操作控制就是由各种微命令来构成的顺序控制就是由P测试和后续微地址构成的 这就构成了整个微指令的三个部分 访存指令就是实现对主存中的数据进行访问或存储 一、 操作控制字段是由各种微命令来构成的&#xff0c;这些微命令怎么来设计&#xff1f; 一个萝卜…...

《从菜鸟到大师之路 MySQL 篇》

《从菜鸟到大师之路 MySQL 篇》 数据库是什么 数据库管理系统&#xff0c;简称为DBMS&#xff08;Database Management System&#xff09;&#xff0c;是用来存储数据的管理系统。 DBMS 的重要性 无法多人共享数据 无法提供操作大量数据所需的格式 实现读取自动化需要编程…...

使用qt完善对话框功能

1、 完善登录框 点击登录按钮后&#xff0c;判断账号&#xff08;admin&#xff09;和密码&#xff08;123456&#xff09;是否一致&#xff0c;如果匹配失败&#xff0c;则弹出错误对话框&#xff0c;文本内容“账号密码不匹配&#xff0c;是否重新登录”&#xff0c;给定两…...

Day 03 python学习笔记

位运算 基于二进制的运算&#xff08;计算机的底层基于位运算&#xff09; 计算机最小单位&#xff1a;bit (比特/位/二进制) 1byte&#xff08;字节&#xff09; 8bit &#xff08; 0000 0000&#xff09; &&#xff1a;与 &#xff08;全真为真&#xff0c;一假则…...

优化类问题概述

数学建模系列文章&#xff1a; 以下是个人在准备数模国赛时候的一些模型算法和代码整理&#xff0c;有空会不断更新内容&#xff1a; 评价模型&#xff08;一&#xff09;层次分析法&#xff08;AHP&#xff09;,熵权法&#xff0c;TOPSIS分析 及其对应 PYTHON 实现代码和例题…...

第一个 Go 程序“hello,world“ 与 main 函数

第一个 Go 程序"hello&#xff0c;world" 与 main 函数 文章目录 第一个 Go 程序"hello&#xff0c;world" 与 main 函数一.创建“hello&#xff0c;world”示例程序二. “hello&#xff0c;world” 程序结构拆解三、main 函数四、Go 语言中程序是怎么编译…...

MySQL缓冲池Buffer Pool

前言 ​ 在应用系统中&#xff0c;为加速数据访问&#xff0c;会把高频的数据放在「缓存」(Redis、MongoDB)里&#xff0c;减轻数据库的压力。在操作系统中&#xff0c;为了减少磁盘IO&#xff0c;同时为了快速响应&#xff0c;引入了「缓冲池」(buffer pool)机制。 ​ MySQL…...

springboot实现发送邮箱验证码

准备工作 在邮箱官网开放SMTP授权&#xff0c;获取相应密钥&#xff0c;才可以进行发送邮件 这里以网易163邮箱为例&#xff0c;登录邮箱后&#xff0c;依次点击“设置-POP3/SMTP/IMAP” &#xff0c;然后开启SMTP服务。这时候会提示一个授权码&#xff0c;例如&#xff1a;H…...

ESP8266使用记录(三)

通过udp把mpu6050数据发送到PC端 /********************************************************************** 项目名称/Project : 零基础入门学用物联网 程序名称/Program name : ESP8266WiFiUdp_12 团队/Team : 太极创客团队 / Taichi-Maker (w…...

基于微信小程序的在线视频课程学习平台设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言用户微信端的主要功能有&#xff1a;管理员的主要功能有&#xff1a;具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉…...

CloudCompare 二次开发(15)——点云添加高斯噪声

目录 一、概述二、代码集成三、结果展示一、概述 不依赖任何第三方点云相关库,使用CloudCompare编程实现点云添加高斯噪声。添加高斯噪声的算法原理见:PCL 点云添加高斯噪声并保存。 二、代码集成 1、mainwindow.h文件public中添加: void doActionAddGassNoise(); //…...

一波免费、好用的API接口分享

全国快递物流地图轨迹查询&#xff1a;【H5物流轨迹、单号识别】通过物流单号和收寄件地址&#xff0c;自动评估物流时效&#xff0c;并在地图中展示包裹运输轨迹。包括顺丰、圆通、申通等主流快递公司。自动识别快递公司及单号&#xff0c;实时查询&#xff0c;稳定高效&#…...

Android App ~ LiveData

LiveData 两种更新数据方式 setValue(T value)postValue(T value) setValue()只能在主线程中调用&#xff0c;postValue()可以在任何线程中调用。 MutableLiveData 1.首先LiveData其实与数据实体类(POJO类)是一样的东西,它负责暂存数据. 2.其次LiveData其实也是一个观察者…...

全球第4大操作系统(鸿蒙)的软件后缀.hap

system exe 2022-12-01 04:38:38 首页 > 操作系统 145|0条评论 鸿蒙OS兼容已有安卓程序&#xff1a;这事不稀奇。 其实一个系统兼容另外系统的可执行程序并非新鲜事&#xff0c;比如linux下的wine和crossover可以兼容许多win系统的.exe程序。 作为回应&#xff0c;Wind…...

算法练习第六十四天

LCR 184. 设计自助结算系统 - 力扣&#xff08;LeetCode&#xff09; 总结&#xff1a;利用一个双端维护队列一个往后递减的队列&#xff0c;对头是最大值&#xff0c;每次进入一个新值时就一直和队尾元素比较将比新的值小的数排出&#xff0c;这样能保证留在队列中的数都是会…...

安卓系列机型 框架LSP 安装步骤 支持多机型 LSP框架通用安装步骤【二】

​​​​​​安卓玩机教程---全机型安卓4----安卓12 框架xp edx lsp安装方法【一】 低版本可以参考上个博文了解相关安装方法。 LSP框架优点 简单来说装lsp框架的优点在于可以安装各种模块。包括 但不限于系统优化 加速 游戏开挂等等的模块。大致相当于电脑的扩展油猴 Lspos…...

实现一个宽高自适应的正方形

.square {width: 10%;height: 10vw;background: tomato; }.square {width: 20%;height: 0;padding-top: 20%;background: orange; }.square {width: 30%;overflow: hidden;background: yellow; } .square::after {content: ;display: block;margin-top: 100%; }...

shell脚本命令

Shell命令是在类Unix操作系统中使用的命令行解释器&#xff08;shell&#xff09;中执行的命令。Shell命令可以用于执行系统命令、操作文件、进行文本处理、管理进程等。以下是一些常见的Shell命令&#xff1a; 1. ls&#xff1a;列出当前目录下的文件和文件夹。 2. cd&#x…...

Vue2023 面试归纳及复习(2)

1 vue3中的动态组件和KeepAlive组件 动态组件component <component>动态组件是一种可以根据数据变化而动态加载不同组件的方式。使用动态组件可以有效地减少代码复杂度&#xff0c;提高组件的复用性和灵活性。 动态组件通过一个特殊的属性is来实现动态加载&#xff0c…...

idea 本地项目上传到 Git 步骤

第一步&#xff1a;菜单栏 VCS——>import into Version control——>Create git Repository——>弹出框找到选中自己项目——>点击Ok 第二步&#xff1a;选中项目右键 ——>git——>Add 文件会变成绿色表示成功 第三步:VCS——>commit——>ok 提交到…...

wordpress boombox/搜索app下载

有些同学可能会和我有一样的困扰&#xff0c;每次想要更改字体大小、背景颜色等&#xff0c;都需要百度一下才知道怎么去做。。。不知道有没有这种情况的孩子&#xff0c;反正我经常遇到&#xff0c;老是记不住&#xff0c;今天写下来&#xff0c;顺带自己忘记的时候可以查看一…...

品牌网站建设推荐大蝌蚪/什么是互联网推广

wsdl2java wsimport 的升级版wsdl2java 生成webService java 基本类 apache-cxf 下载 及配置变量 下载地址列表 &#xff1a; http://cxf.apache.org/download.html 下载地址&#xff1a; https://www.apache.org/dyn/closer.lua/cxf/3.4.2/apache-cxf-3.4.2.zip 下载后解压…...

建设导航网站费用/网页设计html代码大全

Perl命令行应用介绍Perl语言中有很多Perl命令行参数.通过它们,我们有机会写出更简单的程序&#xff0c;在这篇文章里我们来了解一些常用的参数。第一部分&#xff1a;SafetyNetOptions安全网参数在使用Perl尝试一些聪明(或stupid)的想法时,错误难免会发生.有经验的Perl程序员常…...

四川网站建设 招标/太原关键词排名提升

1-6 字符串 在Go语言里面&#xff0c;字符串属于不可变数值类型&#xff0c;也就是是当变量的值发生改变时&#xff0c;其内存地址发生改变。在Go语言内部字符串是使用指针指向UTF-8数组。 当然&#xff0c;与不可变数值类型相反&#xff0c;可变数值类型的意思就是&#xff0…...

建筑设计网站 知乎/海淀区seo搜索引擎优化企业

想在centos6.9上安装docket&#xff0c;不过因为内核版本是2.6的故而想升级到最新的内核版本 晚上有编译升级的比较麻烦&#xff0c;不过有助于理解内核升级&#xff0c;我使用的直接升级到最新版方法 1. 导入public key rpm --import https://www.elrepo.org/RPM-GPG-KEY-elre…...

长春网站排名方案/2020做seo还有出路吗

1. 下载 nexus3 镜像 docker pull sonatype/nexus32. 新建挂载目录 这里将 nexus 的目录挂载到宿主机的/usr/soft/nexus-data文件夹下&#xff0c;并修改文件夹权限 mkdir -p /usr/soft/nexus-data && chmod 751 /usr/soft/nexus-data3. 创建容器 这里使用了宿主机…...