请选择 进入手机版 | 继续访问电脑版

湖南新梦想

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 404|回复: 0

requests的东西

[复制链接]

29

主题

29

帖子

158

积分

注册会员

Rank: 2

积分
158
发表于 2022-11-2 19:38:48 | 显示全部楼层 |阅读模式
requests接口自动化基础

首先,dos命令 pip install requests 第三包

1、模拟get请求
import requests
response = requests.get(url="https://www.baidu.com")

2、获取响应的一些信息
print(response.status_code) #响应状态码
print(response.reason) #响应信息
print(response.headers) #响应头
print(response.text) #响应正文

3、requests传参的几种参数
①先把参数放进字典,再去引用
②get传参数可直接放在地址栏,也可生成字典,再去通过params引用,如果get传的参数为关联参数,也需要通过params传参
③post传参数需要生成字典,再通过data引用
④当需要传请求头的时候,需要将请求头生成字典,再通过headers引用
response = session_obj.post(url="http://47.107.178.45/phpwind/index.php",data = data_info,headers=headers_info,params=params_info)

4、响应正文在字符串和json间的切换
①导入json模块:import json
②text转换为json,json_data = json.loads(response.text)
③json转换为text,str_data = json.dumps(json_data,ensure_ascii=False)
ensure_ascii=False 这句代码的使用,是因为把json格式的数据转换成字符串,默认会把中文转化成unicode编码,
使用这句代码,可以让它不进行转化成unicode编码

5、使用jsonpath解析数据
①安装第三方库:pip install jsonpath / import jsonpath
②使用jsonpath.jsonpath方法,$代表json数据,用[]表示索引值,
  • 表示所有
    json的数据放在前面,json表达式放在后面,记得在最后加[0]
    因为返回的值是一个列表,取值的加[0]
    value = jsonpath.jsonpath(json_data_02  ,"$[1].books[1].price")[0]
    ③用$..用相对路劲表示

    6、jmeter随机参数
    import random
    import time
    #随机整数
    def get_randomid(min,max):  
        return random.randint(min,max)

    # if __name__ == "__main__":
    #     print(get_randomid(1,1000))

    #随机字符串
    def get_randomstr(str_base,str_lenth):  
        randomstr = ""
        a = str_base
        for i in range(str_lenth):
            randomstr = randomstr + a[random.randint(0, len(a) - 1)]
        return randomstr
    # if __name__ == "__main__":
    #     print(get_randomid(1,1000))

    #随机时间
    def get_randomtime(str_base,str_lenth):  #随机时间
        a = '2022-11-02'
        b = time.strptime(str(a),"%Y-%m-%d")
        b1 = int(time.mktime(b))
        a1 = '2022-10-02'
        c = time.strptime(str(a1),"%Y-%m-%d")
        c1 = int(time.mktime(c))
        random_time = random.randint(c1,b1)
        d = time.strftime("%Y-%m-%d",time.localtime(random_time))
        return d
           
    7、强制将响应正文解码为utf-8格式
    ①response.encoding = 'utf-8'
    ②response.encoding = response.apparent_encoding 解决响应正文乱码问题
    ③响应头中的charset 和 响应正文中的charset一致的话,响应正文基本不会乱码

    8、响应正文的4中获取方式
    ①print(response.text)
    ②print(response.content.decode('utf-8'))
    ③#下载图片
    from PIL import Image  #pillow库是python图形图像处理工具
    from io import BytesIO
    response =requests.get(url="https://bkimg.cdn.bcebos.com/pic/5bafa40f4bfbfbedd055756d7af0f736afc31f97?x-bce-process=image/watermark,image_d2F0ZXIvYmFpa2U4MA==,g_7,xp_5,yp_5")
    EJZ = response.content  #获取二进制
    tupian = Image.open(BytesIO(EJZ))   #BytesIO字节流
    tupian.save("123.png")   #Image打开字节流的图片,并进行保存
    ④以原始套接字的方式获取响应正文 raw 必须加参数 stream = True
    response =requests.get(url="",stream = True)
    print( response.raw.read())

    9、响应.json()-->可直接将响应正文转换成json格式
    token = jsonpath.jsonpath(response.json(),"$.access_token")

    10、python中的正则表达式,自带的re模块
    import re

    value = re.findall("c(\d+)k",放置文件)[0]
    \d 匹配数字  \D 非数字  \s 匹配空白符  \S 匹配非空白符  [] 匹配括号中的任意一项
    [\s\S]--》相当于(.+?)的加强版,可以匹配任意字符
    (.+?)不能匹配非空字符和换行符

    11、requests如何设置请求超时       
    timeout参数,可通过元组设置两中时间
    用python的requests模拟jmeter发送请求,可以通过添加 proxies参数,调用代理服务器的参数

    12、requests重定向操作
    requests默认支持自动重定向
    allow_redirects=False用来取消自动重定向

    13、如何利用第三方库进行参数化---》pip install faker
    https://www.cnblogs.com/dream66/p/13233797.html

    14、jmeter中web的接口测试会用 cookies管理器来实现请求之间的关联,不然就是独立的请求,运行就会报错
    在requests中,通过session_obj = requests.session()生成session的对象
    然后每一个请求都用session_obj来发送,即可实现请求之间的关联

  • 回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|湖南新梦想 ( 湘ICP备18019834号-2 )

    GMT+8, 2023-2-2 19:48 , Processed in 0.039688 second(s), 19 queries .

    Powered by Discuz! X3.4 Licensed

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表