我们在前面几篇文章中学习怎么发送数据请求,怎么处理解析接口返回的结果,接下来我们一起来学习怎么进行测试用例管理,今天我们介绍的是使用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文件中的用例数据
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.orghttp://httpbin.org/post
修改后的数据为:
测试:
可以看到我们请求的参数/路径/IP等等信息都和我们测试用例中填充的内容一致。至此,我们的测试用例及测试就完成了
总结
- YAML
- 解析yml文件中的信息
- 发送yml格式的数据