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

【Golang 接口自动化05】使用yml管理自动化用例

目录

YAML

基本语法

对象:键值对的集合(key:value)

数组:一组按顺序排列的值

字面量:单个的、不可再分的值(数字、字符串、布尔值)

yml 格式的测试用例

定义yml文件

创建结构体

读取yml文件中的用例数据

调试运行

总结

资料获取方法


我们在前面几篇文章中学习怎么发送数据请求,怎么处理解析接口返回的结果,接下来我们一起来学习怎么进行测试用例管理,今天我们介绍的是使用yml文件进行用例管理,所以首先我们一起来了解一下YAML和它的简单用法。

YAML

YAML(Yet Another Markup Language),可能大家在工作中或多或少已经接触过这个文件格式。它是一种基于Unicode用来表达资料序列的编程语言,有易阅读、易与脚本语言交互的特点。在博主所在项目接入了k8s之后,基本上所有的配置都使用的yml。

我觉得yml相比较于json文件格式最大的优势是支持注释,而json数据定义是不支持注释的,而且编写格式上也较yml严格。下面我们一起来了解一下yml的语法。

基本语法

1、yml文件以缩进代表层级关系
2、缩进不允许使用tab只能使用空格
3、空格的个数不重要,只要相同层级的元素左对齐即可
4、大小写敏感
5、数据格式为,名称:(空格)值

对象:键值对的集合(key:value)

>  字符串不用使用双引号或单引号圈起来
>   双引号圈住时不会转义字符串中的特殊字符
>  单引号圈住时会转义字符串中的特殊字符

数组:一组按顺序排列的值

>  数组名:
>             -元素1
>             -元素2
>  行内写法:
>         数组名:[元素1,元素2,元素3]

字面量:单个的、不可再分的值(数字、字符串、布尔值)

yml 格式的测试用例

定义yml文件

下面我们以登陆为例来编写测试用例,将下面这些信息保存到testCase.yml中,我们的策四用力就完成了:

Testsuit: 登录
description: 用户中心登录测试
commonparam: username: namepasswd: pwd
TestCases:- url: /api/user/logindetail: 正常登陆method: Getdata:  username: namepasswd: pwdcheck: - pr- userId-url: /api/user/logindetail: 密码错误method: postdata:username: namepasswd: pwdcheck:- 密码错误-url: /api/user/logindetail: 必填参数未填,不填密码method: postdata:username: namecheck:- 必填参数未填-url: /api/user/logindetail: 密码错误method: postdata:username: namepasswd: pwdcheck:- 密码错误-url: /api/user/logindetail: 密码错误method: postdata:username: namepasswd: pwdcheck:- 密码错误

接下来我们一起来学习怎么读取上面定义的用例信息。

创建结构体

通过观察上面的yml文件结合前面学习的yml的基础语法我们可以很轻松的知道,TestCases的具体数据是一个个的数组,发送的数据也是一个个的数组,所以我们可以定义下面的结构体来与之对应:

