• Python 接口自动化


    1.前言

    Python内置的urllib模块,也可以用于访问网络资源。但是,它用起来比较麻烦,而且,缺少很多实用的高级功能。因此我们使用 requests 模块进行进行接口测试。
    requests官方文档资料地址:http://cn.python-requests.org/zh_CN/latest/



    2.环境安装

    cmd(win+R快捷键)输入:

    pip install requests -i https://pypi.douban.com/simple
    

    提示以下信息表示安装成功。



    3.requests发送请求

    3.1 get请求无参数param

    1. 将安装好的requests模块导入后,通过GET访问一个URL地址的网页页面,如:http://www.cnblogs.com/wwho

    2. 这里的 r 也就是 response,请求后的返回值,可以调用 response 里的 status_code 方法查看状态码

    3. 状态码 200 只能说明接口请求发送成功了,并不能说明功能一定是 OK 的,一般要查看响应的内容,r.text 是返回文本信息


    # -*- coding:utf-8 -*-
    
    # 导入 requests 模块
    import requests
    # 定义 url
    url = 'http://www.cnblogs.com/wwho'
    # 请求博客园
    r = requests.get(url=url)
    # 打印状态码
    print(r.status_code)
    # 打印文本
    print(r.text)
    


    3.2 get请求有参数param

    url地址为:http://apis.juhe.cn/simpleWeather/query?city=深圳&key=xxx
    参数:city=深圳&key=xxx

    可以以字典的形式传参:
    {"city": "深圳", "key": "xxx"}


    多个参数格式:

    {"key1": "value1", "key2": "value2", "key3": "value3"}
    

    (r.url获取当前url地址,可以检查是否传参成功)


    代码:

    # -*- coding:utf-8 -*-
    
    # 导入 requests 模块
    import requests
    
    # 定义 url
    url = 'http://apis.juhe.cn/simpleWeather/query'
    par = {"city": "深圳",
           "key": "4611a7abae4afe573fd7ca751d9d423a"}
    
    result = requests.get(url=url, params=par)
    # 打印文本
    print(result.text)
    


    3.3定制请求头

    一个完整的get请求,应该包括请求行(url) 和请求头(headers)、请求参数(params),
    什么时候要加请求头呢,如果你不确定的话最好加上去。

    3.4 response返回信息

    response返回信息

    -- r.status_code   # 响应状态码
    
    -- r.content   # 字节方式的响应体,会自动为你解码 gzip 和deflate 压缩
    
    -- r.headers  # 以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回 None
    
    -- r.json()  # Requests 中内置的 JSON 解码器,requests的方便之处还在于,对于特定类型的响应,例如JSON,可以直接获取
    
    -- r.url  # 获取 url
    
    -- r.encoding  # 编码格式,requests自动检测编码
    
    -- r.cookies  # 获取 cookie
    
    -- r.raw  # 返回原始响应体-- r.text #字符串方式的响应体,会自动根据响应头部的字符编码进行解码
    
    -- r.raise_for_status()  # 失败请求(非 200 响应)抛出异常
    

    以上就是requests模块主要的返回格式。



    3.5 post请求

    讲post请求之前 先讲一下 requests.session()
    requests.session() 获取 requests的session对象,简单来说就相当于一个微型浏览器,能自动保持登录态。所以一般对于 cookie – session 保持登录态的系统就可以使用
    requests.session()

    使用方法:后续的请求都使用session即可


    Post请求首先要注意的就是body的数据类型
    常见的有四种类型,但是不止四种:

    1. 第一种:application/json: {“key1“:”value1”,“keyt2":“value2"}

    2. 第二种:application/x-www-form-urlencoded:name1= value1&name2=value2

    3. 第三种:multipart/form-data:这一种是表单格式的
      (文件上传,图片上传等混合式)

    4. 第四种:text/xml

    examples.getStateName

    Body为x-www-form-urlencoded类型

    怎么知道body是什么类型?

    1. 接口文档有说明
    2. 自己抓包看

    直接通过抓包就可以看出post请求的数据类型,如下图就是x-www-form-urlencoded类型

    传data参数就行(无需转json)

    代码:

    # -*- coding:utf-8 -*-
    # @File:sms.py
    import requests
    host = 'http://127.0.0.1:8002'
    session = requests.session()  # 相当于微型浏览器,保持登录态
    url = host + '/api/mgr/signin'  # 定义url
    body = {
        "username": "byhy",
        "password": "88888888"
    }
    resp = session.post(url=url, data=body)
    
    status_code=resp.status_code  #获取响应状态码
    print('响应状态码:{}'.format(status_code))
    
    text=resp.text  # 获取响应内容,结果类型是字符串
    print('响应内容:{}'.format(text))
    
    json=resp.json()  # 获取响应内容,结果是字典类型
    print('响应内容:{}'.format(json))
    
    resp_headers=resp.headers  # 获取响应headers
    print('响应header:{}'.format(resp_headers))
    

    Body为json类型

    json=body: 这个表示自动将python里面的字典,转化为json格式参数了。关于字典和json的种种关系,后面专门写篇文章讲一下。

    代码:

    # -*- coding:utf-8 -*-
    import requests
    host = 'http://127.0.0.1:8002'
    session = requests.session()  # 相当于微型浏览器,保持登录态
    url = host + '/api/mgr/signin'  # 定义登录的 url
    body = {
        "username": "byhy",
        "password": "88888888"
    }
    
    resp = session.post(url=url, data=body)  # 发送登录请求
    
    url_add_customer = host + '/api/mgr/customers'  # 新建客户的 url
    body = {
        "action":"add_customer",
        "data":{
            "name":"tester",
            "phonenumber":"13345679934",
            "address":"深圳市南山区"
        }
    }
    resp = session.post(url=url_add_customer, json=body)
    print(resp.text)  # 打印响应文本
    


    3.6 put请求

    put 请求的接口做法跟 post请求的差不多的,只是把post 请求改为 put请求。一样要看请求的格式。如果是 json 格式,也是用json接,Form格式用data接。

    代码:

    # -*- coding:utf-8 -*-
    # @Time:2021/4/16 9:54
    # @File:sms.py
    import requests
    host = 'http://127.0.0.1:8002'
    session = requests.session()  # 相当于微型浏览器,保持登录态
    url = host + '/api/mgr/signin'  # 定义登录的 url
    body = {
        "username": "byhy",
        "password": "88888888"
    }
    resp = session.post(url=url, data=body)
    
    url_modify_customer = host + '/api/mgr/customers'  # 修改客户的 url
    body = {
        "action":"modify_customer",
        "id": 52,
        "newdata":{
            "name":"深圳市桥北医院",
            "phonenumber":"13345678888",
            "address":"深圳市中医院"
        }
    }
    resp = session.put(url=url_modify_customer, json=body)
    print(resp.text)  # 打印修改客户接口响应的文本
    


    3.7 delete请求

    delete 请求的接口做法跟 post请求的差不多的,只是把post 请求改为 delete请求。一样要看请求的格式。如果是 json 格式,也是用json接,Form格式用data接。

    代码:

    # -*- coding:utf-8 -*-
    # @Time:2021/4/16 9:54
    # @File:sms.py
    import requests
    host = 'http://127.0.0.1:8002'
    session = requests.session()  # 相当于微型浏览器,保持登录态
    url = host + '/api/mgr/signin'  # 定义登录的 url
    body = {
        "username": "byhy",
        "password": "88888888"
    }
    resp = session.post(url=url, data=body)
    
    url_delete_customer = host + '/api/mgr/customers'  # 删除客户的 url
    body = {
        "action":"del_customer",
        "id": 52
    }
    resp = session.delete(url=url_delete_customer, json=body)
    print(resp.text)  # 打印删除客户接口响应的文本
    

    总结:

    requests库的请求方法里参数众多,所以简单总结一下:

    1. get请求带参数就用params=params

    2. post请求是form格式就用data=data

    3. post请求是json类型参数就用json=json

    4. 请求头信息header就用headers=headers

  • 相关阅读:
    【微信小程序】 自定义组件
    vue3中的组件通讯
    vue3如何使用watch监听
    windows server 2008中iis7中的php5.3出现 Server 内部错误500的解决
    在计算里面计算为什么要采用补码
    计算机里二进制与十进制互相转到到底是怎么完成的
    矩的概念、意义以及在SLAM中的应用
    VC++6.0 使用jsoncpp静态库解析json数据(亲测绝对可用)
    python等待用户输入并超时退出
    使用WTV工具箱检测有效电视源
  • 原文地址:https://www.cnblogs.com/wwho/p/14667762.html
Copyright © 2020-2023  润新知