当前位置: 首页 > news >正文

测试萌新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

  1. URL 参数:在Web开发中,“params” 可能指的是通过 URL 传递的参数。例如,在以下URL中,“params”部分指的是参数:https://example.com/api?param1=value1&param2=value2
  2. 函数参数:在编程中,特别是在函数或方法中,“params”通常是指传递给函数或方法的参数。例如,在Python中定义一个函数时可以指定参数,然后在调用函数时传递这些参数。
  3. HTTP 请求参数:在Web开发中,“params” 可能指的是在 HTTP 请求中发送的参数。这些参数可以是通过 URL 查询字符串传递的,也可以是通过 POST 请求体发送的。
  4. 数据库查询参数:在数据库查询中,“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 等&#xff0c…...

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

OpenWrt opkg配置进阶:手把手教你设置代理、跳过证书检查,解决国内下载慢问题

OpenWrt opkg高效配置指南:突破网络限制的实战技巧 每次在OpenWrt上安装软件时,看着缓慢的下载进度条或者突如其来的连接错误,是不是感觉既熟悉又无奈?作为一款强大的路由器操作系统,OpenWrt的opkg包管理器本该是我们的…...

工程技巧 用缓存把 Agent 延迟打下来 结果缓存 语义缓存 计划缓存

从3s到300ms:用三级缓存体系把LLM Agent响应延迟打下来|结果缓存+语义缓存+计划缓存全落地指南 副标题:面向LangChain/Agent开发人员的生产级优化方案,附可直接复用的完整代码 摘要/引言 你是不是也遇到过这样的痛点:辛辛苦苦搭好的LLM Agent,功能都跑通了,但是用户问…...

告别FreeRTOS:在乐鑫ESP32-C3上为RT-Thread打上‘内核补丁’的完整指南

从FreeRTOS到RT-Thread:ESP32-C3内核替换的工程实践 在嵌入式开发领域,操作系统的选择往往决定了项目的技术栈和生态边界。对于习惯了ESP-IDF和FreeRTOS的开发者来说,RT-Thread以其模块化设计和丰富的中间件支持正成为颇具吸引力的替代方案。…...

别再怕触电了!拆解一个手机充电器,手把手教你搞懂隔离型反激电源(附原理图分析)

从废弃充电器到安全电源设计:隔离型反激电源的实战拆解指南 每次给手机充电时,那个不起眼的小方块里究竟藏着怎样的魔法?为什么我们触摸充电线不会触电?今天,我将带您亲手拆解一个废弃的5V/1A手机充电器,用…...

避坑指南:iMX6ULL上RTL8723BU模块的WiFi延迟与蓝牙扫描问题分析与优化

iMX6ULL平台RTL8723BU模块WiFi/蓝牙深度调优实战 当iMX6ULL开发板遇上RTL8723BU这款高性价比的WiFi蓝牙二合一模块,不少开发者会发现:虽然基础功能能跑通,但实际应用中WiFi延迟飙高、蓝牙设备扫描不稳定等问题频频出现。这就像买了一辆能启动…...

从一颗0603电阻的封装,聊聊PADS里那些容易被忽略的‘隐形’图层(丝印、装配、阻焊)

从一颗0603电阻的封装,聊聊PADS里那些容易被忽略的‘隐形’图层 在PCB设计领域,封装设计往往被视为"简单"的基础工作。许多工程师认为,只要焊盘位置正确、丝印轮廓大致匹配,一个封装就算完成了。直到某天,工…...

别再只会if-else了!用STM32状态机实现按键短按、长按、双击(附完整代码)

STM32状态机实战:从零设计支持短按、长按、双击的按键驱动库 在嵌入式开发中,按键处理看似简单,却是最能体现开发者设计功力的场景之一。传统的中断加延时消抖方式虽然能快速实现功能,但随着需求复杂化(比如需要区分短…...

使用TaoTokenCLI工具一键配置多开发环境下的API接入

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用TaoTokenCLI工具一键配置多开发环境下的API接入 在团队协作或个人多项目开发中,为每个项目或每台机器手动配置大模…...

钉钉里藏了个 AI 员工?OpenClaw 接入玩法深度拆解

​前言 本文将指导您如何将OpenClaw工具与钉钉企业内部机器人进行无缝对接,实现业务信息和任务的自动化同步,有效提升团队协作效率。我们提供了完整的接入流程指南,包含详细的操作步骤、常见问题解决方案以及实用优化技巧,帮助开…...

Linux Shell生成随机文件:dd、openssl等工具实战与性能优化

1. 项目概述:为什么我们需要一个“随机”的固定大小文件?在日常的系统管理、开发测试,甚至是性能基准评测中,我们经常会遇到一个看似简单却非常实用的需求:快速生成一个指定大小的文件,并且希望文件内容是随…...