python之接口自动化测试

python之接口自动化测试

  • 1、接口自动化测试
    • 1.1 概念
  • 2、requests库
  • 3、安装requests
  • 4、GET请求
  • 5、post请求
  • 6、post请求和get请求的区别
  • 7、请求头和请求体
  • 8、处理响应
  • 8、处理响应内容
  • 9、session实现会话管理

1、接口自动化测试

1.1 概念

接口测试:是对系统或组件之间的接口进行测试,主要是校验数据的交换、传递和控制管理过程,以及相互逻辑依赖关系。

自动化测试:是把人为驱动的测试行为转化为机器执行的一种过程。

接口自动化测试:是让程序或工具替代人工自动的完成对接口进行测试的一种过程。

2、requests库

requests库是用python编写的,基于urllib,采用apache2 licensed开源协议的的第三方库,专为http通信而设计,旨在使网络请求更加简单和人性化。

相比urllib库,requests库更加方便,可以节约我们大量的工作,完全满足http测试需求。

特点:

  • 简单易用:requests提供了简洁明了的API,使得发送http请求变得非常直观。与python的标准库urllib相比,requests的语法更加简洁,易于学习和使用。

  • 功能全面:requests支持http中所有的主要方法,如:get、post、put、delete等。支持设置请求头、请求体、超时时间、代理等。requests支持会话保持、文件上传、自动内容解码、和json解析等功能。

  • 自动化处理:requests库内部处理了许多底层细节,如连接池管理、keep- alive连接、URL编码等,使得开发者可以专注于业务逻辑无需关系底层的http通信细节。

  • 良好的文档和社区支持:requests拥有详尽的官方文档和活跃的社区,这意味着开发者可以轻松地找到问题的答案或获得帮助。

  • 兼容性:requests库在python2和python3中都可以使用,也与许多其他python库和框架兼容。

  • 安全:requests在处理https请求时,提供了ssl验证和证书管理功能,确保通信的安全性。

3、安装requests

pip install requests
属性名 描述
method HTTP方法,如get/post/put/delete/patch等
url 请求的目标url
params 附加到url查询参数(querystring)字典,用于构建url的查询字符串
headers 请求头字典,包含user-agent、Accept、content-type等键值对
auth 指定鉴权方式
cookies 请求携带的cookie字典
data 请求体数据,可以是字典、字符串(通常用于表单数据)
json 请求体数据,可以是字节串、字符串(通常用于json对象)
files 表单上传文件
proxies proxies使用代理抓包

以上表格总结了requests库的主要特性及其描述,基于文章内容中的特点部分生成。

4、GET请求

import requests

def get_data():
    response = requests.get("http://XXX.XXX")
    print(response.text)

请求方法返回值response是Response对象,我们可以从这个对象中获取想要的响应信息,其中常见的属性包括:

属性名 说明 备注
status_code HTTP响应状态码 如200、404、500等
reason 状态描述 字符串
headers 响应头 字典包含如content-type、set-cookie、server等键值对
cookies 服务器端响应的cookies 字典、可以传输
content 二进制响应内容
text 文本响应正文
json() 将json响应正文转成dict 是方法不是属性,如果详细内容是json格式,可以直接调用此属性解析为python对象
url 产生响应的url 实际请求的url(可能经过重定向)
history 如果有重定向发生,包含一个响应历史列表
elapsed 请求耗时 大概值,不精确
encoding 编码方式 可修改
request 生成响应的request request实例对象
ok 请求是否成功,status_code小于400为真 布尔值

requests.get()方法发送get请求,并获取响应对象。我们要检查响应的状态码以及确保请求成功,并输出请求的URL、状态码和响应内容。如果服务器返回的是json数据,我们还尝试解析json并打印出来。

5、post请求

import requests

def get_data():
    data = {"name":"123", password:"123456"}
    response = requests.post("http://XXX.XXX", data=data)
    print(response.text)

上面发送一个post请求,并提交用户名和密码,服务器接收到数据后,会进行处理,并返回相应的响应。

6、post请求和get请求的区别

get请求和post请求主要区别在于数据的传输方式和安全性:

  • get请求:通过url参数传递数据,数据以明文形式出现在url中,因此不适合传输敏感信息。get请求通常用于获取资源,比如网页、图片等。
  • post请求:通过请求体传递数据,数据以密文形式传输,因此更加安全,适合传递敏感信息,post请求通常向服务器提交数据,比如用户登录、提交表单等。

总结:get请求适合用于获取资源,而post请求适合用于提交数据。

