专栏首页Python自动化测试python接口测试之http请求

python接口测试之http请求

python的强大之处在于提供了很多的标准库,这些标准库可以直接调用,本节部分,重点学习和总结在接口测试中Python的Http请求的库的学习。

首先来看httplib,官方的解释为:本模块定义了类实现客户端的 HTTP 和 HTTPS 协议。它通常不能直接使用 — — 模块 urllib 用于处理使用 HTTP 和 HTTPS 的 Url。使用httplib来做一个简单的对百度的请求,看这样的一个实现过程,见实现的代码:

#!/usr/bin/env python
#coding:utf-8

import  httplib
def getBaidu():   
   http_client=httplib.HTTPConnection('baidu.com',80,timeout=20)
    http_client.request('GET','')
    r=http_client.getresponse()    
    print  r.status    
    print r.read()

getBaidu()

这里我们详细的来看r提供了那些方法,见输出的结果:

#!/usr/bin/env python
#coding:utf-8

import  httplib
  
def getBaidu():    
   http_client=httplib.HTTPConnection('baidu.com',80,timeout=20)
    http_client.request('GET','')
    r=http_client.getresponse()   
    print dir(r)
 
getBaidu()
见输出的结果内容:
C:\Python27\python.exe D:/git/Python/bookDay/api/http/httplipTest.py
['__doc__', '__init__', '__module__', '_check_close', '_method', '_read_chunked', '_read_status', '_safe_read', 'begin', 'chunk_left', 'chunked', 'close', 'debuglevel', 'fileno', 'fp', 'getheader', 'getheaders', 'isclosed', 'length', 'msg', 'read', 'reason', 'status', 'strict', 'version', 'will_close']

Process finished with exit code 0

使用dir(r)方法可以看到调用的方法,如我们想看到请求百度这样的一个GET请求,到底返回的status code是多少,是否OK,响应内容是什么,headers是什么,见实现的代码和输出的内容:

#!/usr/bin/env python
#coding:utf-8

import  httplib
  
def getBaidu():    
   http_client=httplib.HTTPConnection('www.baidu.com',80,timeout=20)
    http_client.request('GET','/')
    r=http_client.getresponse()    
    print u'状态的状态码:\n',r.status    
    print u'是否请求Ok:\n',r.reason    
    print u'header是多少:\n',r.getheaders()    
    print u'Response消息结构:\n',r.msg    
    print u'响应内容:\n',r.read()

getBaidu()

见输出的结果内容:

C:\Python27\python.exe D:/git/Python/bookDay/api/http/httplipTest.py
状态的状态码:200是否请求Ok:
OK
header是多少:
[('content-length', '14613'), ('set-cookie', 'BAIDUID=5BE300935709382ADC6AFA01D08E1959:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com, BIDUPSID=5BE300935709382ADC6AFA01D08E1959; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com, PSTM=1481724972; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com'), ('accept-ranges', 'bytes'), ('vary', 'Accept-Encoding'), ('server', 'BWS/1.1'), ('last-modified', 'Mon, 12 Dec 2016 06:09:00 GMT'), ('connection', 'Keep-Alive'), ('x-ua-compatible', 'IE=Edge,chrome=1'), ('pragma', 'no-cache'), ('cache-control', 'no-cache'), ('date', 'Wed, 14 Dec 2016 14:16:12 GMT'), ('p3p', 'CP=" OTI DSP COR IVA OUR IND COM "'), ('content-type', 'text/html')]
Response消息结构:
Date: Wed, 14 Dec 2016 14:16:12 GMT
Content-Type: text/html
Content-Length: 14613Last-Modified: Mon, 12 Dec 2016 06:09:00 GMT
Connection: Keep-Alive
Vary: Accept-Encoding
Set-Cookie: BAIDUID=5BE300935709382ADC6AFA01D08E1959:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: BIDUPSID=5BE300935709382ADC6AFA01D08E1959; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: PSTM=1481724972; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
P3P: CP=" OTI DSP COR IVA OUR IND COM "Server: BWS/1.1X-UA-Compatible: IE=Edge,chrome=1Pragma: no-cache
Cache-control: no-cache
Accept-Ranges: bytes

下来来看urllib2的库,看官方的解释:urllib2 定义了很多函数和类,这些函数和类能够帮助我们在复杂的情况下获取URLS内容。复杂情况— 基本的和深入的验证, 重定向, cookies 等等.和如上一样,我们使用urllib2来实现对百度的请求,见GET请求的代码:

#!/usr/bin/env python
#coding:utf-8

import  urllib
import  urllib2
  
