【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: 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格式的數據


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM