unittest和pytest資料驅動分析

2021-10-07 04:08:30 字數 3671 閱讀 1896

資料驅動的思想在於引數與引數名的對應關係,一對一,多對多,然後對資料進行拆分

第一步,導包這裡要用到ddt,data,unpack

先講一下unpack的作用就是拆分,要不然資料就是乙個整體

from ddt import ddt, data, unpack
注意看清楚@data裡面的內容:

@data(,)

@unpack

deftest_01

(self,name,password)

:print

(name)

print

(password)

此時這是兩個單字典,這個時候要注意引數名要和字典的鍵值對應來讀取,此時結果應該為

1

1112

222

注意這是如果@data變成了

@data([,])

多了列表巢狀

@data([,

])deftest_01

(self,name,password)

:print

(name)

print

(password)

如果還是和之前一樣讀取的話結果就變成了

這樣就不好搞了,他就是乙個單列表了不能再拆分就失去了引數化的效果

接著看後面有字典形式怎麼操作。

引數化總不能手寫吧,肯定要讀取檔案

搞乙個execl檔案

# 第一行是標題

title=datalist[0]

data=datalist[1:

]return data

這是搞成了列表形式

[

['1'

,'111'],

['2'

,'222'],

['3'

,'333'

]]

如何引入呢?這裡*表示所有資料

@data(

*read(

).readexecl(

'data_execl'))

@unpack

deftest_01

(self,name,password)

:print

(name,password)

如果寫檔案讀取的時候不小心搞成了字典形式呢?

def

readexecl1

(self,filename)

: path=os.path.abspath(

'..')+

'/'+

'data'

+'/'

+filename+

'.xlsx'

work=xlrd.open_workbook(path)

sheet=work.sheet_by_name(

'sheet1'

) nrows=sheet.nrows

datalist=

for rows in

range

(nrows)

: data=sheet.row_values(rows)

# 第一行是標題

title=datalist[0]

datas=datalist[1:

] new=

for data in datas:

dic=

for i in

range

(len

(data)):

dic[title[i]

]=data[i]

return new

上面是寫成字典形式

[,,

,]

這個時候就不能用unpack了因為已經只是乙個列表了

@data(

*read(

).readexecl1(

'data_execl'))

deftest_01

(self,name)

:print

(name[

'name'

],name[

'password'

])

pytest引數化的話自帶方法

@pytest.mark.parametrize(『引數名』,[引數])

兩個引數的話

@pytest.mark.parametrze(

'引數名1,引數名2',[

['1'

,'111'],

['2'

,'222'

])

#read().readexecl('data_execl')=

# [['1', '111'], ['2', '222'], ['3', '333'], ['4', '444']]

@pytest.mark.parametrize(

'name,password'

,read(

).readexecl(

'data_execl'))

deftest_03

(self,name,password)

:print

(name,password)

#read().readexecl1('data_execl')=

#[, , , ]

@pytest.mark.parametrize(

'name'

,read(

).readexecl1(

'data_execl'))

deftest_03

(self,name)

:print

(name[

'name'

],name[

'password'

])

資料驅動主要還是資料檔案的讀取的問題,給他處理成相應的格式,然後記住一對一原則多對多原則就不難了

@pytest的引數一定要列表巢狀

Pytest和unittest的對比

一 用例編寫規則 1.unittest提供了test cases test suites test fixtures test runner相關的類,讓測試更加明確 方便 可控。使用unittest編寫用例,必須遵守以下規則 1 測試檔案必須先import unittest 2 測試類必須繼承uni...

unittest和pytest的區別

一 用例編寫規則 1.unittest提供了test cases test suites test fixtures test runner相關的類,讓測試更加明確 方便 可控。使用unittest編寫用例,必須遵守以下規則 1 測試檔案必須先import unittest 2 測試類必須繼承uni...

Pytest和Unittest的區別

一 用例編寫規則 1.使用unittest編寫測試用例必須遵循以下規則 1.必須首先 匯入 import unittest 2.測試類必須要繼承 unittest.testcase 3.測試方法必須以test kai開頭 2.pyest是python的第三方測試框架,是基於unittest的擴充套件...