我们在前面几篇文章中学习怎么发送数据请求,怎么处理解析接口返回的结果,接下来我们一起来学习怎么进行测试用例管理,今天我们介绍的是使用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: name
passwd: pwd
TestCases:
-
url: /api/user/login
detail: 正常登陆
method: Get
data:
username: name
passwd: pwd
check:
- pr
- userId
-
url: /api/user/login
detail: 密码错误
method: post
data:
username: name
passwd: pwd
check:
- 密码错误 -
url: /api/user/login
detail: 必填参数未填,不填密码
method: post
data:
username: name
check:
- 必填参数未填
-
url: /api/user/login
detail: 密码错误
method: post
data:
username: name
passwd: pwd
check:
- 密码错误
-
url: /api/user/login
detail: 密码错误
method: post
data:
username: name
passwd: pwd
check:
- 密码错误

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

创建结构体

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

// TestSuit 测试用例结构体
type TestSuit struct {
testsuit string
description string
TestCases []struct {
URL string
Detail string
Method string
Check []string
Data 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].URL
Method := t.TestCases[i].Method
Param := t.TestCases[i].Data
CheckData := t.TestCases[i].Check
j, _ := 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) // 根据不同的请求方式选择不同的请求URL
if 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格式的数据

【Golang 接口自动化05】使用yml管理自动化用例的更多相关文章

  1. 【Golang 接口自动化00】为什么要用Golang做自动化?

    为什么使用Golang做自动化 顺应公司的趋势学习了Golang之后,因为没有开发那么多的时间和项目来实践,怕步此前学习Java缺少练习遗忘殆尽的后尘,决定利用工作之余的时间把此前用Python的写的 ...

  2. Android UI自动化用例设计技巧

    一.封装方法 1.编程如何越来越快: 首先,需要经验丰富,知识面广. 其次,每一个熟练编程的人员,都会有自己的一个库,解决各种问题.各种通用的方法函数. 同理,自动化脚本也是编程,测试用例则为需求,U ...

  3. 纯python自研接口自动化脚本更新版本,让小白也能实现0到1万+的接口自动化用例

    查看完整文章点击原文链接:纯python自研接口自动化脚本更新版本,让小白也能实现0到1万+的接口自动化用例 你是否还在用postman\jmeter做接口自动化吗?用python的开源框架[unit ...

  4. python+pytest接口自动化(12)-自动化用例编写思路 (使用pytest编写一个测试脚本)

    经过之前的学习铺垫,我们尝试着利用pytest框架编写一条接口自动化测试用例,来厘清接口自动化用例编写的思路. 我们在百度搜索天气查询,会出现如下图所示结果: 接下来,我们以该天气查询接口为例,编写接 ...

  5. 【Golang 接口自动化06】微信支付md5签名计算及其优化

    前言 可能看过我博客的朋友知道我主要是做的支付这一块的测试工作.而我们都知道现在比较流行的支付方式就是微信支付和支付宝支付,当然最近在使用低手续费大力推广的京东金融(已改名为京东数科)以后也可能站到第 ...

  6. 【Golang】基于录制,自动生成go test接口自动化用例

    背景 之前写过一篇博客,介绍怎么用Python通过解析抓包数据,完成自动化用例的编写.最近这段时间在使用go test,所以就在想能不能也使用代码来生成自动化用例,快速提升测试用例覆盖率.说干就干. ...

  7. java接口自动化(二) - 接口测试的用例设计

    1.简介 在这篇文章里,我们来学习一下接口测试用例设计,主要是来学习一些用例设计要点.其实说白了,接口用例设计和功能用例设计差不多,照猫画虎即可.不要把它想象的多么高大上,多么的难,其实一样,以前怎么 ...

  8. python+requests+yaml实现接口自动化用例

    前言:最近也思考了一下怎么做接口自动化,以下内容属于自己目前阶段所学习到的内容,也逐渐投入自己实际工作中,把最近的学习新得跟大家分享下,话不多说,切入正题. 对接口自动化测试用例的思考:接口测试大多测 ...

  9. pytest文档30-功能用例与自动化用例完美对接(allure)

    前言 做自动化做久了,经常会思考一个问题,到底别人是怎么做的自动化,跟自己的有啥不一样,看过不少书和资料,都是停留在demo的层面. 真正把自动化做的好的大牛又不屑于分享自己的劳动成果,所以大部分情况 ...

随机推荐

  1. Jason使用

    Jason是一种数据传输时候的一种格式,类似XML. package liferay; import java.beans.IntrospectionException; import java.be ...

  2. SSH无密码登录:只需两个简单步骤 (Linux)

    最后更新 2017年4月8日 分类 最新文章 服务器安全 标签 RSA SSH Key 非对称加密 如果你管理一台Linux服务器,那么你就会知道每次SSH登录时或者使用scp复制文件时都要输入密码是 ...

  3. 认识GMT和UTC时间-附带地理知识

    GMT-格林尼治标准时 GMT 的全名是格林威治标准时间或格林威治平时 (Greenwich Mean Time),这个时间系统的概念在 1884 年确立,由英国伦敦的格林威治皇家天文台计算并维护,并 ...

  4. Data Center Drama 欧拉回路的应用

    这题说的是给了n个点 和m条边, 这m条边是无向的,任务是将这些边变成有向的,并且添加最少的有向边使得这个图中每个点的入度为偶数, 出度为偶数. 我们可以考虑使用欧拉回路来解决这个问题,这样说,假如一 ...

  5. 《算法C语言实现》————快速-查找算法(quick-find algorithm)

    算法基础是一个整型数组,当且仅当第p个元素和第q个元素相等时,p和q时连通的.初始时,数组中的第i个元素的值为i,0<=i<N,为实现p与q的合并操作,我们遍历数组,把所有名为p的元素值改 ...

  6. office word 2010 怎么把左侧的标题大纲调出来?

    有时候打开Word很希望出现左边的大纲,可是有时候就不出来,对word一些操作都忘得差不多了,这个小问题确实还是让我迷糊了一下~~ 网上的解决方案是: 打开Word2010文档窗口,切换到“视图”功能 ...

  7. FastJson(阿里巴巴)基础

    一.所需jar包: fastjson-x.x.xx.jar(本例使用fastjson-1.1.36.jar). 二.解析转化: 1.json字符串  < ------ >  js trin ...

  8. Python 让PIP源使用国内镜像,提升下载速度和安装成功率

    对于Python开发用户来讲,PIP安装软件包是家常便饭.但国外的源下载速度实在太慢,浪费时间.而且经常出现下载后安装出错问题.所以把PIP安装源替换成国内镜像,可以大幅提升下载速度,还可以提高安装成 ...

  9. sql study

    -- ============================================= -- Author: lifu -- Create date: 2017-06-14 -- Descr ...

  10. maven parent工程.pom修改后未自动更新

    前两周,因为框架parent工程的pom文件做了一点变更,然后在测试服务器进行maven install的时候,死都找不到新的依赖,都把nexus翻了个遍,确定是最新的了,就是download不下来, ...