Python接口测试框架选择之pytest+yaml+Allure!

一、为什么选择pytest?
pytest完全兼容python自带的unittest

pytest让单元测试更简单,能很好的管理测试用例。

对于实现接口测试的复杂场景,pytest的fixture、PDB等高阶用法都能实现需求。

入门简单,对于代码基础薄弱的团队人员,也可以用pytest实现较简单的单个接口测试。

社区活跃,遇到问题可以在网上找到解决方法。

pytest实战例子:修改用户信息
场景:测试修改用户昵称是否成功

涉及接口:用户登录接口、用户信息修改接口、用户信息接口。用户信息修改接口和用户信息接口需要上传登录接口下发的token字段

接口处理逻辑分析:

用户登录后拿到token,将token设为全局变量。

上传修改后的用户昵称到用户修改接口

请求用户信息接口,拿到昵称字段,判断是否为修改后的的昵称。

代码展示

import pytest
updata_name = "sunny"
expect_result = updata_name #期待修改后的昵称
class TestUpdataUserInfo:
def setup_class(self):
print("请求登录接口,获取到token")
self.token = "token" #将token设为全局变量,这里暂时用"token"代替接口返回的tokendef teardown_class(self):
# 此方法写请求获取用户信息接口,拿到用户昵称逻辑代码
tokenStr = self.token # 获取到token,用于请求修改用户信息接口
print("请求用户信息接口,拿到昵称")
nickName = "sunny"#假设接口拿到的昵称为"sunny"
assert nickName==expect_result #校验是否为期待的昵称def test_update_userInfo(self):
#此方法写上传修改后的用户昵称到用户修改接口的逻辑
tokenStr = self.token #获取到token,用于请求修改用户信息接口
print("token:"+tokenStr)
print("上传需要修改的昵称")
if __name__ == '__main__':
pytest.main(['-s', 'pytest-demo.py'])
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:822269834【暗号:csdn999】

二、为什么选择yaml?
写法简洁易懂,视觉上也很舒适

yaml支持python,yaml+pytest实现数据分离很简便。

配置有序,支持数组写法,数组中的元素可以是基本数据类型也可以是对象

实战例子:用yaml写测试数据
上文的pytest例子中,测试上传的昵称数据和期待修改后的昵称数据都是写在updataUserInfo.py文件,这种写法不方法管理,现在改为用yaml文件写测试数据。

代码展示

创建yaml文件:updataUserInfo.yaml,将测试数据写入
test:
name: test case1
updateName: "sunny"
result:
expectName: "sunny"

获取到yaml数据如下

{'test': {'name': 'test case1', 'updateName': 'sunny', 'result': {'expectName': 'sunny'}}}

获取到yaml文件里的数据,进行请求和校验

import pytest
import yaml# updata_name = "sunny"
# expect_result = updata_name #期待修改后的昵称
class TestUpdataUserInfo(object):def setup_class(self):
##获取yaml文件里面的数据,
with open("./updataUserInfo.yaml", 'r') as f:
content = yaml.safe_load(f)
print(content)
self.update_name = content['test']['updateName']
self.expect_name = content['test']['result']['expectName']print("请求登录接口,获取到token")
self.token = "token" #将token设为全局变量,这里暂时用"token"代替接口返回的tokendef teardown_class(self):
# 此方法写请求获取用户信息接口,拿到用户昵称逻辑代码
tokenStr = self.token # 获取到token,用于请求修改用户信息接口
print("请求用户信息接口,拿到昵称")
nickName = "sunny"#假设接口拿到的昵称为"sunny"
assert nickName==self.expect_name #校验是否为期待的昵称def test_update_userInfo(self):
#此方法写上传修改后的用户昵称到用户修改接口的逻辑
tokenStr = self.token #获取到token,用于请求修改用户信息接口
print("token:"+tokenStr)
print("需要修改的值为:"+self.update_name)
print("上传需要修改的昵称")if __name__ == '__main__':
pytest.main(['-s', 'pytest-demo.py'])

三、为什么选择Allure?

生成高大上的测试报告,展示测试结果直观明了,利于向领导展示自动化测试成果。

有失败用例截图、测试步骤和测试说明信息。方便测试人员查看测试结果。

Allure测试报告展示

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

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

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

相关文章

Mysql - 常用插入数据的三种方法详解及练习

目录 🥙8.1.1 mysql中常用的三种插入数据的语句 1. insert into - 插入数据 2. replace into - 插入替换数据 3. insert ignore - 如果已存在,忽略当前新数据 🥙8.1.2 以上三种方法的练习及区分 🥙8.1.3 说明 &#x1f959…

高项备考葵花宝典-项目进度管理核心方法加强理解-关键路径法

关键路径法(Critical Path Method,CPM)是一种基于数学计算的项目计划管理方法,是网络图计划方法的一种,属于肯定型的网络图。关键路径法将项目分解成为多个独立的活动并确定每个活动的工期,然后用逻辑关系&…

YOLOv8-Seg改进:UniRepLKNetBlock 助力分割 | UniRepLKNet,通用感知大内核卷积网络, 2023.12

🚀🚀🚀本文改进: UniRepLKNet,通用感知大内核卷积网络,ImageNet-22K预训练,精度 和速度SOTA,ImageNet达到88%, COCO达到56.4 box AP,ADE20K达到55.6 mIoU UniRepLKNetBlock 与C2f进行结合使用 🚀🚀🚀YOLOv8-seg创新专栏:http://t.csdnimg.cn/KLSdv 学姐带…

关于set和map的简单理解

