博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Golang 接口自动化05】使用yml管理自动化用例
阅读量:5278 次
发布时间:2019-06-14

本文共 4118 字,大约阅读时间需要 13 分钟。

我们在前面几篇文章中学习怎么发送数据请求,怎么处理解析接口返回的结果,接下来我们一起来学习怎么进行测试用例管理,今天我们介绍的是使用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: pwdTestCases:  -     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进行调试, 细心的小伙伴可能注意到了最后的那个函数,对请求的方式进行了校验,其他的诸如路径的合法性等都是可以拓展进行校验的。接下来我们一起来测试一下上面的代码是不是真的能获取到用例信息并正确发送请求。

调试运行

运行的的结果:

1172048-20181004113347613-1750240768.png

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

修改后的数据为:

1172048-20181006105645023-1961537877.png

测试:

1172048-20181004114934137-1171997773.png

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

总结

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

转载于:https://www.cnblogs.com/Detector/p/9738672.html

你可能感兴趣的文章
杂七杂八的小笔记本
查看>>
51Nod1353 树
查看>>
CF1215E Marbles
查看>>
BZOJ2339 HNOI2011卡农(动态规划+组合数学)
查看>>
octave基本操作
查看>>
axure学习点
查看>>
WPF文本框只允许输入数字[转]
查看>>
dom4j 通用解析器,解析成List<Map<String,Object>>
查看>>
第一个项目--用bootstrap实现美工设计的首页
查看>>
使用XML传递数据
查看>>
TYVJ.1864.[Poetize I]守卫者的挑战(概率DP)
查看>>
0925 韩顺平java视频
查看>>
iOS-程序启动原理和UIApplication
查看>>
mysql 8.0 zip包安装
查看>>
awk 统计
查看>>
模板设计模式的应用
查看>>
实训第五天
查看>>
平台维护流程
查看>>
2012暑期川西旅游之总结
查看>>
12010 解密QQ号(队列)
查看>>