python+requests实现接口测试 - get与post请求使用( params

2024-09-06 05:32

本文主要是介绍python+requests实现接口测试 - get与post请求使用( params,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原 http://www.mamicode.com/info-detail-1755093.html




简介:Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库。它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求。Requests 的哲学是以 PEP 20 的习语为中心开发的,所以它比 urllib 更加 Pythoner。更重要的一点是它支持 Python3 哦!

 

一、安装

使pip安装:

pip install requests

安装完后,运行一个简单的例子查看是否安装成功:

import requests                                 #导入requests包
r=requests.get(url=‘https://www.baidu.com/‘)    
print(r.status_code)                            #查看请求返回的状态
#结果
200

  

 

二、几种请求类型

  ①get请求:requests.get(‘url‘) 

  ②post请求:requests.post("url/post")

  ③put请求:requests.put("url/put")

  ④delete请求:requests.delete("url/delete")

  ⑤head请求:requests.head("url/get")

  ⑥options请求:requests.options("url/get")

 

三、get请求

传递url参数

在get请求中,允许使用params关键字,以一个字典来传递这些参数,例如:

content={‘pageIndex‘:1,‘pageSize‘:10,‘categoryId‘:9}   
r=requests.get(‘http://www.xxxxx.com/api/v2/activities‘,params=content)
print (r.url)                       #获取请求内容
print (r.text)                      #获取响应内容
#结果
http://www.xxxx.com/api/v2/activities?pageIndex=1&pageSize=10&categoryId=9
{"data":[],"pageIndex":1,"totalNum":0,"hasMore":false,"pageSize":0}

 

如果字典中存在None的值,是不会添加到url请求中的

content={‘pageIndex‘:1,‘pageSize‘:10,‘categoryId‘:None}   
r=requests.get(‘http://www.xxxxx.com/api/v2/activities‘,params=content)
print (r.url)                      #结果
http://www.xxxx.com/api/v2/activities?pageIndex=1&pageSize=10

  

 

ps:不使用params的话,也可在请求中输入全部的地址,效果相同,如:

r=requests.get(‘http://m.xxxxx.com/api/v2/activities?pageIndex=1&pageSize=10&categoryId=9‘)

 

注意:在某些get请求中,需要辨别用户身份,因此会需要在请求中发送cookie内容,如某些需要用户登录才能访问的页面,在接下来的文章中会进行讲解 

 

四、post请求

1.以表单形式传递参数:

想要发送一些表单形式的数据,只需简单的传递一个字典给data关键字,在发送请求的时候,会自动编码为表单的形式,例如:

content={‘key1‘:‘value1‘,‘key2‘:‘value2‘}
r=requests.post(‘http://www.xxx/api/v1/user/login‘,data=content)

 

2.以json形式传递参数:

在很多情况下,想要发送的数据并非为表单形式,而是一个json格式的字符串,如果传递给data关键字的内容不是一个dict,而是

一个string,那么在发送的时候,数据会被直接发送出去,不会自动编码为表单形式

为了将一个数据结构转换为json格式的字符串,首先得需要导入一个json包,两种常用的方法为:json.dumps()json.loads()

 

import json
content={‘name‘:‘Nee‘,‘age‘:‘18‘}
str_content=json.dumps(content)      #把dick编码为json格式的字符串
print (str_content)
print (type(str_content))
#结果:
{"name": "Nee", "age": "18"}
<class ‘str‘>                        #此时的类型为strcontent=json.loads(str_content)      #把json格式的字符串解码为原先的数据结构
print (content)
print (type(content))
#结果
{‘name‘: ‘Nee‘, ‘age‘: ‘18‘}
<class ‘dict‘>

 

注意:1.json编码支持的基本类型有:None, bool, int, float, string, list, tuple, dict。对于字典,json会假设key是字符串(字典中的任何非字符串key都会在编            码时转换为字符串),要符合JSON规范,应该只对python列表和字典进行编码。此外,在WEB应用中,把最顶层对象定义为字典是一种标准做法。                    2.json编码的格式几乎和python语法一致,略有不同的是:True会被映射为true,False会被映射为false,None会被映射为null,元组()会被映射为列表[],如:

content={‘a‘:None,‘b‘:True,‘c‘:False,‘d‘:(1,2)}
str_content=json.dumps(content)
print (str_content)#结果:
{"a": null, "b": true, "c": false, "d": [1, 2]}

 

因此 想要在post请求中使用data关键字来传递json格式的字符窜,首先得把dict转为string,例如:

import requests
import json
url=‘http://www.xxx.com/api/v1/user/login‘
data={"ua":"13700002000","pw":"12qwaszx","ct":12}
r=requests.post(url,data=json.dumps(data))         #在一些post请求中,还需要用到headers部分,此处未加,在下文中会说到   
print (r.text)#结果
{"newUser":false,"user":{"userId":531,"mobileNo":"13700002000","userName":"测试用户2000".......}

除了可以对dick编码后以string的方式传递参数外,还可以直接使用json关键字直接传递,在传递时会自行进行编码为string类型

import requests            #不需要导入json模块
url=‘http://xxxx/api/v1/user/login‘
data={"ua":"13700002000","pw":"12qwaszx","ct":12}
r=requests.post(url,json=data)

 

在post请求中用到的head部分和cookie部分。在之后的文章中会进行讲解

 

五、响应

1.响应状态

在请求发送成功后,可以用status_code来查看相应状态(每个状态代表的具体意义不在此文介绍)

import requests
r=requests.get(url)
print(r.status_code)-----结果-----
200

 

2.响应内容

在上面的内容中,已经展示了用text来获取相应的内容,返回的内容为string

import requests
r=requests.get(url)
print (r.text)
print (type(r.text))       #查看返回内容的类型-----结果-----
..........                 #返回的具体内容
<class ‘str‘>              #类型为string 

 

除此之外,requests中也带有带有一个内置的json解码器,将返回的内容转换为dict

import requests
r.requests.get(url)
print (r.json())
print (type(r.json()))-----结果-----
......
<class ‘dict‘>

那么通过json解码器转为dict后,想要查看到返回内容中某个具体参数的值,就比较方便啦!

 

3.响应内容编码格式

在获取响应内容的时候,可以使用r.encoding来查看相应内容的编码格式

import requests
r=requests.get(url)
print(r.encoding)-----结果-----
UTF-8

 

也可以进行指定编码,当改变了编码方式是后,每次获取响应内容,都会使用新的编码方式

import requests
r=requests.get(url)
r.encoding=‘ISO-8859-1‘
print(r.text)

 

4.响应头内容

import requests
r=requests.get(url)
print (r.headers)

 

5.cookies

import requests
r=requests.get(url)
print (r.cookies)


python+reque

这篇关于python+requests实现接口测试 - get与post请求使用( params的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1141138

相关文章

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

redis中使用lua脚本的原理与基本使用详解

《redis中使用lua脚本的原理与基本使用详解》在Redis中使用Lua脚本可以实现原子性操作、减少网络开销以及提高执行效率,下面小编就来和大家详细介绍一下在redis中使用lua脚本的原理... 目录Redis 执行 Lua 脚本的原理基本使用方法使用EVAL命令执行 Lua 脚本使用EVALSHA命令

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句

利用Python打造一个Excel记账模板

《利用Python打造一个Excel记账模板》这篇文章主要为大家详细介绍了如何使用Python打造一个超实用的Excel记账模板,可以帮助大家高效管理财务,迈向财富自由之路,感兴趣的小伙伴快跟随小编一... 目录设置预算百分比超支标红预警记账模板功能介绍基础记账预算管理可视化分析摸鱼时间理财法碎片时间利用财

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B

Python中的Walrus运算符分析示例详解

《Python中的Walrus运算符分析示例详解》Python中的Walrus运算符(:=)是Python3.8引入的一个新特性,允许在表达式中同时赋值和返回值,它的核心作用是减少重复计算,提升代码简... 目录1. 在循环中避免重复计算2. 在条件判断中同时赋值变量3. 在列表推导式或字典推导式中简化逻辑

python处理带有时区的日期和时间数据

《python处理带有时区的日期和时间数据》这篇文章主要为大家详细介绍了如何在Python中使用pytz库处理时区信息,包括获取当前UTC时间,转换为特定时区等,有需要的小伙伴可以参考一下... 目录时区基本信息python datetime使用timezonepandas处理时区数据知识延展时区基本信息

Python位移操作和位运算的实现示例

《Python位移操作和位运算的实现示例》本文主要介绍了Python位移操作和位运算的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 位移操作1.1 左移操作 (<<)1.2 右移操作 (>>)注意事项:2. 位运算2.1

如何在 Spring Boot 中实现 FreeMarker 模板

《如何在SpringBoot中实现FreeMarker模板》FreeMarker是一种功能强大、轻量级的模板引擎,用于在Java应用中生成动态文本输出(如HTML、XML、邮件内容等),本文... 目录什么是 FreeMarker 模板?在 Spring Boot 中实现 FreeMarker 模板1. 环