接口自动化之--requests详解

1.什么是requests?

  答:requests是用来发送http请求以及接收http响应的python第三方库,主要用于做接口自动化。

2.安装

pip install requests

3.requests常用方法

requests.get(url, params=None, **kwargs) **kwargs可变长度的字典。
requests.post(url, data=None, json=None, **kwargs)
requests.put(url, data=None, **kwargs)
requests.delete(url, **kwargs)
requests.request(method, url, **kwargs)  包含了上面所有的请求

requests的底层方法:

底层方法:
session.request()

def request(self, method, url,
params=None, data=None, headers=None, cookies=None, files=None,
auth=None, timeout=None, allow_redirects=True, proxies=None,
hooks=None, stream=None, verify=None, cert=None, json=None):

4.request()返回的response对象

print(res.text) #返回body的text格式
print(res.json()) #返回body的dict格式
print(res.content) #返回body的byte格式
print(res.status_code) #返回状态码
print(res.reason) #返回状态信息
print(res.cookies) #返回响应的cookie信息
print(res.encoding) #返回编码格式
print(res.headers) #返回响应头
print(res.request.method) #返回请求的数据

5.json和dict(正常我们看到的都是字典就是json,若使用data传参,需要把字典转换成json字符串,若使用json传参,直接使用对应字典

字典:dict

JSON:JSON字符串

json.loads() 把json字符串转化成dict

json.dumps() 把dict转化成json字符串

6.对应的参数类型:

data:
1.通过data传参,表示表单传参,默认的请求头:Content-Type:application/xwww-from-urlencoded,请求的格式是:a=1&b=2,传的参数的类型:纯键值对的字
典。
2.通过data传参,默认请求头:text/plain,传的参数的类型:字符串类型。
json:
1.通过json传参,默认请求头:Content-Type:application/json,传的参数类型:dict字典
files:文件上传

7.注意:有cookies关联的接口使用,发送请求都要使用(例:Test_request.session.request)方式发送请求,存在接口关联的强求一定要注意,请求的方式要一致,我自己写最后的两个接口的时候一个使用requests.session.request发送,一个使用get发送,导致无法关联

import json
import random
import re
import requests


class Test_request:
    access_token = ''
    csrf_token = ''
    #使用session传参会自动关联cookies
    session = requests.session()
    def test_get_token(self):
        url = "https://地址/cgi-bin/token"
        data = {
            "grant_type":"client",
            "appid":"wx",
            "secret":"307c"
        }
        res = requests.get(url=url,params=data)
        print(res.json())
        Test_request.access_token = res.json()["access_token"]
    def test_get_mark(self):
        url = "https://地址/cgi-bin/tags/get"
        data = {
            "access_token": Test_request.access_token
        }
        res = requests.get(url=url,params=data)
        print(res.json())
    def test_create_mark(self):
        url = "https://地址/cgi-bin/tags/create?access_token="+Test_request.access_token
        data ={"tag": {"name": "广东"+str(random.randint(10,100))}}
        res = requests.post(url=url,data=json.dumps(data))
        print(json.loads(json.dumps(res.json()).replace(r"\\","\\"))) #Unicode默认是一个斜杠,所以要替换
    def test_file_mark(self):
        url = "https://地址/cgi-bin/media/uploadimg?access_token="+Test_request.access_token
        data = {
            #"access_token": Test_request.access_token,这样传值是错误的,要做url中拼接
            "media": open(r"D:/Titen/baogao.png",mode="rb") #只要是文件就是要先打开,文件地址1.r"D:/Titen/baogao.png",2.r"D:\\Titen\\baogao.png",都可以
        }
        res = requests.post(url=url,files=data)
        print(res.json())


    def test_shouye_windphp(self):
        url = "http://地址/pp/"
        res = Test_request.session.request(method="get",url=url)
        Test_request.csrf_token= re.search('name="csrf_token" value="(.*?)"',res.text).group(1)#返回网页中查找
        print(Test_request.csrf_token)p
    def test_login_windphp(self):
        urls = "http://地址/pp/index.php?m=u&c=login&a=dorun"
        datas = {
            "username": "admin",
            "password": "123456",
            "csrf_token": Test_request.csrf_token,
            "backurl": "http://地址/pp/",
            "invite": ""
        }
        headers ={
            "Accept":"application/json, text/javascript, /; q=0.01",
            "X-Requested-With":"XMLHttpRequest"
        }
        # res = requests.post(url=url,data=data,headers=header)
        #这样操作解决cookies关联问题
        res =Test_request.session.request(method="post", url=urls, data=datas, headers=headers)
        print(res.text)

 

  每篇一句:

  我藏在人群中失去晴空

posted on 2021-12-04 17:07  Titen  阅读(510)  评论(0编辑  收藏  举报

导航