背景:要求寫一套接口測試工具。過程中遇到了WebService接口的問題,遂寫下本篇文章。
階段問題1:
需要利用數據驅動,然后讀取excel中的數據並直接調用。但是webService接口與http接口不同。http接口調用是這樣的:
Request(method=’’,url=’’,param=’’)
只需要傳入對應的URl,參數就可以了。
但是webservice接口調用是這樣的:
Client.service.函數(參數)這里的函數是我們可以寫入的。 此時我們如果需要調用可以這樣:
eval(“client.service.{0}{1}”).format(method,data)
下面問題就來了,這里的data,我們並不知道有幾個參數。這個時候我想了一個辦法:
eval(“client.service.{0}{1}”).format(method,*data)
Data傳過來是一個list,那么我就將data這個list進行解包。但是這樣好像行不通?
因為格式化參數的時候我沒有辦法指定具體有一個參數,難道不用指定參數個數?用{}{}?這樣也行不通。
解決方法,反向思想:
eval(“client.service.{0}(*{1})”).format(method,eval(data))
解釋一波:
首先eval(data) ,這里會是這樣的數據 [‘param1’,’param2’,’param3’]
method假設是 MYMETHOD
那么format之前是這樣的
eval(“client.service.{0}(*{1})”).format(MYMETHOD,[‘param1’,’param2’,’param3’])
format 以后是這樣的
“client.service.MYMETHOD(*[‘param1’,’param2’,’param3’])”
這樣就會直接去調用我們的函數,並且將我們的list轉換成我們需要的方法,也就是這樣的:
client.service.MYMETHOD(‘param1’,’param2’,’param3’)
此問題終結。