测试萌新Python学习(五)接口自动化测试requests
requests
- 接口自动化测试
- requests库
- 基本实现请求-GET
- 基本实现请求-POST
- 基本实现请求-补充
- session
- Cookie和Session
- 案例
- params
接口自动化测试
概念程序驱动代替人工驱动去实现接口测试
实现方式
- 测试工具(jmeter, postman, …)
- 编码工具(python, java, …)
比较
- 工具
- 优点: 1.不需要编程基础 2.功能都是封装好的, 直接调用
- 缺点: 不灵活
- 编码
- 优点: 灵活
- 缺点: 1.需要编程基础 2.功能需要自实现, 效率偏低
requests库
概念 requests 库是使用 python 编写的, 可以调用该库的函数直接向服务器发送 http 请求, 并接收响应
角色定位 jmeter 中的 http 请求
安装
# 命令行输入命令并回车
pip install requests
需要有网络
校验
# 命令行输入命令并回车
pip list
基本实现请求-GET
"""需求: 编写 python 代码, 访问案例的查询接口 (/sa/listarea)流程: 三要素1.根据 url 定位接口资源2.提交测试数据3.发送请求, 接收并处理响应结果
"""
# 导包
import requests
# 一行代码搞定
response = requests.get("http://localhost:8081/sa/listarea")
# 打印结果
print("状态码:", response.status_code)
print("响应体:", response.text)
基本实现请求-POST
"""需求: 编写 python 代码, 访问案例的新增接口 (/sa/addarea)
"""
# 导包
import requests
# 三要素
data = {"areaName": "中发白", "priority": "123"}
response = requests.post("http://localhost:8081/sa/addarea", data=data)
print("状态码:", response.status_code)
print("响应体:", response.text)
基本实现请求-PUT
"""需求: 编写 python 代码, 访问案例的修改接口 (/sa/modifyarea)
"""
# 导包
import requests
# 三要素
# data = {"areaName": "中发白", "priority": "123"}
myJson = {"areaId": "40","areaName": "东南西北中发白","priority": "888"
}
response = requests.put("http://localhost:8081/sa/modifyarea", json=myJson)
print("状态码:", response.status_code)
print("响应体:", response.text)
基本实现请求-DELETE
"""需求: 编写 python 代码, 访问案例的删除接口 (/sa/removearea)
"""
# 导包
import requests
# 三要素
response = requests.delete("http://localhost:8081/sa/removearea", params={"areaId": "40"})
print("状态码:", response.status_code)
print("响应体:", response.text)
基本实现请求-补充
四种操作的代码结构基本一致
区别
-
函数名不同
-
提交测试数据的参数名不同
-
get/delete 使用 params
-
post/put 使用 data/json
data 提交键值对格式数据
json 提交JSON格式数据
-
为什么
- get/delete 请求格式: 提交的数据在请求行
- post/put 请求格式: 提交的数据在请求体
基本实现响应-response 响应由行头体三部分组成, 解析也是围绕行头体解析
"""需求: 响应由行头体三部分组成, 需要用requests 相关实现解析响应中的行头体
"""
import requests
response = requests.get("http://www.baidu.com")
# 行解析
print("URL:", response.url)
print("状态码:", response.status_code)
print("-"*80)
# 头获取
print("获取所有响应头:", response.headers)
print("获取所有cookie:", response.cookies)
print("获取所有编码集:", response.encoding)
print("-"*80)
# 体获取
print("以文本的方式获取响应体:", response.text) # 服务器传过来的是文本信息, 如 html 文档
# print("以二进制的方式获取响应体:", response.content) # 服务器传过来的是图片/视频/音频等非文本数据
# print("以JSON的方式获取响应体:", response.json()) # 服务器传过来的是json格式数据, 调用该方法以json语法解析数据
登录实现思路cookie
# 核心知识点: 关联
# 获取登录接口响应的 cookie, 提取出来作为查询订单接口要提交的参数
import requests
# 访问接口1: 访问登录接口
response1 = requests.post("login接口", data={"username": "xxx", "password": "yyy"})
# 获取 cookie, 再获取 cookie 中的 xxID 形式类似于{"xxID": "zzz"}
id = response1.cookies.get("xxID")
# 访问接口2: 订单查询接口
requests.get("查询订单接口", cookies={"xxID": id})
session
import requests
# 获取 session 对象
mySession = requests.Session()
# 请求1: 使用 session 登录
#requests.post(...)
response1 = mySession.post("login接口", data={"username": "xxx", "password": "yyy"})
# 请求2: 使用 session 获取订单
response2 = mySession.get("查询订单接口")
Cookie和Session
都是用于在Web应用程序中跟踪用户状态的机制,但它们之间有一些关键区别。
Cookie:
1.定义:Cookie是在用户计算机上存储的小型文本文件,由服务器发送到用户的浏览器,并保存在浏览器的文件系统中。
2.用途:主要用于在客户端(用户的浏览器)和服务器之间传递信息,以跟踪和识别用户。通常,Cookie包含有关用户的会话信息、偏好设置或其他数据。
3.特点:
a.被存储在用户的本地计算机上,因此可以在不同的页面和会话之间持久存在。
b.可以设置过期时间,可以是会话级别的(浏览器关闭时删除)或持久性的(在指定的时间后过期)。
c.由于存储在客户端,Cookie可以在用户访问网站时发送给服务器,从而识别用户并提供个性化的体验。
Session:
1.定义:Session是在服务器上创建的唯一会话标识符,用于跟踪用户在网站上的活动状态。
2.用途:主要用于在服务器端存储用户的状态信息,以便在用户访问网站的不同页面时保持用户的状态和数据。
3.特点:
a.存储在服务器上,通常以内存中的数据结构或数据库中的条目的形式存在。
b.每个会话都有一个唯一的会话标识符(Session ID),通过该标识符可以在用户请求之间识别用户。
c.由于存储在服务器上,Session数据对客户端不可见,因此相对于Cookie更安全。
d.通常,Session会在用户关闭浏览器或一段时间后过期,具体取决于服务器的配置。
总结:
1.Cookie存储在客户端,而Session存储在服务器端。
2.Cookie通常用于识别和跟踪用户,而Session用于在用户访问期间保持状态和数据。
3.Cookie的生命周期由客户端控制,而Session的生命周期由服务器控制。
4.Cookie对客户端可见,可以在不同的页面和会话之间持久存在,而Session对客户端不可见,只能通SessionID来识别用户。
5.Cookie通常用于存储较小的数据,而Session可以存储更大量的数据。
案例
需求
使用 requests库调用 tpshop登录功能的相关接口, 完成登录操作, 登录成功后获取 “我的订单” 页面(其实就是访问订单列表接口)
相关接口:
1.获取验证码:http://localhost/index.php?m=Home&c=User&a=verify GET(此接口返回验证码 和 cookie)
2.登录:http://localhost/index.php?m=Home&c=User&a=do_login POST参数: {"username":"xxxxx","password":"yyyy","verify_code":"zzzz"},非 JSON 提交
3.我的订单:http://localhost/Home/Order/order_list.html GET
cookie
import requests
# 1.获取验证码, 并获得 cookie 中的 PHPSESSID
response1 = requests.get("http://localhost/index.php?m=Home&c=User&a=verify")
print(response1.status_code)
print(response1.cookies)
id = response1.cookies.get("PHPSESSID")
print(id)
print("-"*80)
# 2.登录, 并提交cookie
data = {"username": "17150312012", "password": "123456", "verify_code": "8888"}
cookie = {"PHPSESSID": id}
response2 = requests.post("http://localhost/index.php?m=Home&c=User&a=do_login", data=data, cookies=cookie)
print(response2.status_code)
print(response2.text)
print("-"*80)
# 3.获取订单, 需要再次提交 cookie
response3 = requests.get("http://localhost/Home/Order/order_list.html", cookies=cookie)
print(response3.status_code)
print(response3.text)
session
import requests
# 创建 session 对象
session = requests.Session()
# 1.获取验证码(隐式获取cookie)
response1 = session.get("http://localhost/index.php?m=Home&c=User&a=verify")
print(response1.status_code)
print("-"*80)
# 2.登录
data = {"username": "17150312012", "password": "123456", "verify_code": "8888"}
response2 = session.post("http://localhost/index.php?m=Home&c=User&a=do_login", data=data)
print(response2.status_code)
print(response2.text)
print("-"*80)
# 3.获取订单
response3 = session.get("http://localhost/Home/Order/order_list.html")
print(response3.status_code)
print(response3.text)
params
- URL 参数:在Web开发中,“params” 可能指的是通过 URL 传递的参数。例如,在以下URL中,“params”部分指的是参数:
https://example.com/api?param1=value1¶m2=value2
- 函数参数:在编程中,特别是在函数或方法中,“params”通常是指传递给函数或方法的参数。例如,在Python中定义一个函数时可以指定参数,然后在调用函数时传递这些参数。
- HTTP 请求参数:在Web开发中,“params” 可能指的是在 HTTP 请求中发送的参数。这些参数可以是通过 URL 查询字符串传递的,也可以是通过 POST 请求体发送的。
- 数据库查询参数:在数据库查询中,“params” 通常指的是用于过滤、排序或限制结果的参数。这些参数可以是通过 SQL 查询语句的参数化查询传递的。
相关文章:
测试萌新Python学习(五)接口自动化测试requests
requests 接口自动化测试requests库基本实现请求-GET基本实现请求-POST基本实现请求-补充 sessionCookie和Session案例params 接口自动化测试 概念程序驱动代替人工驱动去实现接口测试 实现方式 测试工具(jmeter, postman, …)编码工具(python, java, …) 比较 工具 优点:…...

