接口自动化测试-Requests之Session鉴权关联接口实战

news2025/1/18 10:44:11

 目录

 前言:

一、 简介

二、 实战操作

1. 登录接口

2. 查询订单接口

3. 新增订单接口

4. 修改订单接口

5. 删除订单接口

三、 结束语

 前言:

接口自动化测试是软件测试过程中的重要一环,现在越来越多的公司开始使用自动化测试来提高测试效率和测试质量。在接口自动化测试中,请求参数的传递、接口返回数据的解析、状态码的判断等都是测试人员需要关注和处理的问题。其中,接口鉴权比较常见,而Session鉴权是一种常用的鉴权方式。在本篇文章中,我们将学习如何使用Requests库实现Session鉴权并关联接口的实战操作过程。

一、 简介

Requests是Python中最流行的HTTP库之一,它提供了一个简单且易于使用的接口,用于发送HTTP/1.1请求。在测试接口中,Requests被广泛应用于HTTP请求发送、接口性能测试、接口自动化测试等方面。

二、 实战操作

我们在实战中,以一个订单管理接口为例来演示Session鉴权的相关操作。该接口需要登录后才能进行访问,而且接口返回的数据格式为JSON格式。我们将演示如何使用Requests库进行接口自动化测试,完成订单查询、订单新增、订单修改和订单删除操作。

1. 登录接口

在进行鉴权关联之前,我们需要先登录获取到Session进行鉴权。登录接口的请求参数为用户名和密码,接口返回的数据中包含一个类似于token的Session。下面是代码演示:

import requests

# 登录接口
def login():
    url = 'http://xxxxx/login'
    user = {'username': 'test', 'passwor': '123456'}
    res = requests.post(url, data=user)
    # 获取Session
    session = res.cookies.get_dict()['session']
    return session

2. 查询订单接口

接下来,我们将演示如何使用Session鉴权实现订单查询功能。该接口需要在请求头中添加Session,我们可以使用Requests库的headers参数来设置请求头,具体代码如下:

import requests

# 查询订单接口
def query_order(session):
    url = 'http://xxxxx/query_order'
    headers = {'Cookie': 'session=' + session}
    res = requests.get(url, headers=headers)
    data = res.json()
    return data

3. 新增订单接口

新增订单接口需要提交订单信息。在此之前,我们需要先把需要提交的订单信息保存在一个字典中,然后使用Requests库的json参数来提交JSON格式的数据。下面是代码演示:

import requests

# 新增订单接口
def add_order(session):
    url = 'http://xxxxx/add_order'
    order_info = {'order_no': 'xxxxxx', 'order_amount': 100}
    headers = {'Cookie': 'session=' + session}
    res = requests.post(url, json=order_info, headers=headers)
    data = res.json()
    return data

4. 修改订单接口

修改订单接口需要提供订单ID以及修改的订单信息。我们可以将订单ID和订单信息保存在一个字典中,然后使用Requests库的put方法来提交修改请求。下面是代码演示:

import requests

# 修改订单接口
def modify_order(session):
    url = 'http://xxxxx/modify_order'
    order_info = {'order_id': 1, 'order_no': 'yyyyyy', 'order_amount': 200}
    headers = {'Cookie': 'session=' + session}
    res = requests.put(url, json=order_info, headers=headers)
    data = res.json()
    return data

5. 删除订单接口

删除订单接口需要提供订单ID,我们可以将订单ID保存在一个字典中,然后使用Requests库的delete方法来提交删除请求。下面是代码演示:

import requests

# 删除订单接口
def del_order(session):
    url = 'http://xxxxx/del_order'
    order_info = {'order_id': 1}
    headers = {'Cookie': 'session=' + session}
    res = requests.delete(url, json=order_info, headers=headers)
    data = res.json()
    return data

到这里,我们已经完成了Session鉴权关联接口的实战操作。下面,我们将整个代码串联起来,实现一个完整的测试用例。完整代码如下:

import requests

# 登录接口
def login():
    url = 'http://xxxxx/login'
    user = {'username': 'test', 'passwor': '123456'}
    res = requests.post(url, data=user)
    # 获取Session
    session = res.cookies.get_dict()['session']
    return session

# 查询订单接口
def query_order(session):
    url = 'http://xxxxx/query_order'
    headers = {'Cookie': 'session=' + session}
    res = requests.get(url, headers=headers)
    data = res.json()
    return data

# 新增订单接口
def add_order(session):
    url = 'http://xxxxx/add_order'
    order_info = {'order_no': 'xxxxxx', 'order_amount': 100}
    headers = {'Cookie': 'session=' + session}
    res = requests.post(url, json=order_info, headers=headers)
    data = res.json()
    return data

