在做接口測試的時候我們會遇到過需要填寫表單的形式,那么如何通過requests進行請求呢? 這里需要引入新的python的第3方庫requests-toolbelt
requests-toolbelt
1、安裝
pip install requests-toolbelt

官方文檔:https://pypi.org/project/requests-toolbelt/
源碼:
這里包含了許多方法,我們慢慢的進行了解
# -*- coding: utf-8 -*- """ requests-toolbelt ================= See http://toolbelt.rtfd.org/ for documentation :copyright: (c) 2014 by Ian Cordasco and Cory Benfield :license: Apache v2.0, see LICENSE for more details """ from .adapters import SSLAdapter, SourceAddressAdapter from .auth.guess import GuessAuth from .multipart import ( MultipartEncoder, MultipartEncoderMonitor, MultipartDecoder, ImproperBodyPartContentException, NonMultipartContentTypeException ) from .streaming_iterator import StreamingIterator from .utils.user_agent import user_agent __title__ = 'requests-toolbelt' __authors__ = 'Ian Cordasco, Cory Benfield' __license__ = 'Apache v2.0' __copyright__ = 'Copyright 2014 Ian Cordasco, Cory Benfield' __version__ = '0.9.1' __version_info__ = tuple(int(i) for i in __version__.split('.')) __all__ = [ 'GuessAuth', 'MultipartEncoder', 'MultipartEncoderMonitor', 'MultipartDecoder', 'SSLAdapter', 'SourceAddressAdapter', 'StreamingIterator', 'user_agent', 'ImproperBodyPartContentException', 'NonMultipartContentTypeException', '__title__', '__authors__', '__license__', '__copyright__', '__version__', '__version_info__', ]
這里我們會用到MultipartEncoder方法
MultipartEncoder上傳文件用法
import requests from requests_toolbelt import MultipartEncoder encoder = MultipartEncoder({'field': 'value', 'other_field', 'other_value'}) r = requests.post('https://httpbin.org/post', data=encoder, headers={'Content-Type': encoder.content_type})
MultipartEncoder填寫表格用法
from requests_toolbelt import MultipartEncoder import requests m = MultipartEncoder(fields={'field0': 'value', 'field1': 'value'}) r = requests.post('http://httpbin.org/post', data=m, headers={'Content-Type': m.content_type})
小試牛刀
這里安靜通過舉個小栗子來更加理解requests-toolbelt的用法,這里通過禪道提bug的接口
1、抓取禪道提bug的接口,分析參數數據
填寫bug列表,打開Fiddler進行抓包分析數據

通過抓包數據分析,可以看出來這是個multipart/form-data的數據類型,下面是填寫的參數信息,老規矩,一個個寫下來(這里不清楚那個是必填項或者是需要的內容)。

2、導入requests-toobelt使用MultipartEncoder方法
參照源碼方式,一個個參數進行添加,然后修改標題和修改bug內容
# coding:utf-8 import requests from requests_toolbelt import MultipartEncoder # 接口地址 url = 'http://demo.zentao.net/bug-create-39-0-moduleID=0.html' # 請求頭 headers = { "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36", "Cookie":"__cfduid=dcc14bd65a47b718842d4b412e2d517721545125741; Hm_lvt_731bb611021e8720f1fc3035dfd2a44f=1572415581; Hm_lpvt_731bb611021e8720f1fc3035dfd2a44f=1572415585; zentaosid=n6m4ua9k7b2c0hte58mqfi2lc0; lang=zh-cn; device=desktop; theme=default; UM_distinctid=16e1b4fca6c56a-0522f3f1a973da-5f123917-100200-16e1b4fca6d67f; CNZZDATA4553360=cnzz_eid%3D557018590-1572412770-null%26ntime%3D1572412770; lastProduct=39; windowWidth=1366; windowHeight=625; preBranch=0; preProductID=39; bugModule=0; qaBugOrder=id_desc" } # 請求參數信息 data = MultipartEncoder( fields=[ ('product',"40"), ('branch','0'), ('module','0'), ('project','448'), ('openedBuild[]','trunk'), ('assignedTo',''), ('deadline',''), ('type','codeerror'), ('os','windows'), # 操作系統 ('browser','all'), # 瀏覽器 ('title','這是bug的名稱'), ('color',''), ('severity','3'), # 嚴重級 ('pri','3'), # 優先級 ('steps','<p>[步驟]</p>\n<p>測試步驟第一步</p>\n<br />\n<p>[結果]</p>這里測試步驟第2步\n<br />\n<p>[期望]</p>\n<br />'), ('story',''), ('task',''), ('oldTaskID','0'), ('mailto[]','dev1'), ('contactListMenu',''), ('keywords',''), ('status','active'), ('labels[]',''), ('files[]',''), ('uid','5db92b80efe7w'), ('case','0'), ('caseVersion','0'), ('caseVersion','0'), ('result','0'), ('testtask','0'), ], ) r = requests.post(url,headers={'Content-Type': data.content_type},data=data)
3、查看是否請求成功
具體的應該去數據庫里看看數據有沒有添加成功,這里安靜模擬的接口,直接查看頁面發現已經添加成功了

通過一個小栗子讓我們熟悉了requests-toolbelt的用法,當然不僅僅只有這一種方法,其他的方法小伙伴們可以自己摸索下,自己嘗試寫下
如果安靜寫的內容對您有幫助,可以右下角點個關注,持續更新;如果哪里寫的有不對的地方,可以下方留言告訴安靜,看到后第一時間回復哦~~
