【Golang 接口自动化05】使用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/login
在http://httpbin.org
中都没有监听,所以接口返回的404,其实请求也是成功的,但是我们看不到具体的请求数据和URL了,所以我们修改一下yml文件中的path为 http://httpbin.org
已经监听的/post
来看看结果。
修改后的数据为:
测试:
可以看到我们请求的参数/路径/IP等等信息都和我们测试用例中填充的内容一致。至此,我们的测试用例及测试就完成了
总结
- YAML
- 解析yml文件中的信息
- 发送yml格式的数据
转载于:https://www.cnblogs.com/Detector/p/9738672.html
【Golang 接口自动化05】使用yml管理自动化用例相关推荐
- 自动化测试用例设计原则(接口自动化用例设计的基本原则)
自动化测试用例设计原则: 1.一个脚本是一个完整的场景,从用户登陆操作到用户退出系统关闭浏览器. 2.一个脚本脚本只验证一个功能点,不要试图用户登陆系统后把所有的功能都进行验证再退出系统 3.尽量只做 ...
- 移动测试架构演进 | 蚂蚁金服自动化用例管理探索
作者:周力(问瑾),蚂蚁金服技术专家.本文围绕支付宝面向移动应用日志复杂的测试工作,如何思考演进出成熟稳定的测试用例管理展开讨论和总结. 相比普通测试用例,自动化用例在形式.实现方式及内容上有一定的特 ...
- java接口自动化(二) - 接口测试的用例设计
1.简介 在这篇文章里,我们来学习一下接口测试用例设计,主要是来学习一些用例设计要点.其实说白了,接口用例设计和功能用例设计差不多,照猫画虎即可.不要把它想象的多么高大上,多么的难,其实一样,以前怎么 ...
- python实现处理swagger接口文档,转换为yaml格式的自动化用例
前言 之前有很多小伙伴反馈,希望我出一期 将swagger文档转换为 yaml格式的自动化用例,那么本期福利来咯~~这一篇文档,将会带领你们实现 如何通过 swagger文档转换为 yaml格式的用例 ...
- 自动化用例设计原则+web自动化框架
自动化用例设计原则 web自动化框架 PO模式就是页面对象和测试用例的分离. PageObjects放页面对象,封装元素定位和元素操作(也可以单独把元素定位放到PageLocators层) basep ...
- swagger python自动化用例_自动生成robot自动化测试用例
#!/usr/bin/env python """解析swagger接口返回值自动生成接口自动化用例 将新增的用例写入到文件末尾,已存在的用例则不重新写入"&q ...
- 使用python编写一个完整的接口自动化用例
使用python编写一个完整的接口自动化用例 以聚合数据的 查询天气接口为例: import requestsclass HttpRequests: def __init__(self,url, pa ...
- WEB自动化测试用例如何设计?如何提高WEB自动化用例脚本的稳定性
用例设计: 自动化用例是从功能测试用例里面提取出来的,主要提取的是冒烟用例和回归测试的用例,提取需要遵守一下的原则. 1,优先覆盖核心功能用例,核心流程用例. 2,尽量不要选复杂的用例. 3,选取一些 ...
- python接口自动化用例管理_python接口自动化测试(六)-unittest-单个用例管理
前面五节主要介绍了环境搭建和requests库的使用,可以使用这些进行接口请求的发送.但是如何管理接口案例?返回结果如何自动校验?这些内容光靠上面五节是不行的,因此从本节开始我们引入python单元测 ...
最新文章
- ORBBuf : 一种鲁棒的视觉SLAM缓冲方法
- python读取excel-Python读取Excel表格
- 怎么卸载旧版本java_卸载旧的java-jdk安装新版本jdk
- K8s 学习者绝对不能错过的最全知识图谱(内含 58个知识点链接)
- ArcGIS实验教程——实验六:空间数据格式转换
- 编译单元必须以 java_java中什么是编译单元
- js 回调函数 精析
- 查看php项目tp版本,tp5.1如何查看版本号
- iOS不得姐项目--精华模块上拉下拉的注意事项,日期显示,重构子控制器,计算cell的高度(只计算一次),图片帖子的显示...
- informix for linux数据库下载,informix for linux安装全攻略(原创)
- 前端学习(六)——HTML5中通过CSS设置超链接及鼠标形状
- 阿里云Maven仓库
- 算法图解:像小说一样有趣的算法入门书
- 调整计算机繁体,电脑输入法是繁体怎么办?电脑输入法变成繁体的解决办法
- 做好加密手机 任重而道远
- HTML-CSS前端大作业一站式教育机构响应式前端网页网站模板
- MATLAB terminal远程启动桌面GUI界面
- 【多模态】多模态特征融合策略——门控多模态融合方法
- 直播中常用的美颜sdk动态贴纸功能是什么?技术怎么实现的?
- 怎么让python播放音频_用Python播放音频
热门文章
- Python crypto模块实现RSA和AES加密解密
- web.config学习之assembly
- Ajax/JavaScript脚本大全,JS脚本大全
- 两种方法查看MFC源代码
- VC连接SQLite3的方法 MFC封装类
- 旧电脑从win7更换成Ubuntu系统(U盘安装)
- 489 - Hangman Judge
- 工业相机,大恒,面振相机8脚电源线和I/O触发接口线,颜色和接法说明和触发软件设定
- python判断质数用for循环_Day3.Python判断与循环语句
- ajax返回html页面执行,【提问】ajax请求返回整个html页面