前言
我們在進行接口測試時尿庐,大多數(shù)時候都是針對接口的參數(shù)設計用例進行測試,而相應的測試步驟基本相同(調(diào)用接口呢堰,檢查返回碼抄瑟,檢查返回數(shù)據(jù))。這種場景非常適合使用數(shù)據(jù)驅動的測試枉疼。數(shù)據(jù)驅動測試的理念是將測試數(shù)據(jù)和測試步驟分離開皮假,使得測試代碼更加簡潔,增加測試數(shù)據(jù)就能增加測試用例骂维,這樣使得測試更加方便快捷∪亲剩現(xiàn)本文主要介紹python中的ddt框架ddt。
場景
假設現(xiàn)在有一個待測接口為創(chuàng)建用戶:CreateUser,創(chuàng)建用戶的參數(shù)信息如下:
參數(shù) | 說明 |
---|---|
username | 長度3-10航闺,必填 |
phone | 11位數(shù)字褪测,必填 |
選填 | |
sex | 默認值0猴誊,0代表男 1代表女 |
針對這個說明可以設計幾個測試用例如下(包括但不限于):
參數(shù)數(shù)值 (順序跟上表一致) | 預期結果 |
---|---|
"ab","13800000000", | 返回400,username不符合要求 |
"abc","13800000001", | 返回200 |
"abc1234567","13800000002", None, 1 | 返回200 |
"abc123456","13800000003", None, 3 | 返回400侮措,性別不符合要求 |
假設接口的授權調(diào)用已經(jīng)在MyRequst中實現(xiàn)懈叹,則調(diào)用測試接口的步驟大致如下:
import MyRequst
para={"username": "ab",
"phone": "3800000000"
}
ret = MyRequst.post(para)
assert ret.status_code == 200
assert ret.msg == None
ddt的具體實踐
如果不使用數(shù)據(jù)驅動測試,我們的測試可能會按如下這種模式寫:
import unittest
import MyRequst
class TestCreateUser(unittest.TestCase):
def test1(self):
para={"username": "ab",
"phone": "3800000000"
}
ret = MyRequst.post(para)
assert ret.status_code == 400
assert ret.msg == "username is invalid"
def test2(self):
para={"username": "abc",
"phone": "3800000001"
}
ret = MyRequst.post(para)
assert ret.status_code == 200
assert ret.msg == None
可見測試代碼太冗長分扎,如果想增加新的測試用例澄成,代碼還會越來越長。而使用ddt可以將測試數(shù)據(jù)分離出去畏吓,代碼如下:
import unittest
from ddt import ddt, data, file_data, unpack
import MyRequst
@ddt
class TestCreateUser(unittest.TestCase):
#使用外部文件作為測試數(shù)據(jù)
@file_data('data/test_data_dict_dict.json')
def test(self, username, phone, email, sex, code, msg):
para={"username": username,
"phone": phone,
"email": email,
"sex": sex
}
ret = MyRequst.post(para)
assert ret.status_code == code
assert ret.msg == msg
而其中test_data_dict_dict.json文件中保存測試數(shù)據(jù)
{
"1":{
"username":"ab",
"phone":"3800000000",
"email":None,
"sex": None,
"code": 400,
"msg":"username is invalid"
},
"2":{
"username":"abc",
"phone":"3800000001",
"email":None,
"sex": None,
"code": 200,
"msg":None
}
}
增加測試用例只需要在測試數(shù)據(jù)文件中增加相應dict即可墨状,無需要改動測試代碼,這樣非常便于管理庵佣,測試步驟和測試用例都非常清晰明了歉胶。
如果不想使用外部文件,ddt還提供了在data方法可以在測試用例文件中使用元祖列表等傳入測試數(shù)據(jù)巴粪,具體用法可參考官方文檔