天天看点

接口测试--requests基础篇介绍安装requestsrequests常用方法TEXT与JSON的比较图片类型

        Hi,看这!!!博主的微信是qing_an_an,公众号是Sea_Cha,欢迎一起入坑。

        前面一篇我们讲了接口测试的理论加JSON的基本运用,,目前来说还是比较的简单的。这一篇的基础篇也还算简单,我们一起来看看吧。

接口理论+JSON基础

目录

介绍

安装requests

requests常用方法

基础操作

GET请求

POST请求

TEXT与JSON的比较

图片类型

介绍

        requests是一个python的库,通过简单的api实现python对http请求的操作,多用于爬虫或者接口测试。

        requests库是用python编写的,基于urllib库做的二次封装,采用Apache2 Licensed开源协 议的HTTP库;相比urllib库,requests库更加方便,可以节约我们大量的工作,完全满足 HTTP测试需求。

        requests支持HTTP连接保持(keep-alive)和连接池,支持使用cookie保持会话,支持文 件上传,支持自动确定响应内容的编码,支持国际化的 URL 和 POST 数据自动编码。

        文字游戏介绍到这。我看直接看正文!!!

安装requests

        两种方式:

                1、requests -i https://pypi.douban.com/simple

                        验证是否安装成功pip show requests

                2、直接在pycharm里面导入import requests,把鼠标移到上面去,点击install自己会下载

requests常用方法

        这里就一笔全部带过了!!!

        1. requests.get('https://www.baidu.com/get') #GET请求

        2. requests.post('https://www.baidu.com/post') #POST请求

        3. requests.put('https://www.baidu.com//put') #PUT请求(提交修改全部的数据)

        4. requests.delete('https://www.baidu.com/delete') #DELETE请求

        5. requests.requests(method,url, **kwargs) 以上方法都可以由requests()方法实现的,因此我 们也可以说requests()方法是最基本的

        这里也就是各种请求的运用,我们接下来一一看例题。

基础操作

import requests

res = requests.get(url='https://baidu.com')
print("url",res.url)
print("状态码:",res.status_code)
print("文本响应内容",res.text)
print("默认编码格式",res.encoding)
# 修改编码格式
res.encoding='utf-8'
print("修改后的编码格式",res.encoding)
           

GET请求

        在get请求后面加入数字与汉字

import requests

url='https://baidu.com'
res = requests.get(url,params='id=11001')
print(res.url)
           

        输出的结果是http://www.baidu.com/?id=1001,也有另一种接入方法:

import requests

url='https://baidu.com'
data = {'id':1001}
res = requests.get(url,data)
print(res.url)
           

        你也可以接入多个参数,混合起来发送请求:

import requests

url='https://baidu.com'
data = {'id':'1001,1002','home':'深圳'}
res = requests.get(url,data)
print(res.url)
           

        我们得到的是这样的一个地址:http://www.baidu.com/?id=1001%2C1002&home=%E6%B7%B1%E5%9C%B3,home后面我们接的是深圳,但是看起来像是乱码了,其实不是乱码,我们只需要通过解析就能得到汉字,自行搜索UrlEncode进行解码就好。

        除此之外我们还可以换另外一种的写法:

import requests

url='https://baidu.com'
data = {'id':'1001,1002','home':'深圳'}
res = requests.request('GET',url,params=data)
print(res.url)
           

POST请求

import requests
import json

url = 'http://api.test.zhulogic.com/designer_api/account/login_quick'
# 字典类型,需要转换
d = {
    "phone":1234568,
    "code":1234,
    "unionid":"",
    "messageType":3,
    "channel":"zhulogic"
}
# 1、将字典d转为json类型
json_d = json.dumps(d)
h = {'Content-Type':'application/json'}
res = requests.post(url,data=json_d,headers=h)
print(res.text)
           

        这里可以换一种将字典转为JSON类型的写法,为什么一定要替换,因为不替换会有夜歌error的报错,具体是什么宝报错,可以自己试试。这里的转换就是:

res = requests.post(url,json=d,headers=h)
print(res.text)
           

        亦或者直接干脆点跟get请求一样:

import requests
import json

url = 'http://api.test.zhulogic.com/designer_api/account/login_quick'
# 字典类型,需要转换
d = {
    "phone":12345678,
    "code":1234,
    "unionid":"",
    "messageType":3,
    "channel":"zhulogic"
}
res = requests.request('POST',url,json=d,headers=h)
print("状态码:",res.status_code)
print(res.text)
           

        这里我们想看到什么样的信息都可以打印,编码格式,请求的地址,响应的状态码等,都是可以的。

TEXT与JSON的比较

        响应对象.json:返还类型字典,可以通过键名来获取响应的值

        响应对象.text:返还类型为字符串,无法通过键名方式来获取响应的值

        他们也有一个共同的特点就是长的比较像字典。但是取值的方式还是有明显的不一样的地方

import requests
import json

url = 'http://api.test.zhulogic.com/designer_api/account/login_quick'
d = {
    "phone":12345678,
    "code":1234,
    "unionid":"",
    "messageType":3,
    "channel":"zhulogic"
}
h = {'Content-Type':'application/json'}
res = requests.request('POST',url,json=d,headers=h)
print(res.text)
print(res.json())
print(type(res.text))   # 字符串类型
print(type(res.json())) # 字典类型
# 取值比较
print("TEXT:",res.text[1:3])  # 切片,很不方便
print("JSON:",res.json()['message'])
           

        这样就能很明显的看出两者的不一样了,看看结果:

{"status_code":400,"message":"请输入正确的手机号码","data":null}
{'status_code': 400, 'message': '请输入正确的手机号码', 'data': None}
<class 'str'>
<class 'dict'>
TEXT: "s
JSON: 请输入正确的手机号码
           

图片类型

        这里就比较的特殊了。需要用到另一个方法content,我们直接访问百度的图片:https://www.baidu.com/img/flexible/logo/pc/result.png

import requests
import json

res = requests.get('https://www.baidu.com/img/flexible/logo/pc/result.png')
print(res.text)
           

        这样访问出来的都是乱码,比如:�PNGTŵ��w��E !�� "Y�J�啥的,一堆乱码。但是你用了content就不一样了,可以解析成一堆字节码。

import requests
import json

res = requests.get('https://www.baidu.com/img/flexible/logo/pc/result.png')
print(res.content)
           

         如果没复制错的话,解析出来就是这样的了。

b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xca\x00\x00\x00B\x08\x06\x00\x00\x00\x16\x86I\x1d\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x19\x93IDATx\x01\xed]\r|T\xc5\xb5
           

        这样看着没个图片的样子,我们给保存一下。以二进制的方式保存在当前的目录下。

import requests
import json

res = requests.get('https://www.baidu.com/img/flexible/logo/pc/result.png')
with open('baidu.png','wb') as f:
    f.write(res.content)