Python 机器学习 基础 之 监督学习 [朴素贝叶斯分类器] / [决策树] 算法 的简单说明 / [graphviz] 绘制决策树
Python 机器学习 基础 之 监督学习 [朴素贝叶斯分类器] / [决策树] 算法 的简单说明 / [graphviz] 绘制决策树 目录 Python 机器学习 基础 之 监督学习 [朴素贝叶斯分类器] / [决策树] 算法 的简单说明 / [graphviz] 绘制决策树 一、简单介绍 二、监督学习 算法 说明前的 数…...
QT日志类SimpleQtLogger的简单记录
在现代软件开发中,日志记录是必不可少的部分。它不仅帮助开发者在调试和维护软件时了解程序的运行状态,还能提供关键的错误信息。对于使用Qt框架开发应用程序的开发者来说,选择一个合适的日志库至关重要。本文将详细介绍Qt日志库SimpleQtLogg…...
设计模式:观察者模式
观察者模式(Observer Pattern)是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式通常被用来实现事件处理系统、实时数据更新、…...

ICode国际青少年编程竞赛- Python-5级训练场-带参数函数
ICode国际青少年编程竞赛- Python-5级训练场-带参数函数 1、 def get_item(a):Dev.step(a)Dev.step(-a) get_item(4) Spaceship.step(2) get_item(2) Spaceship.step(3) get_item(5) Spaceship.step(2) get_item(3) Spaceship.step(3) get_item(4)2、 def get_item(a): D…...

