当前位置: 首页 > 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】

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

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

http://www.lryc.cn/news/104439.html

相关文章:

  • 【【STM32学习-3】】
  • 代码随想录第四十八天|198、213、337.打家劫舍
  • js笔记总结
  • 第四章:Spring上
  • 【时频分析,非线性中频】非线性STFT在瞬时频率估计中的应用(Matlab代码实现)
  • MTK平台关机流程和原因(二)
  • 【Python】pyqt6入门到入土系列,非常详细...
  • TCP socket编程
  • HTTP——一、了解Web及网络基础
  • [论文笔记] chatgpt系列 2.6 DeepSpeed-chat 数据集
  • 探究SAM和眼球追踪技术在自动医学图像分割的应用(2023+GazeSAM: What You See is What You Segment)
  • excle中的条件求和SUMIF
  • python-网络爬虫.Request
  • 时序预测 | MATLAB实现GRNN广义回归神经网络时间序列预测(多指标,多图)
  • 如何看待低级爬虫与高级爬虫?
  • 3.分支与循环
  • 面试之多线程案例(四)
  • 抄写Linux源码(Day1:获取并运行 Linux0.11)
  • 大数据_Hadoop_Parquet数据格式详解
  • Docker的安装和部署
  • FPGA项目实现:秒表设计
  • Postgresql源码(109)并行框架实例与分析
  • ES派生类的prototype方法中,不能访问super的解决方案
  • 使用adb通过电脑给安卓设备安装apk文件
  • 113、单例Bean是单例模式吗?
  • RabbitMQ 集群部署
  • 2023年【零声教育】13代C/C++Linux服务器开发高级架构师课程体系分析
  • iOS开发-实现热门话题标签tag显示控件
  • linux系统磁盘性能监视工具iostat
  • BT#蓝牙 - Link Policy Settings