1. 程式人生 > >利用unittest+ddt進行介面測試(一):簡單demo

利用unittest+ddt進行介面測試(一):簡單demo

原文地址

一般進行介面測試時,每個介面的傳參都不止一種情況,一般會考慮正向、逆向等多種組合。所以在測試一個介面時通常會編寫多條case,而這些case除了傳參不同外,其實並沒什麼區別。

這個時候就可以利用ddt來管理測試資料,提高程式碼複用率。

先看一個簡單的demo

複製程式碼

# coding: utf-8
# author: Archer

import unittest
import ddt
import requests
import HTMLTestRunner

# 介面引數,用列表[]包裹起來,每組資料則是字典格式
test_data = [{
    "clientCode": "韓",
    "topic": "測試介面",
    "content": "測試介面",
    "resrcType": "0",
    "assert": "200"   # assert並不是介面需要的引數,是為了對返回結果進行斷言而加在這裡的預期結果
},
    {
        "clientCode": "",
        "topic": "測試介面2",
        "content": "測試介面2",
        "resrcType": "0",
        "assert": "400"
    },
    {
        "clientCode": "韓",
        "topic": "",
        "content": "測試介面2",
        "resrcType": "0",
        "assert": "400"
    }]


@ddt.ddt
class Test(unittest.TestCase):
    def setUp(self):
        self.url = 'http://192.168.X.XXX:7001/XXX/api/XXXise/info/XXX/save.v'

    @ddt.data(*test_data)
    def test_ddt(self, value):   # 定義一個變數value來接收ddt.data中的資料
        r = requests.post(self.url, value)
        print(r.json())
        self.assertTrue(value['assert'] in r.text)   # 利用引數組合中的assert引數進行斷言


if __name__ == '__main__':
    unittest.main()

複製程式碼

可以看到,雖然只寫了一條用例,但是卻執行了3次,根據傳參不同,得到不同的結果,相當於3條用例。

我這裡只是用了ddt.data,ddt還有其他的裝飾方法,如:ddt.file_dataddt.unpack

關於ddt的詳細介紹可以看看這篇部落格:https://www.cnblogs.com/miniren/p/7099187.html和https://blog.csdn.net/wushuai150831/article/details/78453549,寫的比較全面