python自动化接口测试

server/2024/9/24 18:35:47/

前言

前情阅读,关于自动化接口测试的基础知识介绍,可以阅读如下文章。我的博文只是一个小白学习的笔记,抄了很多大佬的博文,但是最终都在参考文献中进行了说明,对此表示感谢。

python接口自动化(一)--什么是接口、接口优势、类型(详解) - 北京-宏哥 - 博客园

python接口自动化(二)--什么是接口测试、为什么要做接口测试(详解) - 北京-宏哥 - 博客园

python接口自动化(三)--如何设计接口测试用例(详解) - 北京-宏哥 - 博客园

python接口自动化(四)--接口测试工具介绍(详解) - 北京-宏哥 - 博客园

python接口自动化(五)--接口测试用例和接口测试报告模板(详解) - 北京-宏哥 - 博客园

python接口自动化(六)--发送get请求接口(详解) - 北京-宏哥 - 博客园

一、request的基础使用

 如果想用python做接口测试,我们首先有不得不了解和学习的模块。它就是第三方模块:Requests。 虽然Python内置的urllib模块,用于访问网络资源。但是,它用起来比较麻烦,而且,缺少很多实用的高级功能。更好的方案是使用requests。它是一个Python第三方库,处理URL资源特别方便。查看其中文官网:http://cn.python-requests.org/zh_CN/latest/index.html 英文官网:http://www.python-requests.org/en/master/     可以看一下它的很多实用的高级功能。

Requests 完全满足今日 web 的需求。

  • Keep-Alive & 连接池
  • 国际化域名和 URL
  • 带持久 Cookie 的会话
  • 浏览器式的 SSL 认证
  • 自动内容解码
  • 基本/摘要式的身份认证
  • 优雅的 key/value Cookie
  • 自动解压
  • Unicode 响应体
  • HTTP(S) 代理支持
  • 文件分块上传
  • 流下载
  • 连接超时
  • 分块请求

1.1 Get请求的使用

1、将安装好的requests模块导入后,通过GET访问一个URL地址的网页页面,如:https://www/douban.com

2、这里的 r 也就是 response,请求后的返回值,可以调用 response 里的 status_code 方法查看状态码

3、状态码 200 只能说明这个接口访问的服务器地址是对的,并不能说明功能 OK,一般要查看响应的内容,r.text 是返回文本信息。具体的使用如下所示

'''
1、导入包
2、发送get的请求
3、打印结果
'''
import requests
r=requests.get("http://www.baidu.com")
# 响应的状态
print(r.status_code)
# 字节方式的响应体,会自动为你解码gzip和deflate压缩
print(r.content)
# 以字典对象存储服务器响应头,若键不存在则返回None
print(r.headers)
# Requests中内置的JSON
# print(r.json())
# 获取url
print(r.url)
# 编码格式
print(r.encoding)
# 获取cookie
print(r.cookies)
# 返回原始响应体
print(r.raw)
# 字符串方式的响应体,会自动根据响应头部的字符编码进行
print(r.text)
# 失败请求(非200响应)抛出异常
print(r.raise_for_status())

 请求响应状态码说明如下链接所示:python接口自动化(七)--状态码详解对照表(详解) - 北京-宏哥 - 博客园

使用fastapi作为后端,实现接口get测试用例,代码如下所示:

@router.get("/passport/user/loginget")
def passport_user_login_get(username:str,password:str):if username == "admin" and password == "admin":print("当前进入到passport_user_login_get函数中,用户名和密码正确")return {"status": 200, "msg": "登录成功"}else:print("当前进入到passport_user_login_get函数中,用户名和密码错误")raise HTTPException(status_code=401, detail="用户名或密码错误")

 写一个接口测试的代码

import requests
url = 'http://127.0.0.1:8080/passport/user/loginget'
param={'username':'admin','password':'admin'
}
'''通过requests库发送get请求'''
response = requests.get(url=url,params=param,verify=False)
print(response.json())
print(response.text)
verify=False 参数用于禁用 SSL 证书验证。默认情况下,requests 会验证服务器的 SSL 证书。如果服务器使用的是自签名证书或者没有设置 SSL 证书,你可以通过设置 verify=False 来忽略验证。如果你访问的是 HTTPS URL,而本地环境没有配置 SSL,则可能会抛出 SSL 错误,通过设置 verify=False 可以避免这个问题。

