unittest---unittest數據驅動(ddt)

  在作測試的時候,有些地方不管是接口仍是UI只是參數數據的輸入不同,操做過程是同樣的。重複去寫操做過程會增長代碼量,咱們能夠經過參數化的方式解決這個問題,也叫作數據驅動,咱們經過python作參數化的方法有不少種,今天咱們介紹一種簡單的方法DDThtml

ddt

官方文檔:https://ddt.readthedocs.io/en/latest/example.htmlpython

ddt屬於python的第3方庫,須要經過pip進行安裝json

pip install ddt

ddt中經常使用的類的裝飾器一個data(能夠直接傳數據)一個find_data(能夠經過json或者yaml傳輸)解壓分析數據unpack,剩下的小夥伴們能夠本身看看源碼進行學習哈api

data裝飾器源碼app

def data(*values):
    """
    方法裝飾器來添加到您的測試方法中。
    應該添加到' ' unittest.TestCase ' '實例的方法中
    """
    global index_len
    index_len = len(str(len(values)))
    return idata(values)

find_data裝飾器源碼post

def file_data(value):
    """
   方法裝飾器來添加到您的測試方法中。
應該添加到' ' unittest.TestCase ' '實例的方法中。
' ' value ' '應該是一個相對於文件目錄的路徑
包含修飾過的' ' unittest.TestCase ' '。該文件
應該包含JSON編碼的數據,能夠是列表,也能夠是
字典
對於列表,列表中的每一個值都對應一個值
測試用例,該值將鏈接到測試方法
的名字。

    """
    def wrapper(func):
        setattr(func, FILE_ATTR, value)
        return func
    return wrapper

unpack源碼學習

def unpack(func):
    """
 方法裝飾器來添加解壓功能。

    """
    setattr(func, UNPACK_ATTR, True)
    return func

 這裏咱們經過一個來更加的瞭解下DDT數據驅動的內容測試

小試牛刀

經過查詢音樂接口瞭解ddt使用方法編碼

data裝飾器

一、首先導入ddt模塊,在類在修飾ddt.ddturl

二、編寫ddt用例格式

三、使用的用例修飾ddt.data

四、查看導入數據是否正確

這裏的參數數據通常字典形式存放,一組數據爲一組字典

# coding:utf-8
import unittest
import requests
import ddt
# 參數數據
testddt = [{'name':'斷橋殘雪'},
           {'name':'像魚'}]
@ddt.ddt
class   Music(unittest.TestCase):

    def select(self,name):
        url = 'https://api.apiopen.top/searchMusic'
        data = {
             "name":name
        }
        r = requests.post(url,data=data)
        b = r.json()['result'][0]['title']
        return b
    @ddt.data(*testddt)
    def test01(self,data):
        print('當前測試數據:%s'%data)
        result = self.select(data['name'])
        self.assertEqual(result,data['name'])

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

經過執行後,咱們能夠發現用例所有都是經過的,執行的數據也是咱們ddt中存放的數據

unpack裝飾器

若是數據在字典內容展現,可是下面沒有具體的提取數據,咱們能夠經過這個unpack來解壓數據

# coding:utf-8
import unittest
import requests
import ddt
# 參數數據
testddt = [{'name':'斷橋殘雪'},{'name':'像魚'}]
@ddt.ddt
class   Music(unittest.TestCase):
    def select(self,name):
        url = 'https://api.apiopen.top/searchMusic'
        data = {
             "name":name
        }
        r = requests.post(url,data=data)
        b = r.json()['result'][0]['title']
        return b
    @ddt.data(*testddt)
    @ddt.unpack
    def test01(self,name):
        print('當前測試數據:%s'%name)
        result = self.select(name)
        self.assertEqual(result,name)

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

file_data裝飾器

file_data能夠經過讀取yaml和json的數據來進行實現,咱們能夠動手試試下,先配置yaml把想要的數據類型都存放在裏面

讀取方法,在用例上方添加裝飾器後面帶上yaml的文件名,經過請求後發現已經請求成功了

# coding:utf-8
import unittest
import requests
import ddt
@ddt.ddt
class   Music(unittest.TestCase):
    def select(self,name):
        url = 'https://api.apiopen.top/searchMusic'
        data = {
             "name":name
        }
        r = requests.post(url,data=data)
        b = r.json()['result'][0]['title']
        return b
    @ddt.file_data('name.yaml')
    def test01(self,name):
        print('當前測試數據:%s'%name)
        result = self.select(name)
        self.assertEqual(result,name)

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



當前測試數據:斷橋殘雪
當前測試數據:像魚
..
----------------------------------------------------------------------
Ran 2 tests in 0.244s

OK

這裏還有file_data也能夠請求json數據,這裏就不作寫,你們能夠本身動手寫一寫

相關文章
相關標籤/搜索