1. 程式人生 > >python介面自動化(四十一)- 發xml格式引數的post請求(超詳解)

python介面自動化(四十一)- 發xml格式引數的post請求(超詳解)

簡介

  最近在工作中,遇到一種奇葩的介面,它的引數資料是通過xml,進行傳遞的,不要大驚小怪的,林子大了什麼鳥都有,每個人的思路想法不一樣,開發的介面也是各式各樣的,如果想要統一的話,必須是提前團隊已經做好溝通定好規則,這樣就像在產品線上生成一

樣規格大小一致。就不會出現前邊的問題了,如果出現了怎麼辦?而且專案進度比較急,沒有時間修改,一期上線就只能湊合著用這組介面了,那麼作為QA的你,會不會測試,如何用程式碼、工具實現呢???等等問題跟著就產生了。

  前邊就有介紹到有關:post請求相對於get請求多一個body部分,body部分常見的資料型別有以下四種(注意是常見的,並不是只有4種)

  • application/x-www-form-urlencoded
  • application/json
  • text/xml
  • multipart/form-data

  本篇就來給各位看官和小夥伴們來講xml這種型別的body案例,如何用python去實現,由於公司的制度的保密性,所以公司的介面就不能在這裡給小夥伴們演示了,我給小夥伴們模擬了一個類似的介面,來給小夥伴們講解一下思路,希望小夥伴們在遇到的時候不至於

慌了神,不知道從何處入手,其實說到底,說破大天了,它的本質還是一個介面,那就還是按照介面的那套思路往上邊靠,這樣就思路不至於太偏,也會走很少的彎路。好了就不囉嗦了,直接進入今天的正題吧。

text/xml的資料型別

1、首先要確定post請求的body部分型別是xml格式,可以用fiddler抓包工具、postman、jemter、Google瀏覽器介面除錯外掛來進行缺洞,這裡我是用fiddler抓包工具來確定的。看到body部分格式如下:

2、body裡xml的引數:

<?xml version=“1.0” encoding = “UTF-8”?>
<COM>
<REQ name="北京-巨集哥">
<USER_ID>bjhongge</USER_ID>
<COMMODITY_ID>123456</COMMODITY_ID>
<SESSION_ID>absbnmasbnfmasbm1213</SESSION_ID>
</REQ>
</COM>

模擬介面請求

  PS:!!!先不要著急的去用程式碼實現,而是先用工具請求一次,看是否可以請求是否可以成功。不要一開始就抨擊怕啦的敲了半天,執行程式碼,傻眼了,執行結果和股市一樣行情大漲,一片紅色。結果你費了半天勁除錯程式碼,也沒查出錯誤。一問開發,開發用工具一試,一臉淫笑,然後笑呵呵的告訴你:額。。。,這個介面有點小問題,我需要調整一下下,這個時候是不是有一種想把開發介面的人痛揍一頓衝動,但是仔細想想還是自己的問題,如果一開始你就用工具模擬一下,出現問題立馬找開發人員確認溝通,就不會有後面的劇情了。這種場景一般是萌新、小白可能會遇到的。好了,以下給小夥伴們列舉了兩種方法,當然了你也可以用其他方法模擬,條條大路通羅馬,即可。

1、Google瀏覽器介面除錯外掛模擬

1、將url、請求方法、引數在外掛中填寫好,以後直接點選“Send”,即可

2、使用fiddler模擬

1、點開fiddler工具上composer選單

 

2、填寫URL、選擇請求方法、將xml資料直接複製到右下方Request Body部分,然後點右上角Execute就能執行了

python3程式碼實現

1、巨集哥演示環境:

(1)python37 (2)PyCharm 2018.3.5 x64  (3)作業系統win10

2、其實很簡單的,難而不會,會而不難。將xml格式的body部分直接寫成一個字串型別就行了,遇到換行的字串,在後面加個反斜槓

3、body引數用data去接收傳入,要是遇到編碼問題報錯,就對body部分encode下再傳入

4、執行結果

5、參考程式碼

 1 # coding=utf-8
 2 # 1.先設定編碼,utf-8可支援中英文,如上,一般放在第一行
 3 
 4 # 2.註釋:包括記錄建立時間,建立人,專案名稱。
 5 '''
 6 Created on 2019-5-29
 7 @author: 北京-巨集哥     QQ交流群:984942724
 8 Project:學習和使用 發xml格式引數的post請求
 9 '''
10 # 3.匯入模組
11 import requests
12 url = "http://httpbin.org/post"
13 
14 # python3字串換行,在右邊加個反斜槓
15 body = '<?xml version="1.0" encoding = "UTF-8"?>' \
16        '<COM>' \
17        '<REQ name="北京-巨集哥">' \
18        '<USER_ID></USER_ID>' \
19        '<COMMODITY_ID>123456</COMMODITY_ID>' \
20        '<SESSION_ID>absbnmasbnfmasbm1213</SESSION_ID>' \
21        '</REQ>' \
22        '</COM>'
23 
24 # 遇到編碼報錯時候,對body進行encode
25 r = requests.post(url, data=body.encode("utf-8"))
26 print(r.text)

從檔案中讀取XML資料

1、xml格式的資料寫到程式碼裡面,不太直觀,後期維護也不方便,可以把xml格式資料單獨拿出來寫到一個檔案裡,再用open函式去讀取

2、新建一個body1_xml檔案,寫入內容如下

3、參考內容

<?xml version=“1.0” encoding = “UTF-8”?>
<COM>
    <REQ name="北京-巨集哥">
        <USER_ID>bjhongge</USER_ID>
        <COMMODITY_ID>123456</COMMODITY_ID>
        <SESSION_ID>absbnmasbnfmasbm1213</SESSION_ID>
    </REQ>
</COM>

4、用open函式去讀xml內容

5、執行結果

6、參考程式碼

 1 # coding=utf-8
 2 # 1.先設定編碼,utf-8可支援中英文,如上,一般放在第一行
 3 
 4 # 2.註釋:包括記錄建立時間,建立人,專案名稱。
 5 '''
 6 Created on 2019-5-29
 7 @author: 北京-巨集哥     QQ交流群:984942724
 8 Project:學習和使用 發xml格式引數的post請求
 9 '''
10 # 3.匯入模組
11 import requests
12 url = "http://httpbin.org/post"
13 
14 # python3字串換行,在右邊加個反斜槓
15 body = '<?xml version="1.0" encoding = "UTF-8"?>' \
16        '<COM>' \
17        '<REQ name="北京-巨集哥">' \
18        '<USER_ID></USER_ID>' \
19        '<COMMODITY_ID>123456</COMMODITY_ID>' \
20        '<SESSION_ID>absbnmasbnfmasbm1213</SESSION_ID>' \
21        '</REQ>' \
22        '</COM>'
23 
24 with open('body1.xml',encoding='utf-8') as fp:
25        body = fp.read()
26 print(body)

小結

   嘿嘿,今天到這裡有關發xml格式引數的post請求就給小夥伴們介紹完了,看起來是不是相當簡單啊,但是在工作中遇到類似的問題,要靈活應用,不要生搬硬套。