Python接口自动化-requests模块之post请求

一、源码解析

def post(url, data=None, json=None, **kwargs):
    r"""Sends a POST request.
    :param url: URL for the new :class:`Request` object.
    :param data: (optional) Dictionary, list of tuples, bytes, or file-like
        object to send in the body of the :class:`Request`.
    :param json: (optional) json data to send in the body of the :class:`Request`.
    :param \*\*kwargs: Optional arguments that ``request`` takes.
    :return: :class:`Response <Response>` object
    :rtype: requests.Response
    """
 
    return request('post', url, data=data, json=json, **kwargs)

post请求参数解析

  • url: 请求的url,必填;

  • data: 选填,请求参数;

  • json: 选填,请求参数;

  • kwargs:选填,可以传入headers、cookies等。

二、data、json区别 

小伙伴们看完可能有点懵逼,data和json有啥区别呀,什么时候传入data,什么时候传入json。

举个栗子:

data = {
    "name":"vivi"
}
print(type(data))

聪明的小伙伴立即抢答了,打印的是字典类型。

那如果想把字典转换为json字符串呢,需要引用json模块

import json
data = {
    "name":"vivi"
}
data = json.dumps(data)
print(type(data))

敲黑板:

不管json是str还是dict,如果不指定headers中的content-type,默认为application/json;

data为dict时,如果不指定content-type,默认为application/x-www-form-urlencoded,相当于普通form表单提交的形式;

data为str时,如果不指定content-type,默认为application/json。

重点来了,post请求参数到底是传data还是json,这时候我们要看请求头里的content-type类型(具体参照接口文档,没有接口文档的抓包)。

如果请求头中content-type为application/json,  为json形式,post请求使用json参数。

如果请求头中content-type为application/x-www-form-urlencoded,为表单形式,post请求时使用使用data参数。

 

三、form形式发送post请求

当前接口的请求类型为application/x-www-form-urlencoded。

# 导入requests模块
import requests
# 请求url
url = "http://127.0.0.1:8000/user/login"
# 请求参数
payload = {
    "mobilephone":"1530272****",
    "pwd":"123456"
}
# form表单形式,参数用data
res = requests.post(url, data=payload)
print(res.text)

响应结果为:

{
    "status": 1,
    "code": "10001",
    "data": null,
    "msg": "登录成功"
}
四、json形式发送post请求

当前接口的请求类型为application/json。

# 导入requests模块
import requests
# 请求的url地址
url = 'http://127.0.0.1:8000/user/login/'
# 请求头
headers = {"content-type":"application/json"}
# payload 为传入的参数
payload = {"username":"vivi","password":"123456","remember_me":"false"}
# json形式,参数用json
res = requests.post(url,json=payload,headers=headers)
print(res.text)

响应结果为:

{
  "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6InZpdmkiLCJleHAiOjE1ODY1OTUyOTEsImVtYWlsIjoidml2aUBxcS5jb20ifQ.1RGrO6hSWHi9RDXjYuqY0UCPKMmQvaybpHvYqC0dCis",
  "user_id": 1,
  "username": "vivi"
}

问题来了,如果请求类型为application/json,我偏要传入data参数呢?

import requests
payload = {"username":"vivi","password":"123456","remember_me":"false"}
header = {"content-type":"application/json"}
url = 'http://127.0.0.1:8000/user/login/'
res = requests.post(url,data=payload,headers=header)
print(res.text)

响应结果:请求错误

{"code":400,"data":[],"message":"Input error"}

请求类型为application/json,如果想用data传参,需要将字典类型数据转换为json字符串。

import requests
import json
payload = {"username":"vivi","password":"123456","remember_me":"false"}
header = {"content-type":"application/json"}
# 字典转换为json串
data = json.dumps(payload)
url = 'http://127.0.0.1:8000/user/login/'
res = requests.post(url,data=data,headers=header)
print(res.text)

总结:本文主要讲解post源码,data、json参数应用场景及实战。接口使用的本地服务,如果大家想练手,可以使用公司项目或网上项目自行实战。

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

文档获取方式:点击右边链接领取:软件测试全套资料分享      

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在进行接口测试时,使用自动化框架可以提高工作效率并减少出错的可能性。Python中的requests库可以方便地发送HTTP请求并获取响应,而pytest则是一个功能强大的测试框架,可以支持接口测试自动化。 1. requests库是Python中的HTTP客户端库,可以方便地构建和发送HTTP请求,并解析返回的响应数据。requests库的文档详细且易于理解,可以快速掌握该库的使用方法,例如发送基本的GET、POST、PUT等HTTP请求,设置请求头、请求体、cookies等,也可以进行文件上传和下载。 2. pytest是一个基于Python的测试框架,它提供了完整的测试和夹具API,并支持并行化测试和分布式测试。pytest的测试用例可以非常灵活和高效地管理和维护,可以根据需要添加更多的测试用例,而不会破坏原有的测试逻辑。 3. 接口自动化测试主要包括如下几个步骤:构建请求参数、发送HTTP请求、解析响应数据、对返回结果进行断言。使用requests和pytest库可以方便地完成以上操作,例如使用pytest的fixture、参数化和mark机制可以让测试用例更容易编写和维护,而requests则可以方便地发送HTTP请求和获取响应。 4. 使用Pythonrequests以及pytest可以轻松构建接口自动化测试框架,并集成到CI/CD流程中实现持续集成和自动化部署,从而提高软件质量、减少故障率和提高开发效率。同时,Python作为一门便于阅读的语言,使得代码易于理解和维护,也更适合于多人协作开发。 ### 回答2: Python requests pytest 接口自动化框架是一种基于 Python 语言的测试框架,主要用于对接口进行自动化测试,旨在提高测试效率,降低测试成本。该框架由 Python requests 库和 pytest 测试框架组成,可以快速、方便地进行接口测试。 Python requests 库是 Python 中的一个 HTTP 库,用于发送 HTTP 请求,处理 HTTP 响应并支持 RESTful API。该库简化了 HTTP 请求的过程,提供了易于使用的方法和参数。 而 pytest 是一个功能强大的 Python 测试框架,可以自动化执行测试用例,提供了易于编写和扩展的测试样式。与传统的测试框架相比,pytest 拥有更高的执行效率和更好的测试结果报告。 在使用该框架进行接口自动化测试时,首先需要使用 pytest 编写测试用例,然后使用 Python requests 库发送 HTTP 请求,并进行断言和验证响应结果。该框架支持多种请求方法、参数、Cookie、Headers 和响应格式等,可根据需要进行自定义。 另外,该框架还支持测试用例的参数化、Fixture 和模块化等功能,可以实现重复测试用例的复用、测试环境的配置和共享等。 总之,Python requests pytest 接口自动化框架是一种功能强大、易学易用的自动化测试工具,可以有效提高测试效率和质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值