1.2Post的请求使用

同1.1所示,代码如下所示:

后端代码

class UserLogin(BaseModel):username: strpassword: str
@router.post("/passport/user/loginpost")
def passport_user_login_post(userlogin: UserLogin):if userlogin.username == "admin" and userlogin.password == "admin":print("当前进入到passport_user_login_post函数中,用户名和密码正确")return {"status": 200, "msg": "登录成功"}else:print("当前进入到passport_user_login_post函数中,用户名和密码错误")raise HTTPException(status_code=401, detail="用户名或密码错误")

 接口脚本进行访问

import requests
url = 'http://127.0.0.1:8080/passport/user/loginpost'
param={'username':'admin','password':'admin'
}
'''通过requests库发送post请求'''
response = requests.post(url=url,json=param,verify=False)
print(response.json())
print(response.text)

 请求状态返回信息分析,代码如下

import json
import requests
url = 'http://127.0.0.1:8080/passport/user/loginpost'
param={'username':'admin','password':'admin'
}
'''通过requests库发送post请求'''
res = requests.post(url=url,json=param,verify=False)
print('请求url: ' + res.url)
print('响应内容 json格式: ' + json.dumps(res.json()))
print('响应内容 字符串格式: ' + res.text)
print('响应内容 二进制格式: ' + str(res.content))
print('响应码: ' + str(res.status_code))

 

二、post请求四种传送正文的方式

  • application/x-www-form-urlencoded: 用于表单数据提交,适合简单键值对。
  • multipart/form-data: 用于文件上传,适合多部分内容。
  • application/json: 用于发送结构化的 JSON 数据,适合 API 和复杂数据。
  • text/plain: 用于发送纯文本,适合简单的文本数据。

2.1文件上传

后端代码

@router.post("/passport/upload")
async def passport_upload_file(file: UploadFile = File(...)):# 创建保存上传文件的目录UPLOAD_DIR = "uploaded_files"if not os.path.exists(UPLOAD_DIR):os.makedirs(UPLOAD_DIR)print("当前进入到passport_upload_file函数中,上传文件成功")# 构建保存文件的路径file_location = os.path.join(UPLOAD_DIR, file.filename)# 将文件保存到服务器with open(file_location, "wb") as buffer:shutil.copyfileobj(file.file, buffer)contents = await file.read()buffer.close()return {"filename": file.filename,"content_size": len(contents),"content_type": file.content_type}

前端代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>用户上传文件</title>
</head>
<body>
<form action="http://127.0.0.1:8080/passport/upload" method="POST" enctype="multipart/form-data"><input type="file" name="file"><button type="submit">Upload</button>
</form>
</body>
</html>

接口测试的实现

import requests
headers = {"Content-Type": "multipart/form-data"}
url = "http://127.0.0.1:8080/passport/upload"
files = {'file': open('example.txt', 'rb')}  # 打开要上传的文件
response = requests.post(url, files=files)  # 使用 `files` 参数上传文件
print(response.json())

 2.2 表单请求测试

后端代码

@router.post("/passport/user/loginpost_form")
async def passport_user_login_post_form(username: str = Form(...), password: str = Form(...)):if username == "admin" and password == "admin":print("当前进入到passport_user_login_post_form函数中,用户名和密码正确")return {"status": 200, "msg": "登录成功"}else:print("当前进入到passport_user_login_post_form函数中,用户名和密码错误")raise HTTPException(status_code=401, detail="用户名或密码错误")

前端代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<!--表单直接这样访问get的形式-->
<form action="http://127.0.0.1:8080/passport/user/loginget" method="get"><input type="text" name="username" value="admin"><input type="password" name="password" value="admin"><button type="submit">Login</button>
</form>
<form action="http://127.0.0.1:8080/passport/user/loginpost_form" method="post"><input type="text" name="username" value="admin"><input type="password" name="password" value="admin"><button type="submit">Login</button>
</form>
</body>
</html>