运维别卷系列 - 云原生监控平台 之 02.prometheus exporter 实践
文章目录 [toc]exporter 简介常用的 exporternode-exporter 实践创建 svc创建 daemonsetprometheus 配置服务发现 exporter 简介 随着 Prometheus 的流行,很多系统都已经自带了用于 Prometheus 监控的接口,例如 etcd、Kubernetes、CoreDNS 等,…...

OSPF基本配置
1.启动OSPF进程 [rijospf1 router-id 1.1.1.1 --- 手工配置RID [r1-ospf-1) 2,创建区域 [r1-ospf-1]area 0 [r1-ospf-1-area-0.0.0.0) 3,宣告 目的:1,只有被宣告网段中的接口才能被激活。 --- 激活接口 ---- 只有激活的接口才能收发OSPF的…...

HIVE大数据平台SQL优化分享
相信很多小伙伴在面试的时候,必然跳不过去的一个问题就是SQL脚本的优化,这是很多面试官爱问的问题,也是可以证明你实力进阶的一个重要的能力。 下面给大家分享一个重量级的大数据行业sql技能---hive大数据平台SQL优化。 此文章是大数据平台…...
JS算法-十大排序算法(上)
思想小剧场 如果我的相对论被证明是正确的,德国人就会说我是德国人,法国人会说我是一个世界公民;如果我的相对论被否定了,法国佬就会骂我是德国鬼子,而德国人就会把我归为犹太人。—爱因斯坦 以下案例都是升序 const a…...

c++编程(11)——string类的模拟实现
欢迎来到博主的专栏——c编程 博主ID:代码小豪 文章目录 前言string类的模拟实现string的成员对象构造、赋值、析构访问成员对象的接口访问字符串中的元素迭代器对字符序列的插入、删除元素操作mystring类的相关操作 mystring类的所有模拟实现以及测试案例 前言 本…...

Python从0到POC编写--函数
数学函数: 1. len len() 函数返回对象(字符、列表、元组等)长度或项目个数, 例如: str "python" len(str)2. range range() 函数返回的是一个可迭代对象(类型是对象),…...

【教程】Linux/Jetson 安装X11VNC同步屏幕内容
转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,请不吝给个[点赞、收藏、关注]哦~ 目录 背景说明 实际效果 安装步骤 安装 x11vnc 配置 x11vnc 配置 x11vnc 作为系统服务 使用 VNC 客户端连接 背景说明 通常vnc-server是单…...

【LLM第五篇】名词解释:prompt
1.是什么 提示工程(Prompt Engineering)是一门较新的学科,关注提示词开发和优化,帮助用户将大语言模型(Large Language Model, LLM)用于各场景和研究领域。 掌握了提示工程相关技能将有助于用户更好地了解…...

k8s v1.20二进制部署 部署 CNI 网络组件 部署 Calico
一、部署 flannel 1.1.K8S 中 Pod 网络通信 ●Pod 内容器与容器之间的通信 在同一个 Pod 内的容器(Pod 内的容器是不会跨宿主机的)共享同一个网络命名空间,相当于它们在同一台机器上一样,可以用 localhost 地址访问彼此的端口。…...

在React中利用Postman测试代码获取数据
文章目录 概要名词解释1、Postman2、axios 使用Postman测试API在React中获取并展示数据小结 概要 在Web开发中,通过API获取数据是一项常见任务。Postman是一个功能强大的工具,可以帮助开发者测试API,并查看API的响应数据。在本篇博客中&…...

嵌入式学习-通用定时器
简介 框图介绍 时钟选择 计数器部分 输入捕获和输出比较框图 嵌入式学习全文参考(小向是个der)做笔记:https://blog.csdn.net/qq_41954556/article/details/129735708...

培训行业有哪些ai工具?
培训行业利用人工智能(AI)工具的方式多种多样,其中一些常见的工具包括: 1. **经AI深度学习的OCR软件**:OCR能给培训行业带来很大的便利,能大大提高工作效率和降低文字录入的成本,但一般的OCR工具…...

7.STL中string的一些超常用函数 (附习题)
目录 1.find 2.atoi 3.to_string 4.getline 【leetcode 习题】 387.字符串中的第一个唯一字符 125. 验证回文串 1.find 1.查找第一次出现的目标字符串:说明:如果查找成功则输出查找到的第一个位置,否则返回-1; s1.find(s2…...

GPT搜索鸽了!改升级GPT-4
最近OpenAI太反常,消息一会一变,直让人摸不着头脑。 奥特曼最新宣布:5月13日开发布会,不是GPT-5,也不是盛传的GPT搜索引擎,改成对ChatGP和GPT-4的升级~ 消息一出,大伙儿都蒙了。 之…...

数字绘画教学实训解决方案
一、建设背景 1.1政策背景 教育信息化政策推动:近年来,随着教育信息化政策的不断推动,各级教育部门纷纷出台相关政策,鼓励和支持教育信息化的发展。数字绘画作为现代艺术教育的重要组成部分,其教学实训解决方案的建设…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...

学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...

2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
【SpringBoot自动化部署】
SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一,能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时,需要添加Git仓库地址和凭证,设置构建触发器(如GitHub…...