目錄
YAML
基本語法
對(duì)象:鍵值對(duì)的集合(key:value)
數(shù)組:一組按順序排列的值
字面量:單個(gè)的、不可再分的值(數(shù)字、字符串、布爾值)
yml 格式的測試用例
定義yml文件
創(chuàng)建結(jié)構(gòu)體
讀取yml文件中的用例數(shù)據(jù)
調(diào)試運(yùn)行
總結(jié)
資料獲取方法
我們?cè)谇懊鎺灼恼轮袑W(xué)習(xí)怎么發(fā)送數(shù)據(jù)請(qǐng)求,怎么處理解析接口返回的結(jié)果,接下來我們一起來學(xué)習(xí)怎么進(jìn)行測試用例管理,今天我們介紹的是使用yml文件進(jìn)行用例管理,所以首先我們一起來了解一下YAML和它的簡單用法。
YAML
YAML(Yet Another Markup Language),可能大家在工作中或多或少已經(jīng)接觸過這個(gè)文件格式。它是一種基于Unicode用來表達(dá)資料序列的編程語言,有易閱讀、易與腳本語言交互的特點(diǎn)。在博主所在項(xiàng)目接入了k8s之后,基本上所有的配置都使用的yml。
我覺得yml相比較于json文件格式最大的優(yōu)勢是支持注釋,而json數(shù)據(jù)定義是不支持注釋的,而且編寫格式上也較yml嚴(yán)格。下面我們一起來了解一下yml的語法。
基本語法
1、yml文件以縮進(jìn)代表層級(jí)關(guān)系
2、縮進(jìn)不允許使用tab只能使用空格
3、空格的個(gè)數(shù)不重要,只要相同層級(jí)的元素左對(duì)齊即可
4、大小寫敏感
5、數(shù)據(jù)格式為,名稱:(空格)值
對(duì)象:鍵值對(duì)的集合(key:value)
> 字符串不用使用雙引號(hào)或單引號(hào)圈起來
> 雙引號(hào)圈住時(shí)不會(huì)轉(zhuǎn)義字符串中的特殊字符
> 單引號(hào)圈住時(shí)會(huì)轉(zhuǎn)義字符串中的特殊字符
數(shù)組:一組按順序排列的值
> 數(shù)組名:
> -元素1
> -元素2
> 行內(nèi)寫法:
> 數(shù)組名:[元素1,元素2,元素3]
字面量:單個(gè)的、不可再分的值(數(shù)字、字符串、布爾值)
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: 密碼錯(cuò)誤
method: post
data:
username: name
passwd: pwd
check:
- 密碼錯(cuò)誤
-
url: /api/user/login
detail: 必填參數(shù)未填,不填密碼
method: post
data:
username: name
check:
- 必填參數(shù)未填
-
url: /api/user/login
detail: 密碼錯(cuò)誤
method: post
data:
username: name
passwd: pwd
check:
- 密碼錯(cuò)誤
-
url: /api/user/login
detail: 密碼錯(cuò)誤
method: post
data:
username: name
passwd: pwd
check:
- 密碼錯(cuò)誤
接下來我們一起來學(xué)習(xí)怎么讀取上面定義的用例信息。
創(chuàng)建結(jié)構(gòu)體
通過觀察上面的yml文件結(jié)合前面學(xué)習(xí)的yml的基礎(chǔ)語法我們可以很輕松的知道,TestCases的具體數(shù)據(jù)是一個(gè)個(gè)的數(shù)組,發(fā)送的數(shù)據(jù)也是一個(gè)個(gè)的數(shù)組,所以我們可以定義下面的結(jié)構(gòu)體來與之對(duì)應(yīng):
// TestSuit 測試用例結(jié)構(gòu)體
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文件中的用例數(shù)據(jù)
我們本次用來解析yml的是一個(gè)第三方庫,獲取方法:go get github.com/ghodss/yaml
,先上代碼:
func main() {
// 讀取數(shù)據(jù)并解析到j(luò)son中
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("請(qǐng)求參數(shù):", string(j))
fmt.Println("請(qǐng)求路徑:", Path)
upperMethod := strings.ToUpper(Method)
// 檢驗(yàn)請(qǐng)求方式是否合法
fmt.Println(upperMethod)
fmt.Println(CheckMethod(upperMethod))
fmt.Println("校驗(yàn)數(shù)據(jù):", CheckData)
// 根據(jù)不同的請(qǐng)求方式選擇不同的請(qǐng)求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 校驗(yàn)請(qǐng)求的方法是否正確
func CheckMethod(method string) bool {
upperMethod := strings.ToUpper(method)
if upperMethod == "POST" || upperMethod == "GET" {
return true
}
return false
}
代碼中注視已經(jīng)給的比較清晰,這一次又是使用的http://httpbin.org
進(jìn)行調(diào)試, 細(xì)心的小伙伴可能注意到了最后的那個(gè)函數(shù),對(duì)請(qǐng)求的方式進(jìn)行了校驗(yàn),其他的諸如路徑的合法性等都是可以拓展進(jìn)行校驗(yàn)的。接下來我們一起來測試一下上面的代碼是不是真的能獲取到用例信息并正確發(fā)送請(qǐng)求。
調(diào)試運(yùn)行
運(yùn)行的的結(jié)果:
需要說明的是因?yàn)槲覀冊(cè)L問的路徑/api/user/login
在http://httpbin.org
中都沒有監(jiān)聽,所以接口返回的404,其實(shí)請(qǐng)求也是成功的,但是我們看不到具體的請(qǐng)求數(shù)據(jù)和URL了,所以我們修改一下yml文件中的path為?http://httpbin.org
已經(jīng)監(jiān)聽的/post
來看看結(jié)果。
修改后的數(shù)據(jù)為:
測試:
可以看到我們請(qǐng)求的參數(shù)/路徑/IP等等信息都和我們測試用例中填充的內(nèi)容一致。至此,我們的測試用例及測試就完成了
總結(jié)
- YAML
- 解析yml文件中的信息
- 發(fā)送yml格式的數(shù)據(jù)
資料獲取方法
【留言777】
各位想獲取源碼等教程資料的朋友請(qǐng)點(diǎn)贊 + 評(píng)論 + 收藏,三連!文章來源:http://www.zghlxwxcb.cn/news/detail-621418.html
三連之后我會(huì)在評(píng)論區(qū)挨個(gè)私信發(fā)給你們~文章來源地址http://www.zghlxwxcb.cn/news/detail-621418.html
到了這里,關(guān)于【Golang 接口自動(dòng)化05】使用yml管理自動(dòng)化用例的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!