# 修改订单接口
def modify_order(session):
    url = 'http://xxxxx/modify_order'
    order_info = {'order_id': 1, 'order_no': 'yyyyyy', 'order_amount': 200}
    headers = {'Cookie': 'session=' + session}
    res = requests.put(url, json=order_info, headers=headers)
    data = res.json()
    return data

# 删除订单接口
def del_order(session):
    url = 'http://xxxxx/del_order'
    order_info = {'order_id': 1}
    headers = {'Cookie': 'session=' + session}
    res = requests.delete(url, json=order_info, headers=headers)
    data = res.json()
    return data

if __name__ == '__main__':
    # 获取Session
    session = login()
    # 查询订单
    query_result = query_order(session)
    print('查询订单结果:', query_result)
    # 新增订单
    add_result = add_order(session)
    print('新增订单结果:', add_result)
    # 修改订单
    modify_result = modify_order(session)
    print('修改订单结果:', modify_result)
    # 删除订单
    del_result = del_order(session)
    print('删除订单结果:', del_result)

三、 结束语

本篇文章主要介绍了如何使用Requests库实现Session鉴权关联接口的实战操作过程。在实际的应用中,我们还需要考虑接口的异常情况处理、性能测试、测试结果的输出和报告等。有兴趣的读者可以扩展实现。

【自动化测试交流】:574737577icon-default.png?t=N3I4http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=uRdFe9BgaRaTU_ZFyq47YHyM58mUO7h2&authKey=avCPnSav1L%2BCXdYB6QJWsgBRVR104qJNwPYZgTx27Wu7K%2FLX7pkvd0rWSX8fuw89&noverify=0&group_code=574737577接口自动化测试:

 

 自动化测试福利:

 

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

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

相关文章

某社交平台 x-s所有可用

本文以教学为基准、本文提供的可操作性不得用于任何商业用途和违法违规场景。 本人对任何原因在使用本人中提供的代码和策略时可能对用户自己或他人造成的任何形式的损失和伤害不承担责任。 最新版 x-s 没露任何版权请审核员认真对待谢谢。 【2023.05.16】 更新全站接口通用 …

webpack食用指北

目录 何为webpackwebpack前置知识webpack项目初始化webpack配置文件运行webpack loadercss引入对loader的配置的几种写法 图片引入url的options自动清除上次打包遗留的资源 资源模块类型图片的webpack5引入方式字体的webpack5引入方式 webpack插件html-webpack-plugincopy-webp…

CSS 常用属性

