12.30 Excel+Python十分鐘跑完批量API,就是這麼簡單粗暴又好用

現在API測試被越來越多的公司重視,對於測試工程師來說每次收到需求之後首先要做的是研究需求文檔。既然接口是兩個獨立系統之間同步數據或訪問對方程序的途徑,我們也就是要先看看這些接口到底是連接了哪兩個系統,它們之間的關係到底是怎樣的。

Excel+Python十分鐘跑完批量API,就是這麼簡單粗暴又好用

所以一般需求文檔裡會包括接口名稱,接口描述,接口類型,接口地址,推送參數,返回參數這幾項內容。熟悉Postman的同學可以發現這些都是必需的部分:

Excel+Python十分鐘跑完批量API,就是這麼簡單粗暴又好用

有了這幾項內容之後,我們需要把需求文檔轉換成Excel,這樣不管是做案例管理,還是對比結果,都相對容易一些。而後期Python讀取和寫入也更方便。在Excel中,我們只寫入變化的部分,而對於相對固定的,例如server信息則直接在Python代碼中參數化。所以做出來的輸入文檔如下:

Excel+Python十分鐘跑完批量API,就是這麼簡單粗暴又好用

有了這些內容,我們還是使用xlrd和xlwt包對excel進行處理,對於如何使用xlrd和xlwt就不在本文做過多解釋了。為什麼要新建一個workbook2?因為在跑完一遍之後,如果我們發現有些接口跑出來的結果有問題,我們可以不用關閉workbook1,直接進行修改,然後rerun,就會生成新的workbook2,覆蓋之前的結果,節省打開關閉workbook的時間。

workbook1 = xlrd.open_workbook(r"C:\\Demo\\API\\API_Cases.xlsx")

  workbook2 = xlwt.Workbook(encoding='utf-8')

  sheet1 = workbook1.sheet_by_index(0)

  sheet2 = workbook2.add_sheet("response")

讀取內容之後,我們對需要參數化的部分進行修改,一般情況下,url的前半部分為http://xx.xx.xx.xx:8080不變,所以我們只需要把excel中第二列取出來拼接成url即可,body部分也如是,如果有固定部分的body,我們可以在python中直接定義,然後與excel中的內容進行拼接:

par_url = sheet1.col_values(1)

  body = sheet1.col_values(2)

當然,拼接的代碼需要寫在循環裡面:

request_url = 'https://postman-echo.com' + par_url[i]

  print(request_url)

執行的時候,我們用到的是requests這個包,如果需求中既有GET,又有POST,又有PUT,還有DELETE,由於用到的參數不同,我們可以分別處理。對於不同請求需要用到的不同的header,我們也可以在循環裡對其進行定義,如果區別很大,我們也可以在excel中單獨定義一列,然後在代碼中加入相應的讀取語句即可。對於POST類型的請求,我們需要以下幾個參數:

response = requests.post(url=request_url, headers={}, data=body[i])

  print(body[i])

在執行完之後,如果直接寫入excel,我們打開response文件之後會發現,所有的返回內容都變成了一行,非常不便於分析。所以我們需要先對返回的數據進行處理,再寫入excel。如果返回的內容中包含中文,則必須加上ensure_ascii=False, 否則就會出現編碼問題。

json_dic = json.dumps(json.loads(response.content), indent=4, ensure_ascii=False)

最後,我們把整理好的輸出內容寫入新建的excel文檔並保存,就大功告成了。

sheet2.write(i, 0, json_dic)

  workbook2.save(r"C:\\Demo\\API\\response.xls")

其中遇到了一些問題,也在這裡提示一下,比如在POST請求中,有些參數是隨機數,導致每次發送請求的時候都需要手動修改,否則就會報"已存在"之類的錯,這時候我們需要用到random這個包。我們以生成10位隨機數為例,在代碼中用生成的10位隨機數替換掉body中{{random}}的內容:

random_num = str(math.floor(1e10 * random.random()))

  response = requests.post(url=request_url, headers={}, data=body[i].replace('{{random}}', random_num))

運行結果如圖:

Excel+Python十分鐘跑完批量API,就是這麼簡單粗暴又好用

生成的新文件:

Excel+Python十分鐘跑完批量API,就是這麼簡單粗暴又好用

打開這個response.xls,可以看到50個API已經跑完了。點進A1可以看到response的具體內容:

Excel+Python十分鐘跑完批量API,就是這麼簡單粗暴又好用

請關注+私信回覆:“測試”就可以免費拿到軟件測試學習資料

Excel+Python十分鐘跑完批量API,就是這麼簡單粗暴又好用


分享到:


相關文章: