當前位置:成語大全網 - 新華字典 - 使用yaml文件管理測試數據

使用yaml文件管理測試數據

知道ddt的基本使用方法之後,練習把之前用excel文件來維護的接口測試用例改用unittest+ddt來實現。

這裏我選用yaml文件來管理接口參數,開始本來想用json,但是json無法添加註釋,可讀性不好。

下面截圖是接口文檔中的各個接口,每個接口都有壹個固定的序號,所以在設計每個接口的測試數據時,以序號來區分不同接口

yaml文件內容如下,需要註意的是yaml的語法:

(1)鍵值對用冒號分割,但是冒號後需要加壹個空格

(2)禁止使用tab縮進,只能使用空格鍵;縮進長度沒有限制,只要元素對齊就表示這些元素屬於壹個層級

(3)字符串可以不用引號標註,也可以加引號,如果想把數字變為字符串,加引號即可

(4)使用#表示註釋

詳情可以參考博客: /vincent_hbl/article/details/75411243

2. 簡單 demo : python 讀取 yaml 文件,取出接口參數

import yaml

fp = open('../dataconfig/信息互動模塊接口.yaml', encoding='utf-8')? #有中文字符的話,加編碼格式

testdata = yaml.load(fp)

t = testdata['5.2.1.4']

print(t)

(1)封裝讀取yaml文件方法

handle_yaml.py

# coding: utf-8

# author: hmk

importyaml

importos

classHandleYaml:

def __init__(self,file_path=None):

if file_path:

self.file_path = file_path

else:

root_dir =os.path.dirname(os.path.abspath('.'))

# os.path.abspath('.')表示獲取當前文件所在目錄;os.path.dirname表示獲取文件所在父目錄;所以整個就是項目的所在路徑self.file_path = root_dir +'/dataconfig/信息互動模塊接口.yaml'? #獲取文件所在的相對路徑(相對整個項目)

#elf.data = self.get_data()

def get_data(self):

fp =open(self.file_path, encoding='utf-8')

data =yaml.load(fp)

return data

if __name__ == '__main__':

test = HandleYaml()

p = test.get_data()

print(p['5.2.1.1'])

[if !vml][endif]

(2)封裝requests請求方法

[if !vml][endif]

# coding: utf-8

# author: Archer

importrequests

importjson

classRunMethod:

defpost_main(self, url, data, header=None):if header is notNone:

res =requests.post(url=url, data=data, headers=header)

else:

res =requests.post(url=url, data=data)

# print(res.status_code)

# return res.json()

return res #為了方便後面斷言,這裏不再對服務器響應進行json格式編碼

def get_main(self, url, data=None, header=None):if header is notNone:

res =requests.get(url=url, params=data, headers=header)

else:

res =requests.get(url=url, params=data)

print(res.status_code)

# return

res.json()

return res

def run_main(self, method, url, data=None, header=None):

if method== 'POST':

res =self.post_main(url, data, header)

else:

res =self.get_main(url, data, header)

returnres

# returnjson.dumps(res, indent=2, sort_keys=False, ensure_ascii=False)? #使用json模塊格式化顯示結果

[if !vml][endif]

(3)壹個接口測試用例

[if !vml][endif]

# coding: utf-8

# author: Archer

importunittest

importddt

from base.run_method importRunMethod

from utils.handle_yaml importHandleYaml

get_data = HandleYaml()? # 從yaml文件中取出該接口的參數

params = get_data.get_data()['5.2.1.4']

@ddt.ddt

classTest(unittest.TestCase):

"""加載咨詢詳情接口"""

defsetUp(self):

self.url ='http://localhost:8088/ApprExclusiveInterface/api/enterprise/info/consult/loadDetail.v'

self.run =RunMethod()

@ddt.data(*params)

deftest(self, value):

r =self.run.run_main("GET", self.url, value)

print(r)

self.assertTrue(value['assert'] inr.text)

if __name__ == '__main__':

unittest.main()

(4)利用HTMLTestRunner生成測試報告

run_report.py

# coding: utf-8

# author: hmk

from HTMLTestRunner importHTMLTestRunner

importunittest

importtime, os

root_dir = os.path.dirname(os.path.abspath('.'))? # 獲取當前文件所在目錄的父目錄的絕對路徑,也就是項目所在路徑E:\DDT_Interface

case_dir = root_dir + '/test_case/'? # 根據項目所在路徑,找到用例所在的相對項目的路徑

print(root_dir)

print(case_dir)

"""定義discover方法"""

discover = unittest.defaultTestLoader.discover(case_dir,

pattern='test*.py', top_level_dir=None)

"""

1.case_dir即測試用例所在目錄

2.pattern='test_*.py' :表示用例文件名的匹配原則,“*”表示任意多個字符

3.top_level_dir=None:測試模塊的頂層目錄。如果沒頂層目錄(也就是說測試用例不是放在多級目錄中),默認為None

"""

if __name__ == "__main__":

"""直接加載discover"""

now = time.strftime("%Y-%m-%d%H_%M_%S")

filename = root_dir +'/report/' + now + '_result.html'? #定義報告存放路徑

print(filename)

fp = open(filename,'wb')

runner =HTMLTestRunner(stream=fp, title='個人網企業網接口測試報告', description='測試結果如下: ')

runner.run(discover)

fp.close()

ok ,unittest+ddt進行接口測試就完成了,還有很多不足,yaml配置文件還可以繼續設計優化,例如可以把請求url也加進去。

其實感覺如何設計測試用例,組織測試數據也是壹件很有意思的事情,很多事情都必須先有壹個良好的設計思路才會進行的更順暢。總之勤於思考,多參考他人的思路。不是有句話嗎,學而不思則罔,思而不學則殆。