測試接口需要的數(shù)據(jù)是存儲在excel文檔中的扣溺,讀取比較麻煩战秋。下面是讀取excel文檔并獲取到接口測試必須數(shù)據(jù)和驗證結(jié)果數(shù)據(jù)的代碼。首先我們需要創(chuàng)建一個空的list來存放讀取到的數(shù)據(jù)夺欲,然后打開excel文檔媒至,從第二行開始讀取用例內(nèi)容(第一行是標(biāo)題),獲取到每行內(nèi)容后季二,只保留接口測試需要的數(shù)據(jù)(原來的excel文檔中第四列到第七列分別存放了url檩咱,請求方式,請求參數(shù)胯舷,預(yù)期結(jié)果)刻蚯,然后將這部分?jǐn)?shù)據(jù)存入空的list中。這樣cases就是一個二維數(shù)據(jù)桑嘶,這個list中包含了excel中每一行的用例數(shù)據(jù)炊汹,每個用例數(shù)據(jù)里面包含了四個元素。類似于[[url1,method1,req_data1,check1],[url2,method2,req_data2,check2]]逃顶。代碼中的apt_log是實例化的日志記錄類讨便。但是讀取后,在使用這些元素進行接口測試時口蝠,還需要再次轉(zhuǎn)換器钟,因為request模塊接口測試中的data是字典格式的。此處是list格式妙蔗,屆時還需要轉(zhuǎn)換傲霸。
def get_case(self, file_path):
cases = [] # 存放所有的測試用例
if file_path.endswith('.xls') or file_path.endswith('.xlsx'): # 判斷路徑是否存在
try:
book = xlrd.open_workbook(file_path)
sheet = book.sheet_by_index(0) # 打開用例文件
for i in range(1, sheet.nrows): # 從第二行開始遍歷excel文件內(nèi)容(第一行是標(biāo)題)
row_data = sheet.row_values(i) # 獲取每行內(nèi)容
cases.append(row_data[4:8]) # 在cases這個list中存每個用例的url,method,req_data,check
apt_log.info('共讀取%s條用例' % (len(cases))) # 檢查cases中的元素個數(shù),日志記錄讀取了幾條用例
self.file_path = file_path # 既然讀取成功說明這個文件路徑是正確的,那么這邊定義下面寫exccel就可以直接使用了
except Exception as e:
apt_log.error('【%s】用例打開失敗昙啄,錯誤信息:%s' % (file_path, e))
else:
apt_log.error('用例文件不合法穆役,%s' % file_path)
return cases
可以看到讀取excel步驟比較繁瑣,需要各種格式轉(zhuǎn)化梳凛。但是yaml格式的文件簡化了讀取用例的步驟耿币,讀取這個格式的文件會自動設(shè)置為字典模式。而且只要在yaml格式的文件中錄入數(shù)據(jù)時遵循了文件固定的格式韧拒,也可以自動讀取出雙層字典淹接,有多個用例時可以產(chǎn)生一個list包裹所有的字典格式的用例數(shù)據(jù)。如果不添加符號"-"叛溢,讀取時文件中的所有數(shù)據(jù)都會轉(zhuǎn)為字典格式塑悼,而添加后,文件數(shù)據(jù)讀取為list格式楷掉,但符號內(nèi)換行鎖緊記錄的數(shù)據(jù)是字典格式厢蒜。但是check數(shù)據(jù)中,直接在符號"-"后添加數(shù)據(jù)烹植,這部分?jǐn)?shù)據(jù)會讀取為list格式斑鸦。
- # 添加減號可以把用例轉(zhuǎn)為list,每一部分是一個字典
url: /api/user/login
detail: 正常登陸
method: post
data: # 存放多層嵌套字典的方式
username: *********
passwd: *******
# headers:
# User-agent: Firefox
# cookies:
# sign: adfdsfnsdfnsd
check: # 這樣定義check可以用in來判斷測試是否通過
- sign
- userId
-
url: /api/user/login
detail: 密碼錯誤
method: post
data:
username: *********
passwd: *********
check:
- 密碼錯誤
-
url: /api/user/login
detail: 必填參數(shù)未填草雕,不填密碼
method: post
data:
username: *********
check:
- 必填參數(shù)未填
然后讀取yaml格式的文件巷屿,就像一般文件讀取一樣操作就可以了。
1 import yaml
2
3
4 f = open('login.yaml',encoding='utf-8')
5 res = yaml.load(f)
6 print(res)
讀取到的數(shù)據(jù)格式如下促绵,可以看到一個list中包含了三個元素攒庵,每個元素都是字典格式的,這樣讀取數(shù)據(jù)就很方便了败晴。
1 [{'url': '/api/user/login', 'check': ['sign', 'userId'], 'method': 'post', 'data': {'username': '*********', 'passwd': '*********'}, 'detail': '正常登陸'},
2 {'url': '/api/user/login', 'check': ['密碼錯誤'], 'method': 'post', 'data': {'username': '*********', 'passwd': '*********'}, 'detail': '密碼錯誤'},
3 {'url': '/api/user/login', 'check': ['必填參數(shù)未填'], 'method': 'post', 'data': {'username': '*********'}, 'detail': '必填參數(shù)未填,不填密碼'}]