// TestSuit 测试用例结构体
type TestSuit struct {testsuit    stringdescription stringTestCases   []struct {URL    stringDetail stringMethod stringCheck  []stringData   struct {Username string `json:"username"`Passwd   string `json:"passwd"`}}

读取yml文件中的用例数据

我们本次用来解析yml的是一个第三方库,获取方法:go get github.com/ghodss/yaml,先上代码:

func main() {// 读取数据并解析到json中data, _ := ioutil.ReadFile("testCase.yml")t := TestSuit{}err := yaml.Unmarshal(data, &t)if err != nil {fmt.Println(err.Error())}j, _ := json.Marshal(t.TestCases)fmt.Println(string(j))// 遍历yml文件中定义的test case信息for i := 0; i < len(t.TestCases); i++ {Path := t.TestCases[i].URLMethod := t.TestCases[i].MethodParam := t.TestCases[i].DataCheckData := t.TestCases[i].Checkj, _ := json.Marshal(Param)fmt.Println("==================我是华丽的分割线==================")fmt.Println("请求参数:", string(j))fmt.Println("请求路径:", Path)upperMethod := strings.ToUpper(Method)// 检验请求方式是否合法fmt.Println(upperMethod)fmt.Println(CheckMethod(upperMethod))fmt.Println("校验数据:", CheckData)// 根据不同的请求方式选择不同的请求URLif upperMethod == "POST" {_, body, _ := gorequest.New().Post(fmt.Sprintf("http://httpbin.org%s", Path)).Send(fmt.Sprintf("%s", string(j))).Set("Content-Type", "application/json").End()fmt.Println(body)} else if upperMethod == "GET" {fmt.Println(fmt.Sprintf("http://%s/%s", BaseURI, Path))_, body, _ := gorequest.New().Get(fmt.Sprintf("http://%s%s", BaseURI, Path)).Send(fmt.Sprintf("%s", string(j))).Set("Content-Type", "application/json").End()fmt.Println(body)}}
}// CheckMethod 校验请求的方法是否正确
func CheckMethod(method string) bool {upperMethod := strings.ToUpper(method)if upperMethod == "POST" || upperMethod == "GET" {return true}return false
}

代码中注视已经给的比较清晰,这一次又是使用的http://httpbin.org进行调试, 细心的小伙伴可能注意到了最后的那个函数,对请求的方式进行了校验,其他的诸如路径的合法性等都是可以拓展进行校验的。接下来我们一起来测试一下上面的代码是不是真的能获取到用例信息并正确发送请求。

调试运行

运行的的结果:

需要说明的是因为我们访问的路径/api/user/loginhttp://httpbin.org中都没有监听,所以接口返回的404,其实请求也是成功的,但是我们看不到具体的请求数据和URL了,所以我们修改一下yml文件中的path为 http://httpbin.org已经监听的/post来看看结果。

修改后的数据为:

测试:

可以看到我们请求的参数/路径/IP等等信息都和我们测试用例中填充的内容一致。至此,我们的测试用例及测试就完成了

总结

  • YAML
  • 解析yml文件中的信息
  • 发送yml格式的数据

资料获取方法

【留言777】

各位想获取源码等教程资料的朋友请点赞 + 评论 + 收藏,三连!

三连之后我会在评论区挨个私信发给你们~

相关文章:

【Golang 接口自动化05】使用yml管理自动化用例

目录 YAML 基本语法 对象&#xff1a;键值对的集合(key:value) 数组&#xff1a;一组按顺序排列的值 字面量&#xff1a;单个的、不可再分的值&#xff08;数字、字符串、布尔值&#xff09; yml 格式的测试用例 定义yml文件 创建结构体 读取yml文件中的用例数据 调试…...

【【STM32学习-3】】

STM32学习-3 下面是对c语言的稍微复习 这个是我们设置好的文件 以后拖出去用就可以了 这里加入关于指针的感想 关于指针数组和数组指针的想法 常规的东西是int a10; int * p&a; &#xff08;p指向了a元素&#xff0c;意思是p等于a的地址 类型是int*&#xff09;就是 整型指…...

代码随想录第四十八天|198、213、337.打家劫舍

198.打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个…...

js笔记总结

prototype 属性的作用 JavaScript 规定&#xff0c;每个函数都有一个prototype属性&#xff0c;指向一个对象。 function f() {} typeof f.prototype // "object" ​ 上面代码中&#xff0c;函数f默认具有prototype属性&#xff0c;指向一个对象。 对于普通函数来…...

第四章:Spring上

第四章&#xff1a;Spring上 4.1&#xff1a;Spring简介 Spring概述 官网地址&#xff1a;https://spring.io/。 Spring是最受欢迎的企业级的java应用程序开发框架&#xff0c;数以百万的来自世界各地的开发人员使用Spring框架来创建性能好、易于测试、可重用的代码。Spring框…...

【时频分析,非线性中频】非线性STFT在瞬时频率估计中的应用(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

MTK平台关机流程和原因(二)

&#xff08;1&#xff09;ShutdownThread 从上一篇可以看到&#xff0c;最终会调用此类的shutdown以及reboot等函数&#xff0c;我们来看一下这些函数的实现。 &#xff08;A&#xff09;被调用函数 //frameworks/base/services/core/java/com/android/server/power/Shutdo…...

【Python】pyqt6入门到入土系列,非常详细...

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 一、什么是PyQt6? 简单介绍一下PyQt6 1、基础简介 PyQt6 Digia 公司的 Qt 程序的 Python 中间件。Qt库是最强大的GUI库之一。 PyQt6的官网&#xff1a;www.riverbankcomputing.co.uk/news。 PyQt6是由Riverbank Co…...

TCP socket编程

一、服务端代码 #encoding utf -8 #导入socket库 from socket import * #等待客户端来连接&#xff0c;主机地址为0.0.0.0表示绑定本机所有网络接口ip地址 IP 0.0.0.0 #端口号 PORT 50000 #定义一次从socket缓存区最多读入512个字节数据 BUFLEN 512 #实例化一个socket编程…...

HTTP——一、了解Web及网络基础

HTTP 一、使用HTTP协议访问Web二、HTTP的诞生1、为知识共享而规划Web2、Web成长时代3、驻足不前的HTTP 三、网络基础TCP/IP1、TCP/IP协议族2、TCP/IP的分层管理3、TCP/IP 通信传输流 四、与HTTP关系密切的协议&#xff1a;IP、TCP和DNS1、负责传输的 IP 协议2、确保可靠性的TCP…...

[论文笔记] chatgpt系列 2.6 DeepSpeed-chat 数据集

一、FT数据集 & Reward model数据集 Deepspeed-chat 源代码的数据集: Dahoas/rm-static: 这是一个用于强化学习的静态环境数据集,包含了一个机器人在一个固定环境中的运动轨迹。该数据集旨在用于评估强化学习算法在静态环境下的表现。 Dahoas/full-hh-rlhf: 这是一个用于…...

探究SAM和眼球追踪技术在自动医学图像分割的应用(2023+GazeSAM: What You See is What You Segment)

摘要&#xff1a; 本研究探讨眼动追踪技术与SAM的潜力&#xff0c;以设计一个协同的人机交互系统&#xff0c;自动化医学图像分割。提出了GazeSAM系统&#xff0c;使放射科医生能够在图像诊断过程中通过简单地查看感兴趣的区域来收集分割掩模。该系统跟踪放射科医生的眼球运动…...

excle中的条件求和SUMIF

问题&#xff1a;将每一行中红色文字的前一个值累计求和到境外总数这一列 使用的公式 自制单元格的格式计算公式&#xff1a;ctrlf3打开格式管理&#xff0c;创建如下公式&#xff0c;其中24是表示获取文字颜色 由于sumif只能直接与第二参数条件比较&#xff0c;所以先使用IF(公…...

python-网络爬虫.Request

Request python中requests库使用方法详解&#xff1a; 一简介&#xff1a; Requests 是Python语言编写&#xff0c;基于urllib&#xff0c; 采用Apache2 Licensed开源协议的 HTTP 库。 与urllib相比&#xff0c;Requests更加方便&#xff0c;处理URL资源特别流畅。 可以节约我…...

时序预测 | MATLAB实现GRNN广义回归神经网络时间序列预测(多指标,多图)

时序预测 | MATLAB实现GRNN广义回归神经网络时间序列预测(多指标,多图) 目录 时序预测 | MATLAB实现GRNN广义回归神经网络时间序列预测(多指标,多图)效果一览基本介绍程序设计参考资料效果一览 基本介绍 1.MATLAB实现GRNN广义回归神经网络时间序列预测(完整源码和数据) …...

如何看待低级爬虫与高级爬虫?

爬虫之所以分为高级和低级&#xff0c;主要是基于其功能、复杂性和灵活性的差异。根据我总结大概有下面几点原因&#xff1a; 功能和复杂性&#xff1a;高级爬虫通常提供更多功能和扩展性&#xff0c;包括处理复杂页面结构、模拟用户操作、解析和清洗数据等。它们解决了开发者…...

3.分支与循环

一、分支结构 1.概念 一个 CPP 程序默认是按照代码书写顺序&#xff0c;从上到下依次执行下来的。但是&#xff0c;有时我们需要选择性的执行某些语句&#xff0c;来实现更加复杂的逻辑&#xff0c;这时候就需要分支结构语句的功能来实现。选择合适的分支语句可以显著提高程序…...

面试之多线程案例(四)

1.单例模式 单例模式是指在内存中只会创建且仅创建一次对象的设计模式。在程序中多次使用同一个对象且作用相同时&#xff0c;为了防止频繁地创建对象使得内存飙升&#xff0c;单例模式可以让程序仅在内存中创建一个对象&#xff0c;让所有需要调用的地方都共享这一单例对象。…...

抄写Linux源码(Day1:获取并运行 Linux0.11)

Day1&#xff1a;获取并运行 Linux0.11 参考资料&#xff1a;https://zhuanlan.zhihu.com/p/438577225 这是我参考的一个别人写的 Linux0.11 解读&#xff1a;https://github.com/dibingfa/flash-linux0.11-talk 我获取 Linux-0.11 源码的链接&#xff1a;https://github.com/…...

大数据_Hadoop_Parquet数据格式详解

之前有面试官问到了parquet的数据格式&#xff0c;下面对这种格式做一个详细的解读。 参考链接 &#xff1a; 列存储格式Parquet浅析 - 简书 Parquet 文件结构与优势_parquet文件_KK架构的博客-CSDN博客 Parquet文件格式解析_parquet.block.size_davidfantasy的博客-CSDN博…...

OpenClaw新手避坑指南:nanobot部署5大常见配置错误

OpenClaw新手避坑指南&#xff1a;nanobot部署5大常见配置错误 1. 为什么需要这份避坑指南 上周我在本地部署OpenClaw的nanobot时&#xff0c;经历了整整两天的痛苦调试。明明按照文档一步步操作&#xff0c;却总是卡在奇怪的错误上。最崩溃的是&#xff0c;有些问题在官方文…...

Wan2.2-I2V-A14B开源大模型:支持LoRA微调与私有领域视频风格迁移

Wan2.2-I2V-A14B开源大模型&#xff1a;支持LoRA微调与私有领域视频风格迁移 1. 模型概述与核心能力 Wan2.2-I2V-A14B是一款开源的文生视频大模型&#xff0c;专为高质量视频生成任务设计。该模型在保持开源特性的同时&#xff0c;通过LoRA微调技术实现了对私有领域视频风格的…...

Fun-ASR-MLT-Nano-2512在教育培训场景的应用:语音课件自动转写

Fun-ASR-MLT-Nano-2512在教育培训场景的应用&#xff1a;语音课件自动转写 1. 技术背景与教育痛点 1.1 教育培训行业的语音处理需求 教育培训行业每天产生大量语音内容&#xff0c;包括教师授课录音、在线课程音频、学生互动语音等。传统的人工转写方式面临三大核心痛点&…...

MiddleBury与SceneFlow数据集相机参数解析与深度图生成实战

1. MiddleBury与SceneFlow数据集简介 MiddleBury和SceneFlow是计算机视觉领域两个非常重要的立体视觉数据集。MiddleBury数据集由Middlebury College发布&#xff0c;包含了大量高质量的立体图像对&#xff0c;这些图像对由两台相机在同一时间、不同位置拍摄&#xff0c;涵盖了…...

Comsol模拟混凝土中水分传递 低气压下水分转移引起的水泥浆龄期微观结构变化 低气压(AP)...

Comsol模拟混凝土中水分传递 低气压下水分转移引起的水泥浆龄期微观结构变化 低气压&#xff08;AP&#xff09;会影响混凝土中的水分传递&#xff0c;进而影响其微观结构和体积特性&#xff0c;但对其热力学机制却知之甚少 可文献复现 水泥基材料内部的水分运动会直接改变孔隙…...

EcomGPT-中英文-7B电商模型Vue前端集成:打造智能电商管理后台

EcomGPT-中英文-7B电商模型Vue前端集成&#xff1a;打造智能电商管理后台 你是不是也遇到过这样的场景&#xff1f;作为电商运营&#xff0c;每天要写几十条商品描述、营销文案&#xff0c;绞尽脑汁也想不出新花样&#xff1b;面对海量的用户评论&#xff0c;想快速了解用户情…...

游戏开发必备:Unity中三维坐标系转换的5种实战技巧(附代码)

Unity三维坐标系转换实战指南&#xff1a;从原理到代码实现 在游戏开发中&#xff0c;三维物体的旋转和坐标系转换是构建沉浸式体验的核心技术。无论是角色转向、镜头跟随还是物理模拟&#xff0c;开发者都需要精准控制物体在三维空间中的方位。Unity作为主流游戏引擎&#xff…...

Onekey:5分钟上手!Steam游戏清单下载终极指南

Onekey&#xff1a;5分钟上手&#xff01;Steam游戏清单下载终极指南 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey 想要轻松获取Steam游戏的完整文件清单吗&#xff1f;Onekey作为专业的Steam…...

OpenClaw+GLM-4.7-Flash:自动化测试脚本生成器

OpenClawGLM-4.7-Flash&#xff1a;自动化测试脚本生成器 1. 为什么需要自动化测试脚本生成 作为一名长期奋战在一线的开发者&#xff0c;我深知测试环节的重要性与繁琐程度。每当项目进入测试阶段&#xff0c;编写测试用例和脚本往往要占据整个开发周期的30%-40%时间。更令人头…...

AI辅助开发:让快马AI听懂你的话,智能定制专属Win11右键菜单

最近在折腾Windows 11的右键菜单&#xff0c;发现新系统的右键菜单虽然简洁&#xff0c;但很多常用功能被折叠到二级菜单里&#xff0c;用起来特别不方便。作为一个开发者&#xff0c;我经常需要快速访问各种工具&#xff0c;于是萌生了自己定制右键菜单的想法。 系统检测模块设…...