padding (内边距):钻戒到盒子内边框的距离 margin (外边距):钻戒盒子距离桌子边缘的距离 border:钻戒盒子边框宽度 1) 内边距和外边距 内边距 外边距 使用方式: .a {padding: 10px 5px 15px 20px; /*上右下左*/padding: 10px 5px 15px; /*上右下*/padding: 10px 5px; /*上右…

EMC常见术语-dB、dBm、dBw以及如何计算

1. 手把手教:如何计算dB、dBm、dBw…… dB应该是无线通信中最基本、最习以为常的一个概念了。我们常说“传播损耗是xx dB”、“发射功率是xx dBm”、“天线增益是xx dBi”…… 有时,这些长得很像的dBx们可能被弄混,甚至造成计算失误。它们究…

docker Connection refused

环境介绍、服务版本、测试服务是否正常,可参考: docker could not find driver_龙枫995的博客-CSDN博客docker容器中,php和mysql互动时,解决出现could not find driverhttps://blog.csdn.net/longfeng995/article/details/130704…

Ngrok免费实现内网穿透

Ngrok免费实现内网穿透 前言 平时我们做项目,有时候需要用到内网穿透,让外网可以正常访问我们的资源。网上虽然有内网穿透工具,但是很多都是收费的,比如像我曾经用过的花生壳,好用是好用,但是要收费。我的…

微服务注册中心之Zookeeper,Eureka,Nacos,Consul,Kubernetes区别

文章目录 1 微服务注册中心1.1 注册中心概念1.1.1 为什么需要注册中心1.1.2 如何实现一个注册中心1.1.3 如何解决负载均衡的问题 1.2 注册中心如何选型1.2.1 Zookeeper1.2.2 Eureka1.2.3 Nacos1.2.4 Consul1.2.5 Kubernetes 1 微服务注册中心 微服务的注册中心目前主流的有以下…

spring注册bean方式总结

从前天开始气温飞升,三十七八度,这谁受得了,看看代码降降温~ 文章目录 什么是注册beanAutowired、Resource及Inject等Component及Service等Configuration及Beanspring.factories文件Import和ImportSelector使用Import及ImportBeanDefinition…

vue3项目国际化,你还不了解吗?

vue3使用的国际化库为:i18n 安装方式: npm install vue-i18nnext安装完成后在src文件夹下新建lang文件夹 在lang文件夹下新建需要语言转换的文件夹,这里以中文zh和英文en举例,在这两个文件夹下新建需要转换的语言 在zh的index.…

掌握ZBrush的19个建模技巧,让你的雕刻作品更逼真

ZBrush 是一个数字雕刻和绘画软件,它以强大的功能和直观的工作流程彻底改变了整个三维行业,按照世界领先的特效工作室和全世界范围内的游戏设计者的需要,以一种精密的结合方式开发成功的,它提供了极其优秀的功能和特色&#xff0c…

精简70%、内存不到1G,可以装在显卡上的Win11来了

Win11 经历了一两年的更新,现在有了许多 Win10 没有的功能特性。 但其中某些用不上的功能也让 Win11 显得臃肿甚至卡顿及各种谜之 Bug 。 对于配置较低或者有「洁癖」的用户来说,可能还在死守官方精简 Win10 LTSC 长期服务版。 Win11 LTSC 尚未发布&am…

Policy Gradient策略梯度算法详解

1. 基本思想 Policy Gradient策略梯度(PG),是一种基于策略的强化学习算法,不少帖子会讲到从基于值的算法(Q-learning/DQN/Saras)到基于策略的算法难以理解,我的理解是两者是完全两套思路&#…

S32K144低功耗休眠与唤醒实践总结

在做车载项目时,模块在常供电时需要维系随时可以被唤醒工作的状态,并且静态电流需要在3mA以内,当然在JTT1163标准中要求的是5mA以内。 目标明确了,在模块休眠时需要关闭一切不必要的资源消耗,只保留模块被唤醒的部分功…

K8S中master节点部署Pod处于Pending状态

查询一下pod信息: kubectl get pods -n kubernetes-dashboard根据name查看详细信息: kubectl describe pod dashboard-metrics-scraper-5b59d4bc6b-rxgqb -n kubernetes-dashboard这一句提示: Warning FailedScheduling 7s (x21464 ov…

Java进阶-查找算法

常见的七种查找算法: 1. 基本查找 ​ 也叫做顺序查找 ​ 说明:顺序查找适合于存储结构为数组或者链表。 基本思想:顺序查找也称为线形查找,属于无序查找算法。从数据结构线的一端开始,顺序扫描,依次将遍…

2023年5月北京/南京/西安/深圳DAMA-CDGA/CDGP数据治理认证报名

6月18日DAMA-CDGA/CDGP数据治理认证考试开放报名中! 考试开放地区:北京、上海、广州、深圳、长沙、呼和浩特、杭州、南京、济南、成都、西安。其他地区凑人数中… DAMA-CDGA/CDGP数据治理认证班进行中,报名从速! DAMA认证为数据管…

ARM-处理器模式(二)

文章目录 ARM 处理器模式工作模式模式切换内核寄存器R13_modeR14_modePC 各个模式对应的内核寄存器模式切换代码实现使用 mrs/msr 指令使用 cps 指令 ARM 处理器模式 ARMv7-a 处理器共有 9 种工作模式 工作模式 User:用户模式,非特权模式,大…

如果你想申请国家级高新技术企业

你必须首先满足国家支持的八大高新技术领域: 一、电子信息 二、生物学与新医学 三、航空航天 四、新材料 五、高科技服务业 六、新能源与节能 七。资源与环境 八、先进制造和自动化 如果您满足这八个领域中的一个,您就有资格申请高新技术企业。 …

有了 IP 地址,为什么还要用 MAC 地址?

MAC地址等价于快递包裹上的收件人姓名。 MAC地址更多是用于确认对方信息而存在的。就如同快递跨越几个城市来到你面前,快递员需要和你确认一下收件人是否正确,才会把包裹交给你一样。 IP66在线查IP地址位置:https://www.ip66.net/?utm-sour…

Bean基础配置?实例化方式?生命周期?

文章目录 1 bean基础配置1.1 bean基础配置(id与class) 1 bean基础配置1.1 bean基础配置(id与class)1.2 bean的name属性1.2 bean的name属性步骤1:配置别名步骤2: 根据名称容器中获取bean对象步骤3: 运行程序 1.3 bean作用范围scope配置(单例/非单例)1.3.1 验证IOC容器…