接口测试从0开始--request扩展

一. 安装

pip install requests
easy_install requests

二.常用方法

1.GET 方法:url, params=None, **kwargs

#1.无参数
ret=requests.get(url="http://httpbin.org/get")
print(ret.url)
print(ret.text)
#2.params参数
payload = {'key1': 'value1', 'key2': 'value2'}
ret=requests.get(url="http://httpbin.org/get",params=payload)
print(ret.url)
print(ret.text)

2. POST 方法:url, data=None, json=None, **kwargs

#1.params参数,参数追加到url后面
payload = {'key1': 'value1', 'key2': 'value2'}
ret=requests.post(url="http://httpbin.org/post",params=payload)
print(ret.url)
print(ret.text)
#2.data参数,需要设置Content-Type,默认是None
payload = {'key1': 'value1', 'key2': 'value2'}
ret=requests.post(url="http://httpbin.org/post",data=payload)
print(ret.url)
print(ret.text)
#3.json参数,如果参数为JSON数据,
# 可以直接传入json参数,
# 它将自动编码并将Content-Type的置为application/json
payload = {'key1': 'value1', 'key2': 'value2'}
ret=requests.post(url="http://httpbin.org/post",json=payload)
print(ret.url)
print(ret.text)
#4.headers参数,参数值为JSON数据,
header={'key':'value'}
payload = {'key1': 'value1', 'key2': 'value2'}
ret=requests.post(url="http://httpbin.org/post",json=payload,headers=header)
print(ret.url)
print(ret.text)
#5.cookies参数,如果参数为JSON数据,
#json
cookie={'key':'value'}
payload = {'key1': 'value1', 'key2': 'value2'}
ret=requests.post(url="http://httpbin.org/post",json=payload,cookies=cookie)
print(ret.url)
print(ret.text)
#cookjar
from http.cookiejar import CookieJar, Cookie
obj = CookieJar()
obj.set_cookie(Cookie(version=0, name='c1', value='v1', port=None, domain='', path='/', secure=False, expires=None,
                          discard=True, comment=None, comment_url=None, rest={'HttpOnly': None}, rfc2109=False,
                          port_specified=False, domain_specified=False, domain_initial_dot=False, path_specified=False)
                   )
payload = {'key1': 'value1', 'key2': 'value2'}
ret=requests.post(url="http://httpbin.org/post",json=payload,cookies=obj)
print(ret.url)
print(ret.text)
#6.files参数,
#指定参数
file={'uploadFileParams':('fileName',open('1.txt','rb'),'fileType')}
ret=requests.post(url="http://httpbin.org/post",files=file)
print(ret.url)
print(ret.text)

3. requests.request()所有的请求方法实质都是实现重写了request()方法

#1.timeout参数,请求的超时时间
ret=requests.request('POST',url='http://httpbin.org/pos',timeout=15)
print(ret.url)
print(ret.text)
#2.verify参数,是否可以使用CA证书,默认True
ret=requests.request('POST',url='http://httpbin.org/pos',verify=True)
print(ret.url)
print(ret.text)
#3.proxies参数,请求代理
proxies = { "http": "http://10.10.1.10:3128", "https": "http://10.10.1.10:1080"}
ret=requests.request('POST',url='http://httpbin.org/pos',verify=True)
print(ret.url)
print(ret.text)

4.Response对象

rq=requests.request('POST',url='http://httpbin.org/pos',timeout=15)
print('请求返回的状态:{}'.format(rq.status_code))
print('请求的方式:{}'.format(rq.request))
print('请求的url:{}'.format(rq.url))
print('响应的header:{}'.format(rq.headers))
print('响应的cookie:{}'.format(rq.cookies))
print('服务端返回的content主体:{}'.format(rq.content))
print('服务端返回的文本'.format(rq.text))
print('服务端返回的内容转换成json'.format(rq.json()))
print('触发http异常'.format(rq.raise_for_status()))

三.扩展知识:

#1.http 响应码
00: ('continue',),
101: ('switching_protocols',),
102: ('processing',),
103: ('checkpoint',),
122: ('uri_too_long', 'request_uri_too_long'),
200: ('ok', 'okay', 'all_ok', 'all_okay', 'all_good', '\\o/', '✓'),
201: ('created',),
202: ('accepted',),
203: ('non_authoritative_info', 'non_authoritative_information'),
204: ('no_content',),
205: ('reset_content', 'reset'),
206: ('partial_content', 'partial'),
207: ('multi_status', 'multiple_status', 'multi_stati', 'multiple_stati'),
208: ('already_reported',),
226: ('im_used',),
 
# Redirection.
300: ('multiple_choices',),
301: ('moved_permanently', 'moved', '\\o-'),
302: ('found',),
303: ('see_other', 'other'),
304: ('not_modified',),
305: ('use_proxy',),
306: ('switch_proxy',),
307: ('temporary_redirect', 'temporary_moved', 'temporary'),
308: ('permanent_redirect',
 'resume_incomplete', 'resume',), # These 2 to be removed in 3.0
 
# Client Error.
400: ('bad_request', 'bad'),
401: ('unauthorized',),
402: ('payment_required', 'payment'),
403: ('forbidden',),
404: ('not_found', '-o-'),
405: ('method_not_allowed', 'not_allowed'),
406: ('not_acceptable',),
407: ('proxy_authentication_required', 'proxy_auth', 'proxy_authentication'),
408: ('request_timeout', 'timeout'),
409: ('conflict',),
410: ('gone',),
411: ('length_required',),
412: ('precondition_failed', 'precondition'),
413: ('request_entity_too_large',),
414: ('request_uri_too_large',),
415: ('unsupported_media_type', 'unsupported_media', 'media_type'),
416: ('requested_range_not_satisfiable', 'requested_range', 'range_not_satisfiable'),
417: ('expectation_failed',),
418: ('im_a_teapot', 'teapot', 'i_am_a_teapot'),
421: ('misdirected_request',),
422: ('unprocessable_entity', 'unprocessable'),
423: ('locked',),
424: ('failed_dependency', 'dependency'),
425: ('unordered_collection', 'unordered'),
426: ('upgrade_required', 'upgrade'),
428: ('precondition_required', 'precondition'),
429: ('too_many_requests', 'too_many'),
431: ('header_fields_too_large', 'fields_too_large'),
444: ('no_response', 'none'),
449: ('retry_with', 'retry'),
450: ('blocked_by_windows_parental_controls', 'parental_controls'),
451: ('unavailable_for_legal_reasons', 'legal_reasons'),
499: ('client_closed_request',),
 
# Server Error.
500: ('internal_server_error', 'server_error', '/o\\', '✗'),
501: ('not_implemented',),
502: ('bad_gateway',),
503: ('service_unavailable', 'unavailable'),
504: ('gateway_timeout',),
505: ('http_version_not_supported', 'http_version'),
506: ('variant_also_negotiates',),
507: ('insufficient_storage',),
509: ('bandwidth_limit_exceeded', 'bandwidth'),
510: ('not_extended',),
511: ('network_authentication_required', 'network_auth', 'network_authentication'),
#2.header的 Content-Type
header(‘Content-Type: text/plain’); // plain text file
header(‘Content-Type: image/jpeg’); // JPG picture
header(‘Content-Type: application/zip’); // ZIP file
header(‘Content-Type: application/pdf’); // PDF file
header(‘Content-Type: audio/mpeg’); // Audio MPEG (MP3,…) file
header(‘Content-Type: application/x-shockwave-flash’); // Flash animation
#3. 文件类型
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容