接口測(cè)試中的好幫手python-ddt介紹

前言

我們?cè)谶M(jìn)行接口測(cè)試時(shí),大多數(shù)時(shí)候都是針對(duì)接口的參數(shù)設(shè)計(jì)用例進(jìn)行測(cè)試,而相應(yīng)的測(cè)試步驟基本相同(調(diào)用接口,檢查返回碼,檢查返回?cái)?shù)據(jù))。這種場(chǎng)景非常適合使用數(shù)據(jù)驅(qū)動(dòng)的測(cè)試。數(shù)據(jù)驅(qū)動(dòng)測(cè)試的理念是將測(cè)試數(shù)據(jù)和測(cè)試步驟分離開,使得測(cè)試代碼更加簡(jiǎn)潔,增加測(cè)試數(shù)據(jù)就能增加測(cè)試用例,這樣使得測(cè)試更加方便快捷?,F(xiàn)本文主要介紹python中的ddt框架ddt

場(chǎng)景

假設(shè)現(xiàn)在有一個(gè)待測(cè)接口為創(chuàng)建用戶:CreateUser,創(chuàng)建用戶的參數(shù)信息如下:

參數(shù) 說明
username 長(zhǎng)度3-10,必填
phone 11位數(shù)字,必填
email 選填
sex 默認(rèn)值0,0代表男 1代表女

針對(duì)這個(gè)說明可以設(shè)計(jì)幾個(gè)測(cè)試用例如下(包括但不限于):

參數(shù)數(shù)值 (順序跟上表一致) 預(yù)期結(jié)果
"ab","13800000000", 返回400,username不符合要求
"abc","13800000001", 返回200
"abc1234567","13800000002", None, 1 返回200
"abc123456","13800000003", None, 3 返回400,性別不符合要求

假設(shè)接口的授權(quán)調(diào)用已經(jīng)在MyRequst中實(shí)現(xiàn),則調(diào)用測(cè)試接口的步驟大致如下:

import MyRequst
para={"username": "ab",
      "phone": "3800000000"
}
ret = MyRequst.post(para)
assert ret.status_code == 200
assert ret.msg == None

ddt的具體實(shí)踐

如果不使用數(shù)據(jù)驅(qū)動(dòng)測(cè)試,我們的測(cè)試可能會(huì)按如下這種模式寫:

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

可見測(cè)試代碼太冗長(zhǎng),如果想增加新的測(cè)試用例,代碼還會(huì)越來越長(zhǎng)。而使用ddt可以將測(cè)試數(shù)據(jù)分離出去,代碼如下:

import unittest
from ddt import ddt, data, file_data, unpack
import MyRequst

@ddt
class TestCreateUser(unittest.TestCase):
    
    #使用外部文件作為測(cè)試數(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文件中保存測(cè)試數(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
       }
}

增加測(cè)試用例只需要在測(cè)試數(shù)據(jù)文件中增加相應(yīng)dict即可,無需要改動(dòng)測(cè)試代碼,這樣非常便于管理,測(cè)試步驟和測(cè)試用例都非常清晰明了。
如果不想使用外部文件,ddt還提供了在data方法可以在測(cè)試用例文件中使用元祖列表等傳入測(cè)試數(shù)據(jù),具體用法可參考官方文檔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容