测试萌新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 查询语句的参数化查询传递的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/12331.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Network Compression

听课(李宏毅老师的)笔记,方便梳理框架,以作复习之用。本节课主要讲了Network Compression,包括为什么要压缩,压缩的主要手段(pruning,knowledge distillation,parameter quantization,architect…

Elasticsearch_sql插件安装+使用

一、安装 前提是你先安装好了elasticseach,安装过程在我上一篇博客有说,可以看一下。 在elasticsearch容器启动的情况下,进入到elasticsearch容器,Elasticsearch_sql仓库,比如我的版本是8.11.2,那么我就选…

[蓝桥杯]真题讲解:抓娃娃(思维+二分)

[蓝桥杯]真题讲解&#xff1a;抓娃娃&#xff08;思维二分&#xff09; 一、视频讲解二、正解代码1、C2、python33、Java 一、视频讲解 [蓝桥杯]真题讲解&#xff1a;抓娃娃&#xff08;思维二分&#xff09;&#xff09; 二、正解代码 1、C #include<bits/stdc.h> #d…

fastapi+vue实现导入Excel表格的功能

1.前端部分 1.1 api设置 // 导入用户 export function uploadUser(data) {const formData new FormData();formData.append(file, data); // data 是从文件上传事件中获取的文件对象return request({url: /users/upload,method: post,headers: {Content-Type: multipart/fo…

前端CSS3基础1(新增长度单位,盒子模型,背景,边框,文本属性,渐变,字体,2D变换,3D变换)

前端CSS3基础1&#xff08;新增长度单位&#xff0c;盒子模型&#xff0c;背景&#xff0c;边框&#xff0c;文本属性&#xff0c;渐变&#xff0c;字体&#xff0c;2D变换&#xff0c;3D变换&#xff09; CSS3 新增长度单位CSS3 新增盒子模型相关属性box-sizing怪异盒模型box-…

实现简易版Vuex

从实现一个简单的 Vuex 类来了解 Vuex 的工作原理。 实现思路 Vuex 下拥有 install 方法和 Store 类。即创建一个 Vuex 的模块&#xff0c;这个模块导出 install 方法和 Store 类。 install 方法 Vuex 是 Vue 的一个插件&#xff0c;所以需要实现 Vue 插件约定的 install 方…

Linux:ftp文件传输实验

Linux&#xff1a;ftp文件传输实验 实验实现 # 安装对应软件 [rootserver120 ~]# dnf install vsftpd -y [rootserver120 ~]# dnf install lftp -y# 关闭防火墙以及开启服务 [rootserver120 ~]# systemctl disable --now firewalld [rootserver120 ~]# systemctl enable --no…

ambari-server高可用配置方案

制品 https://kdocs.cn/l/cie4hSgvUunX 前置条件 环境需要支持VRRP协议 环境需要配置好yum源 变更影响面 变更不会影响其他组件 配置lb(需要客户侧配置并提供LB地址) 转发方式选择 主备 监听端口为8080、8440、8441 协议为tcp 后端监听选择kde-offline1为主

【RAG 论文】UPR:使用 LLM 来做检索后的 re-rank

论文&#xff1a;Improving Passage Retrieval with Zero-Shot Question Generation ⭐⭐⭐⭐ EMNLP 2022, arXiv:2204.07496 Code: github.com/DevSinghSachan/unsupervised-passage-reranking 论文&#xff1a;Open-source Large Language Models are Strong Zero-shot Query…

【HR】阿里三板斧--20240514

参考https://blog.csdn.net/haydenwang8287/article/details/113541512 头部三板斧 战略能不能落地、文化能不能得到传承、人才能不能得到保障。 头部三板斧适用的核心场景有三个&#xff1a;一是战略不靠谱&#xff1b;二是组织效率低、不聚心&#xff1b;三是人才跟不上。对…

c++ 各版本特性介绍

c C是一种高级编程语言&#xff0c;以其强大的功能、灵活性和高效性而闻名。它是由Bjarne Stroustrup在20世纪80年代初期在贝尔实验室开发的&#xff0c;作为C语言的一个扩展。C不仅包含了C语言的所有特性&#xff0c;还引入了面向对象编程&#xff08;OOP&#xff09;的概念&…

基于Vue3+ElementPlus项目,复制文字到剪贴板功能实践指南,揭秘使用js-tool-big-box工具库的核心优势

在前端开发项目中&#xff0c;很多时候有那么一个场景&#xff0c;就是要求将一段文案复制下来&#xff0c;这段文案可能是一串很长的id&#xff0c;可能是一条命令语句&#xff0c;可能是一小段文案&#xff0c;复制到剪贴板上。这样有利于用户复制到其他地方去&#xff0c;使…

自然资源-城乡规划行业未来二十年将何去何从?

自然资源-城乡规划行业未来二十年将何去何从? 城乡规划行业未来风口在以下几个方向&#xff0c;看好啦&#xff01;紧跟国家发展战略和政策背景。 1.大数据的城市规划应用。 包含:公共数据平台的搭建CIM&#xff0c;数据赋能治理&#xff0c;城市规划中大数据应用的研究 等…

微软必应bing国内官方代理商,广告账户如何开户?

微软必应Bing作为全球知名的搜索引擎之一&#xff0c;其广告平台为众多企业提供了广阔的市场空间和精准的推广机会。对于中国内地的企业而言&#xff0c;通过必应Bing开展国内广告推广不仅能够触及更广泛的潜在客户群体&#xff0c;还能有效提升品牌影响力。通过微软必应Bing国…

【算法作业】均分卡牌,购买股票

问题描述 John 有两个孩子&#xff0c;在 John病逝后&#xff0c;留下了一组价值不一定相同的魔卡&#xff0c; 现在要求你设计一种策略&#xff0c;帮John的经管人将John的这些遗产分给他的两个孩子&#xff0c;使得他们获得的遗产差异最小&#xff08;每张魔卡不能分拆&#…

搜索引擎的设计与实现(三)

目录 5 系统详细实现 5.1实现环境配置 5.2功能实现 5.2.1 建立索引 5.2.2 文件搜索实现 5.2.3 数据库的连接配置 5.2.4 数据库搜索实现 5.2.5 后台数据编辑实现 前面内容请移步 搜索引擎的设计与实现&#xff08;二&#xff09; 免费源代码&毕业设计论文 搜索…

git-删除workspace.xml的跟踪

问题描述 .gitignore 文件内容如下&#xff1a; .pyc *.pyc user_files/ .vscode/ __pycache__//.idea/misc.xml /.idea/modules.xml /.idea/inspectionProfiles/profiles_settings.xml /.idea/inspectionProfiles/Project_Default.xml /.idea/batrp_webbackend-server-dev.i…

NARUTO 复现记录

1 环境配置 下载项目&#xff0c;一定要 git 下载全项目&#xff0c;下载完后要检查third_parities 里面的coslam和neural_slam_eval 文件全不全。 git clone --recursive https://github.com/oppo-us-research/NARUTO.git 环境配置 注意 bash scripts/installation/conda…

番外篇 | 利用PyQt5+YOLOv5来搭建目标检测系统(附可视化界面+功能介绍+源代码)

前言:Hello大家好,我是小哥谈。PyQt5是一个Python绑定的Qt库,是用于创建图形用户界面(GUI)和其他应用程序组件的工具包。PyQt5提供了许多GUI元素,如按钮、文本框、标签等,也提供了许多Qt的功能,如网络、数据库、XML等。通过PyQt5可以在Python中使用Qt的丰富功能和强大的工…

克服亏损的负面影响 学学现货白银止损的方法

一个多月以前&#xff0c;现货黄金的上涨还十分强劲&#xff0c;一度还逼近历史的高位30大关。但是我们看近半个月以来&#xff0c;现货白银价格出现了调整。很多在高位买入的投资者都承受了较大的亏损&#xff0c;这时候就凸显出了现货白银止损的作用。如果投资者能够通过近期…