pytest--python的一种测试框架--pycharm创建项目并进行接口请求

前言

学习request的使用,在用之前,用官方文档提供的接口:https://api.github.com/events;

ctrl+鼠标左键可以进入被调用函数源码,可以看到第一个参数URL是必须参数,params是选填,**kwargs是关键字参数。

python 复制代码
def get(url, params=None, **kwargs):
    r"""Sends a GET request.

    :param url: URL for the new :class:`Request` object.
    :param params: (optional) Dictionary, list of tuples or bytes to send
        in the query string for the :class:`Request`.
    :param \*\*kwargs: Optional arguments that ``request`` takes.
    :return: :class:`Response <Response>` object
    :rtype: requests.Response
    """

    return request("get", url, params=params, **kwargs)

输入代码,运行,报错:ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with 'OpenSSL 1.1.0h 27 Mar 2018'. See: https://github.com/urllib3/urllib3/issues/2168

原因:

因为你正在尝试使用的 urllib3 版本(2.0+)需要依赖的 OpenSSL 版本至少为 1.1.1,但是你当前的环境中 OpenSSL 的版本是 1.1.0h,比所需的版本低

解决方法:

1、更新你的 OpenSSL 版本:你可以尝试更新你的环境中的 OpenSSL 版本到 1.1.1 或者更高。但我发现,在某些系统中,你可能需要编译和安装 OpenSSL,老是报错需要进一步解决该问题带来的其他问题,所以推荐方案二。

2、降级你的 urllib3 版本:如果更新 OpenSSL 不方便,你也可以考虑降级你的 urllib3 版本到一个与你当前 OpenSSL 版本兼容的版本。你可以用以下的命令来降级 urllib3:pip install 'urllib3<2.0'

python 复制代码
import requests


r=requests.get("https://api.github.com/events")
print(r.json())#接口的返回json
print(r.status_code)#接口状态返回码
print(r.text)#接口返回的文本

运行结果:这是运行成功的

一、requests模块进行get请求带参数(两种方法)

法一:

python 复制代码
import requests
params={
    "shouji":"13456755448",
    "appkey":"e1d1e3c8fb254b33"
}
r=requests.get(url="https://api.binstd.com/shouji/query",params=params)
print(r.status_code)
print(r.json())

法二:

python 复制代码
import requests

r=requests.get(url="https://api.binstd.com/shouji/query",params={
    "shouji":"13456755448",
    "appkey":"e1d1e3c8fb254b33"
})
print(r.status_code)
print(r.json())

二、requests模块进行post请求(三种传参方式)

没有专门传参模块,需要通过kwargs关键字去传。**

法1

python 复制代码
import requests

params={
    "shouji": "13456755448",
    "appkey": "e1d1e3c8fb254b33"
}
r=requests.post(url="https://api.binstd.com/shouji/query",params=params)
print(r.status_code)
print(r.json())

法2

一般工作中post接口请求多用body里面的json去传

其实不管是params去传还是json去传,它里面的参数值其实都是一个字典。

python 复制代码
import requests

json_data={
    "title":"foo",
    "body":"bar",
    "userId":1
}

r=requests.post(url="https://api.binstd.com/shouji/query",json=json_data)
print(r.status_code)
print(r.json())

法3

python 复制代码
import requests

form_data={
    "text":"hello",
}

r=requests.post(url="https://dict.youdao.com/keyword/key",data=form_data)
print(r.status_code)
print(r.json())

三、灵魂之问

如果拿到一个接口,我想在POSTMAN里面去先进行一个调试,那么params、data、json三种方式该怎么去选?

**答:**可以手动尝试,无非就这三种方式,总能试出来的。这是一种方式,也可以去看一下背后的原理,可以去看一下一个接口的定义,该定义由后端开发去做,他在做的时候就设置好了请求方式以及接口参数传递的方式,看一下源码就好。开发会有业界的规范,比如get请求就用params去传,post请求就用data或json(一般现在大多数都用json)

相关推荐
databook16 分钟前
Manim实现闪光轨迹特效
后端·python·动效
Juchecar1 小时前
解惑:NumPy 中 ndarray.ndim 到底是什么?
python
用户8356290780512 小时前
Python 删除 Excel 工作表中的空白行列
后端·python
Json_2 小时前
使用python-fastApi框架开发一个学校宿舍管理系统-前后端分离项目
后端·python·fastapi
数据智能老司机8 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机9 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机9 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机9 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i10 小时前
drf初步梳理
python·django
每日AI新事件10 小时前
python的异步函数
python