A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

 在做接口测试的时候我们会遇到过需要填写表单的形式,那么如何通过requests进行请求呢? 这里需要引入新的python的第3方库requests-toolbelt
requests-toolbelt
1、安装
pip install requests-toolbelt
源码:
这里包含了许多方法,我们慢慢的进行了解
[url=][/url]
# -*- 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, SourceAddressAdapterfrom .auth.guess import GuessAuthfrom .multipart import (    MultipartEncoder, MultipartEncoderMonitor, MultipartDecoder,    ImproperBodyPartContentException, NonMultipartContentTypeException    )from .streaming_iterator import StreamingIteratorfrom .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__',][url=][/url]

这里我们会用到MultipartEncoder方法
MultipartEncoder上传文件用法[url=][/url]
  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})[url=][/url]

MultipartEncoder填写表格用法[url=][/url]
from requests_toolbelt import MultipartEncoderimport requestsm = MultipartEncoder(fields={'field0': 'value', 'field1': 'value'})r = requests.post('http://httpbin.org/post', data=m,                  headers={'Content-Type': m.content_type})[url=][/url]

小试牛刀
这里安静通过举个小栗子来更加理解requests-toolbelt的用法,这里通过禅道提bug的接口
1、抓取禅道提bug的接口,分析参数数据
填写bug列表,打开Fiddler进行抓包分析数据
通过抓包数据分析,可以看出来这是个multipart/form-data的数据类型,下面是填写的参数信息,老规矩,一个个写下来(这里不清楚那个是必填项或者是需要的内容)。
2、导入requests-toobelt使用MultipartEncoder方法
参照源码方式,一个个参数进行添加,然后修改标题和修改bug内容
[url=][/url]
# coding:utf-8import requestsfrom 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)[url=][/url]

3、查看是否请求成功
具体的应该去数据库里看看数据有没有添加成功,这里安静模拟的接口,直接查看页面发现已经添加成功了


通过一个小栗子让我们熟悉了requests-toolbelt的用法,当然不仅仅只有这一种方法,其他的方法小伙伴们可以自己摸索下,自己尝试写下

2 个回复

倒序浏览
有任何问题欢迎在评论区留言
回复 使用道具 举报
或者添加学姐微信
DKA-2018
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马