展示效果

 

参考文献

python接口自动化(六)--发送get请求接口(详解) - 北京-宏哥 - 博客园

python接口自动化(七)--状态码详解对照表(详解) - 北京-宏哥 - 博客园

python接口自动化(八)--发送post请求的接口(详解) - 北京-宏哥 - 博客园

python接口自动化(九)--python中字典和json的区别(详解) - 北京-宏哥 - 博客园

python接口自动化测试 - requests库的基础使用 - 小菠萝测试笔记 - 博客园

python接口自动化(十)--post请求四种传送正文方式(详解) - 北京-宏哥 - 博客园

python接口自动化(十二)--https请求(SSL)(详解) - 北京-宏哥 - 博客园

python接口自动化测试 - requests库的post请求进行文件上传 - 小菠萝测试笔记 - 博客园


http://www.ppmy.cn/server/121454.html

相关文章

论文阅读 - MDFEND: Multi-domain Fake News Detection

https://arxiv.org/pdf/2201.00987 目录 ABSTRACT INTRODUCTION 2 RELATED WORK 3 WEIBO21: A NEW DATASET FOR MFND 3.1 Data Collection 3.2 Domain Annotation 4 MDFEND: MULTI-DOMAIN FAKE NEWS DETECTION MODEL 4.1 Representation Extraction 4.2 Domain Gate 4.…

等保一体机:打造全方位网络安全防护

在数字化时代&#xff0c;网络安全已成为企业和个人不可忽视的重要课题。随着网络攻击手段的不断升级&#xff0c;传统的安全防护措施已难以应对复杂多变的安全威胁。为此&#xff0c;等保一体机应运而生&#xff0c;成为全方位网络安全防护的理想解决方案。 什么是等保一体机…

TR CU 004/2011《低压设备安全技术法规》认证解读篇下

一、低压设备认证 当产品符合海关联盟的技术法规时&#xff0c;低压设备认证是为产品的市场流通而发行的&#xff0c;其效力在通过合规确认的条件下扩展到该产品。清单上的低压设备须以认证形式确认符合性。清单中未包括的低压设备应以符合性声明的形式进行符合性确认。 低压…

css文本修饰

一、文本修饰 属性描述使用color设置字体颜色color: #ff1237text-align设置文本水平对齐text-align: center 水平居中text-align: right 右对齐text-align: justify两端对齐vertical-align设置本文垂直对齐vertical-align: top 按当前行最高元素顶部对齐vertical-align: middl…

Flask 设置session 自定义登录验证

"""1. 设置session# 设置session成功 重定向到首页session.permanent True # 设置会话过期时间session[info] usernamereturn redirect(url_for(index))2. 获取sessioninfo session.get(info, default0)return render_template(index.html, infoinfo)3. 设置…

mysql性能优化- 数据库配置优化

MySQL 性能优化 - 数据库配置优化 MySQL 是一个广泛使用的关系型数据库管理系统&#xff0c;但随着数据量的增长和访问频率的提高&#xff0c;其性能可能会成为瓶颈。为了保持高效的性能&#xff0c;除了应用层的查询优化和索引优化之外&#xff0c;数据库配置优化 也是非常重…

Unity DOTS系列之IJobChunk来迭代处理数据

最近DOTS发布了正式的版本, 我们来分享一下System中如何在System中使用IJobChunk来迭代处理World中的数据&#xff0c;方便大家上手学习掌握Unity DOTS开发。 再回顾一次基于ArcheType Chunk内存管理 我们先再次回顾以下基于ArcheType的Chunk内存管理。每一类Entity都是由一些…

windows下用cmake编译腾讯云的对象存储COS的XML C++SDK

首先在腾讯云官网上下载sdk&#xff0c;网址及官方说明文档如下&#xff1a; 对象存储 快速入门-SDK 文档-文档中心-腾讯云 我下载解压之后的路径如下图&#xff1a; 下载完后就要编译了。 1.下载VS&#xff0c;我的开发环境是 visual studio 2019 2. 下载CMake&#xff…