1. 关于搜索 1.1 set和map的引入 Map和set是一种专门用来进行搜索的容器或者数据结构,其搜索的效率与其具体的实例化子类有关。以前常见的搜索方式有: 1. 直接遍历,时间复杂度为O(N),元素如果比较多效率会非常慢 2. 二分查找&…

设计模式详解---抽象工厂模式

继续前言,工厂模式中抽象工厂模式的讲解: 1. 前面的工厂模式有啥问题? 前面的工厂模式有这么个问题:一个产品就给了一个工厂,这样子如果产品变多,系统就会很复杂: 2. 解决方法 我们可以按照手…

DSP280049C初学(4)-FLASH烧录以及部分程序转移至RAM运行

DSP280049C初学(4)-FLASH烧录以及部分程序转移至RAM运行 实现目的:代码在RAM中调试完成后,就需要将其固化下载到FLASH中,但是FLASH中运行所有程序的话会存在计算或程序运行时间过长的问题,故还需要将部分代…

Sublime Text 3 解决中文乱码问题

Sublime Text 3 解决中文乱码问题 一、引言二、主要内容1. 初识 ConvertToUTF8 插件2. 安装 ConvertToUTF8 插件3. 中文乱码问题解决 三、总结 一、引言 在 《Sublime Text 3配置C/C开发环境》 博文中,Huazie 带大家利用 Sublime Text 3 配置了 C/C 开发环境&#…

【infiniband】安装驱动

安装 InfiniBand 驱动包通常包括几个步骤,但是可能会有所不同,取决于使用的操作系统和具体的硬件。以下是在 Linux 系统上安装 InfiniBand 驱动的通用步骤: 1.检查硬件和操作系统兼容性 确保服务器硬件支持 InfiniBand,并查看驱动…

LeetCode Hot100 23.合并K个升序链表

题目: 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 方法:分治,类似于归并 class Solution {public ListNode mergeKLists(ListNode[] lists) {return mer…

arp欺骗原理以及实现方式

我们知道了arp的作用,那么此时我们怎么可以用他来进行攻击呢?在一个局域网中,我们怎么实现呢? 原理: 这样B就可以做到中间人了,可以接受到两个主机的数据了。换句话来说,在同一个局域网内&…

C/C++ 有效的括号判断

题目: 给定一个只包括 (,),{,},[,]的字符串s,判断字符串是否有效。 约束: 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。…

【六】python观察者设计模式

6.1行为型模式简介 观察者设计模式是最简单的行为型模式之一,所以我们先简单了解一下行为型模式 创建型模式的工作原理是基于对象的创建机制的。由于这些模式隔离了对象的创建细 节,所以使得代码能够与要创建的对象的类型相互独立。结构型模式用于设计对象和类的结…

Python GUI教程:轻松构建用户界面

大家好,从网络开发到数据科学,Python被广泛应用于各个领域。本文将探索Python内置的用于创建图形用户界面(GUI)的库:Tkinter。无论是初学者还是经验丰富的开发者,了解如何创建Python GUI都可以增强构建交互…

Axie Infinity 之后,Ronin 的潜力何在?

作者:stellafootprint.network 数据来源:Ronin Dashboard 备受欢迎的 Web3 游戏 Pixels 在 2023 年 10 月下旬从 Polygon 迁移到了专为游戏设计的区块链 Ronin。Pixels 此前作为 Polygon 上活跃用户(钱包数量)最多的 Web3 游戏&…

iPhone手机中备忘录如何改变字体颜色

作为一名iPhone用户,我经常使用手机备忘录来记录生活中的点点滴滴。这样,我的大脑就能从繁琐的记忆任务中解脱出来,专注于更重要的事情。 而且,我有一个特别的习惯,那就是使用不同颜色的字体来区分不同的备忘录。这样…

学习黑马vue

项目分析 项目下载地址:vue-admin-template-master: 学习黑马vue 项目下载后没有环境可参考我的篇文章,算是比较详细:vue安装与配置-CSDN博客 安装这两个插件可格式化代码,vscode这个软件是免费的,官网:…

2023-12-14 二叉树的最大深度和二叉树的最小深度以及完全二叉树的节点个数

二叉树的最大深度和二叉树的最小深度以及完全二叉树的节点个数 104. 二叉树的最大深度 思想:可以使用迭代法或者递归!使用递归更好,帮助理解递归思路!明确递归三部曲–①确定参数以及返回参数 ②递归结束条件 ③单层逻辑是怎么样…

更改Android Studio的.android和.gradle文件夹默认位置

一、首先关闭Android Studio, 二、目标位置新建文件夹 这一步,为了省去麻烦,我并没有直接在我的目标位置新建文件夹,而是把C盘下的.android和.gradle文件夹整个复制过来,和SDK都在同一目录下,感觉这样可以…

MySQL:从MySQL看主从架构高可用性实现

目录 1 主备延迟 1.1 主备延迟 1.2 主备延迟的来源 1.2.1 主备机性能有差距 1.2.2 备库压力大 1.2.3 大事务 1.3 主备延迟的排查思路 3)查看MySQL状态 2 主备切换策略 2.1 可靠性优先策略 2.2 可用性优先策略 2.3 常见切换技术 从进入互联网时代开始&a…

class083 动态规划中用观察优化枚举的技巧-下【算法】

class083 动态规划中用观察优化枚举的技巧-下【算法】 算法讲解083【必备】动态规划中用观察优化枚举的技巧-下 code1 1235. 规划兼职工作 // 规划兼职工作 // 你打算利用空闲时间来做兼职工作赚些零花钱,这里有n份兼职工作 // 每份工作预计从startTime[i]开始、e…