def get_baidu():
    r=urllib2.urlopen('http://www.baidu.com')    
    print u'Response code:\n',r.getcode(),r.msg    
    print u'headers:\n',r.headers

get_baidu()

见输出结果的内容:

C:\Python27\python.exe D:/git/Python/bookDay/api/http/httplipTest.py
Response code:200 OK
headers:
Date: Wed, 14 Dec 2016 14:52:28 GMT
Content-Type: text/html; charset=utf-8Vary: Accept-Encoding
Set-Cookie: BAIDUID=55980CB92E6F9F88BF0FF2B73E8607D4:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: BIDUPSID=55980CB92E6F9F88BF0FF2B73E8607D4; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: PSTM=1481727148; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: BDSVRTM=0; path=/Set-Cookie: BD_HOME=0; path=/Set-Cookie: H_PS_PSSID=1429_21422_21120_21553_21408_20927; path=/; domain=.baidu.com
P3P: CP=" OTI DSP COR IVA OUR IND COM "Cache-Control: private
Cxy_all: baidu+435ac15289339958b4bcff45cd341d25
Expires: Wed, 14 Dec 2016 14:51:52 GMT
X-Powered-By: HPHP
Server: BWS/1.1X-UA-Compatible: IE=Edge,chrome=1BDPAGETYPE: 1BDQID: 0xfc9210c000017b10BDUSERID: 0
Transfer-Encoding: chunked
Proxy-Connection: Close

下面使用urllib2实现一个POST的请求过程,见实现的代码:

#!/usr/bin/env python
#coding:utf-8

import  urllib
import  urllib2
  
def get_baidu():
    r=urllib2.urlopen('http://www.baidu.com')    
    print u'Response code:\n',r.getcode(),r.msg    
    print u'headers:\n',r.headers

def post_cun():
    params=urllib.urlencode({'cityId':'438'})
    r=urllib2.urlopen('http://m.cyw.com/index.php?m=api&c=cookie&a=setcity',params)    
    print r.getcode(),r.msg    
    print r.read()post_cun()

见输出结果的json内容:

C:\Python27\python.exe D:/git/Python/bookDay/api/http/httplipTest.py200 OK
{"status":true,"homeUrl":"\/xian"}

本文分享自微信公众号 - Python自动化测试(wuya-python),作者:无涯

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-12-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 接口测试实战之postman中proxy settings应用(十九)

    在接口测试应用中,对于WEB产品来说,使用浏览器自带的开发工具可以很好的可以客户端与服务端之间的请求,但是对于移动产品来说这个过程变得有点复杂,虽...

    无涯WuYa
  • 测试驱动之csv文件与ddt模块的结合在自动化中的引用(十一)

    在前面我这边介绍到了ddt的模块,那么现在我这边ddt模块和csv文件结合,来进行自动化的测试,编辑后的csv文件后:

    无涯WuYa
  • python接口测试之401错误的分析和解决(十六)

    在接口的测试中,经常会遇到客户端向服务端发送一个请求,服务端返回401的错误,那么今天本文章就来说明在接口测试中如何分析以及解决该问题。

    无涯WuYa
  • Alexa研究人员通过减少数据不平衡,可将AI系统错误率降低30%

    平衡的训练数据是分类器的主要障碍,当一类样本不成比例地对语料库做出贡献时,分类器自然会比其他类型更频繁地遇到它,因此有可能对它产生偏见。

    AiTechYun
  • Nginx自动跳转到手机端——区分PC或手机访问不同域名

    zhangdd
  • Docker 网络

    本文介绍 Docker 网络。 官方文档:https://docs.docker.com/engine/userguide/networking/ 网络类型 b...

    康怀帅
  • DBus数据库表结构变更处理方案

    导读:DBus是我们要介绍的在敏捷大数据(Agile BigData)背景下的第一个平台。企业中大量业务数据保存在各个业务系统数据库中,为同时解决数据同步的一致...

    宜信技术学院
  • 同源政策与跨域请求

    1995年,同源政策由 Netscape(网景) 公司引入浏览器。目前,所有浏览器都实行这个政策。

    章鱼喵
  • 数据库索引

    索引就是加快检索表中数据的方法。数据库的索引类似于书籍的索引。在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息。在数据库中,索引也允许数据库...

    Kevin_Zhang
  • 1001. 温度转换

    题目描述 将输入的华氏温度转换为摄氏温度。由华氏温度F与摄氏温度C的转换公式为:F=C×9/5+32。 输入 输入一个实数,表示华氏温度 输出 输出对应的摄氏温...

    attack

扫码关注云+社区

领取腾讯云代金券