请求方法 功能和语义 参数位置 缓存 幂等性 安全性
get 从服务器获取指定资源 通常放在url查询字符串中 响应通常被缓存 是幂等的 相对安全,不改变服务器状态
put 更新或替换服务器上的现有资源 通常放在请求正文中,包含完整的资源表示 响应通常不应被缓存 幂等的 相对安全,仅用于更新资源。恶意或错误请求可能导致数据被覆盖
post 向服务器提交数据,用于创建新资源或执行操作 通常放在请求正文中,包含完整的资源表示或操作指令及数据 响应通常不应被缓存 不一定是幂等的,取决于具体操作 可能引发副作用,不仅用于创建资源,也可能执行非幂等操作
delete 请求服务器删除指定资源 通常放在url路径中 响应通常不应被缓存 幂等的 具有潜在破坏性,应确保只有授权用户能执行
patch 局部更新资源 通常放在请求正文中,描述资源需要更改的部分 响应通常不应被缓存 幂等的 可能引发副作用,应确保只有授权用户能执行,并且请求体正确描述了期望的更改

7、请求头和请求体

发送HTTP请求时,除了URL以为,还可以设置请求头和请求体。请求头用于传递一些额外的信息给服务器,比如用户代理、授权信息等。请求体则用于向服务器提交数据,比如表单数据、json数据等。

  • 设置请求头
import requests

def get_data():
    headers = {"user-Agent":"XXX", content-type:"XXX"}
    response = requests.get("http://XXX.XXX", headers=headers)
    print(response.text)

上面设置了常见的两个常见的请求头,一般根据需求设置:

user-Agent:用于指定用户代理
content-type:指定内容类型编码,互联网媒体类型叫MIME类型。是http请求头和响应中的字段。
作为请求头时:告诉服务端发送的数据类型,以及响应时返回的数据类型
* application/x-www-form-urlencoded:用于表单形式提交,一般是post请求
* multipart/form-data:多媒体类型,用来传输文件,图片等
* application/json:使用json格式传入文件,是前后端传输数据常用的一种方式
  • 设置请求体
    当发送post请求时候,需要通过data参数来设置请求体,传递要提交的数据。

  • 设置请求头和请求体的作用
    – 请求头:请求头包含了一些附加的信息,用于告诉服务器关于请求的一些额外信息,比如客户端类型,接受的数据类型等。可以用于实现用户代理识别、身份验证、设置cookie等功能。
    – 请求体:请求体用于向服务器提交数据,比如表单数据,json数据等,通常用于向服务器发送要处理的数据,比如用户登录信息,搜索关键字等。

请求头和请求体都是http请求的重要组成部分,可以通过设置他们来实现各种功能和需求。

8、处理响应

处理HTTP响应是使用requests库的关键部分之一。在发送HTTP请求后,服务器将返回一个响应,其中包含了状态码、响应头、响应体等信息。
(1)获取状态码
状态码是服务器对请求的响应的一个数字编码,用于指示请求的城轨或失败以及失败的原因。通过status_code属性来获取

(2)获取响应头
响应头包含了一些关于响应的元信息,比如服务器类型、内容类型、内容长度等。可以通过headers属性来获取响应头。

(3)获取响应体
响应体包含了服务器返回的数据数据内容,可以通过text属性来获取响应体的文本内容,或者使用content属性获取二进制内容。

8、处理响应内容

在处理requests库时,我们经常需要处理不同类型的响应内容,包括json、文本和二进制等。

import requests

def get_data():
    headers = {"user-Agent":"XXX", content-type:"XXX"}
    response = requests.get("http://XXX.XXX", headers=headers)
    # 获取二进制响应内容
    binary_data = response.content
    # 将二进制内容写入文件
    with open('image.jpg', 'wb') as f:
        f.write(binary_data)

9、session实现会话管理

requests.Session()是创建一个会话对象(session),以便在一些列请求之间保持某些状态,如请求头、公共参数、cookies、认证信息、连接池等。
其主要属性和方法包括:

属性名 说明 备注
params 附加到url参数(querystring)
headers 自定义请求头(token))
auth 指定鉴权方式
cookies 添加cookies 会话级的cookiejar对象,存储了所有通过此session发送请求时接受到的cookies
get()/post()等方法 用于发送HTTP请求 与直接使用request.get()等函数相比,会利用会话级的状态
import requests

# 创建一个Session对象
session = requests.Session()

# 设置全局请求头(用于所有通过此session发出的请求)
session.headers.update({
    'User-Agent': 'XXX',
    'X-Api-Key': 'XXX'
})

# 设置共享公共参数
session.params = {
    'params1': 'XXX',
    'params2': 'XXX'
}

# 使用session对象发送请求
response = session.get("http://www.XXX.com")

...

你可能感兴趣的:(python,开发语言)