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)

相关推荐
我是初九16 分钟前
【李沐-动手学深度学习v2】1.Colab学习环境配置
人工智能·python·学习·colab
失败又激情的man21 分钟前
python爬虫之数据存储
前端·数据库·python
一刀到底21129 分钟前
Python 高级应用10:在python 大型项目中 FastAPI 和 Django 的相互配合
python·django·fastapi
MoRanzhi120334 分钟前
245. 2019年蓝桥杯国赛 - 数正方形(困难)- 递推
python·算法·蓝桥杯·国赛·递推·2019
Vertira42 分钟前
如何在 PyTorch 中自定义卷积核参数(亲测,已解决)
人工智能·pytorch·python
幼稚园的山代王2 小时前
python3基础语法梳理(一)
开发语言·python
Gyoku Mint2 小时前
机器学习×第五卷:线性回归入门——她不再模仿,而开始试着理解你
人工智能·python·算法·机器学习·pycharm·回归·线性回归
Blossom.1182 小时前
基于机器学习的智能故障预测系统:构建与优化
人工智能·python·深度学习·神经网络·机器学习·分类·tensorflow
华科云商xiao徐2 小时前
Python多线程数据爬取程序模版
爬虫·python