Python介面自動化測試之資料引數化
前言:
在介面測試中,介面的請求引數不可能一直一成不變,如果只有一兩個介面的時候,可以直接在程式碼中更改對應的值,但如果介面多達上百個的時候,一行一行的在程式碼中改引數, 是極其痛苦的一件事。這個時候,使用資料引數化的優點就體現出來了,只需要把所有引數寫到同一個地方,任一引數改變時,到指定地方修改該引數的值就可以了。
資料引數化的方式:
1、使用txt檔案儲存資料,這樣的優點在於txt檔案易於讀取,不論是linux還是windows下都容易開啟。
2、使用csv檔案儲存,優點在於,可以使用excel軟體開啟,這樣看上去資料會比較清晰。
3、使用json檔案(注意是檔案),這樣的優點也是可以直接查詢key值得到對應的values。
但是!但是!但是!
從txt和csv檔案中讀取到的資料是這樣的:
[request_id,nonce,aa,bb,cc]
可以看出是一個數組型別,那麼提取值時就必須使用list[0],list[1],list[2]這樣的方式提取,但真正的問題在於,你記得第一個對應的是哪一個值嗎?如果在兩個引數中間再增加一個引數,是不是就全亂了?所以理論上應該使用json檔案做資料引數化,但是!但是!但是!json資料不支援註釋,資料一多,也是亂七八糟的。那麼該如何處理呢?
Python字典引數化:
其實,我們不必要緣木求魚,也不必捨近求遠,有時候我們寤寐思服,求而不得的東西,往往就在你容易忽略的地方,Python語言本身就提供了一個字典型別。使用字典做資料引數化,只需要dict[“name”]就可以了。那麼接下來就是實際的操作。
示例:
新建一個檔案Data。py,將以下程式碼複製進去:
# 多個不同的引數時寫成多個不同的字典即可
data
=
{
“url”
:
“https://openapi。dvr163。com/message/nonce”
,
# url地址
“method”
:
“get”
,
#請求引數
}
在測試的demo中匯入並使用:
import
requests
import
pandas
import
time
from
Data
import
data
#http請求demo
def
GetTest
(
data
):
#介面請求
url
=
data
[
“url”
]
Param
=
{
# 傳遞的引數,字典型別,所有引數寫在這裡即可
“method”
:
data
[
“method”
]
}
Rque
=
requests
。
get
(
url
,
Param
)
# 發起Get請求
#測試資料
data
=
{
“Interface”
:
“獲取伺服器驗證碼”
,
#介面名稱
“time”
:
time
。
strftime
(
‘%Y-%m-
%d
_%H:%M:%S’
,
time
。
localtime
(
time
。
time
())),
#測試時間,這裡使用格式化時間,
“StatusCode”
:[
Rque
。
status_code
]
,
#介面響應狀態碼
“Responseime”
:[
Rque
。
elapsed
。
total_seconds
()],
#介面響應時間
“Response DATA”
:
Rque
。
text
,
#響應的資料,這裡建議使用text,因為不是每個介面都返回json格式
“Request body”
:
Rque
。
request
。
body
,
# 傳送的資料,get請求的資料會在url中
“Url”
:
Rque
。
url
,
# 請求的url
#更多引數請自行新增
}
#寫入csv中,以下兩行程式碼建議封裝成函式
dataCSV
=
pandas
。
DataFrame
(
data
)
dataCSV
。
to_csv
(
“chen。csv”
,
index
=
False
,
mode
=
“a”
,
header
=
False
,
encoding
=
“GBK”
)
GetTest
(
data
)
“”“
參考以上程式碼即可實現資料引數化,將字典單獨存放到一個檔案的好處是方便後面修改資料
在函式內呼叫時,記得要把引數傳入,即 def GetTest(data):(注意括號中的data)
”“”
目錄結構:
總結:
資料引數化只須使用pyhton提供的字典型別即可。根據key值獲取到相應的值,邏輯清晰也易於指令碼的維護。
上一篇:如何評價亞當蕭華?
下一篇:他她為什麼選擇翠鳥·雲