接口自动化测试实战之pytest框架+allure讲解

news2024/12/23 23:38:11

一、前言

本文章主要会讲解Python中pytest框架的讲解,介绍什么是pytest、为何要测试、为何使用以及参考和扩展等等,话不多说,咱们直接进入主题哟。

二、pytest讲解

2.1 什么是pytest?

pytest是一款单元测试框架,在编程过程中,单元主要指的是代码中最小的组成部分,例如函数或类,在面向对象中,最小的单元就是类下面的方法。

当我们编写好一段程序后,会对这些函数和方法进行检测,是否出现程序错误,这种对程序的函数和方法进行测试的过程,就叫做单元测试。

pytest的测试框架类似于unittest框架相似,但pytest的测试框架比unittest更加简洁、高效。
 

2.2 为什么使用pytest?

pytest与unittest类似,但pytest还是有很多的优势:

"""
pytest优势
1、pytest能够兼容unittest,如果之前用例是unittest编写的,可以使用pytest直接进行使用
2、pytest的断言直接使用assert断言,并非使用self.asert等语法语句以及其他各式各样的断言方式
3、pytest对于失败的测试用例会提供非常详细的错误信息
4、pytest可以自动发现并收集测试用例
5、pytest有非常灵活的fixture管理
6、pytest有mark标记机制,可以标记某些用例为冒烟测试用例
7、pytest提供了非常丰富的插件系统
8、pytest不需要写类,unittest是需要写类并继承的,这里pytest更加简洁
"""

 

2.3 使用pytest

安装pytest库后设置默认的运行器为pytest:

def test_add():

assert True

框架意味着规则,pytest用例规则如下:

"""
pytest用例规则:
1、模块名称 test开头.py结尾,或者*_test.py
2、测试用例函数的名称 def test_XXX()
3、可以不定义测试类
"""
 
"""
pytest的运行方式:
1、pycharm当中的运行图标,pytest开头开头运行,如不是pytest可以在setting中查找pytest并设置成pytest运行器
2、pytest命令行:要进入项目的根目录运行pytest命令,pytest命令会自动收集运行指令时候,所有子目录下符合要求的测试用例,例如test_login.py,模块且以test开头,函数test开头,类也是如此
3、通过python包或者python模块运行
"""

 

2.4 pytest的运行方式

pytest有三种运行方式:

"""
方式一:直接通过代码左侧的三角进行运行(pycharm)
"""
 
"""
方式二:通过命令行运行 -- pytest -- html=output.html
"""
 
"""
方式三:通过python运行
"""
from datetime import datetime
 
import pytest
 
date_str = datetime.now().strftime("%Y-%m-%d-%H-%M-%S")
# 测试报告的名称
report_name = date_str + ".html"
 
pytest.main([f"--html={report}"])

 

2.5 pytest高级特性

2.5.1 pytest用例筛选

我们都做过冒烟测试,也知道冒烟测试用例,pytest支持用例筛选,你可以在想要的用例上进行标记,以此来表示这是一个冒烟测试用例:

import pytest
 
# 格式为:@pytest.mark.自定义标记名
@pytest.mark.smoke
def test_True()
	assert True
 
@pytest.mark.smoke
def test_False()
	assert False

我们可以给一个用例或多个用例附上单独的标记,但这样是无法运行的,我们需要先注册标记,新建一个pytest.ini的配置文件并进行配置:

[pytest]
markers = 
	smoke

注册完成后我们需要运行,在命令行输入pytest - m "smoke",这样就可以运行刚刚标记过的测试用例了,值得一提的是,如果这个标记是在函数上,那么就代表着函数属于标记的筛选用例,如果标记在类上,那么整个类下的所有函数都属于筛选用例,如例子所示,即全部为冒烟测试用例

"""
用例筛选流程:
1、需要在pytest.ini中注册标记的名称
2、在测试用例函数或者测试用例类上面加上@pytest.mark.标记名
3、运行指定标签 pytest -m "标记名"
"""

如果运行多个标记那么可以继续在函数或类上再次进行新的标记,例如login标记,意味着我只想要执行登录模块的冒烟测试用例里,那么再次进行注册并运行即可,运行使用pytest -m "smoke and login",如果是冒烟测试用例和登录模块用例满足一个即可,那么就可以使用or即可,两者选其一,满足即可运行。

2.5.2 pytest实现数据驱动

pytest实现数据驱动可以使用unittest进行实现,也可以使用自己的ddt:

注意:pytest参数化与unittest的参数化只能有一个,不能够共同使用
 

"""
pytest使用unittest进行数据驱动的实现
"""
import unittest
imoort pytest
from unittesetreport import ddt, list_data
 
@pytest.mark.smoke
@unittestreport.ddt
class TestAddwithUnittest(unittest.TestCase):
	
	@unittestreport.list_data(["hello", "world", "mengxiaotian"])
	def test_add_three(self, case_info):
		aseert "" in ""
	
	def test_add_four(self):
		assert "" in ""
 
 
"""
使用自己的pytest实现
"""
@pytest.mark.smoke
@pytest.mark.login
@pytest.mark.parametrize("case_info", ["hello", "world"])
def test_add(case_info):
	assert True

​2.5.3 pytest夹具

pytest夹具会与unittest有一些不同,详见代码:

def setup_function():
    """前置条件,每个测试用例之前"""
    print("hello, world!")
 
def teardown_function():
    """后置条件,每个测试用例之后"""
 
def test_hello():
    assert 520 == 1314
 
def test_world():
    assert "" in ""
import pytest
 
# 声明这是一个测试夹具
@pytest.fixture()
def connet_to_db():
    print("前置条件:正在连接数据库...")
    yield # 在yield前的都是前置
# 清理动作
    print("后置清理,断开数据库连接...")
 
@pytest.mark.usefixtures("connect_to_db")
def test_mengxiaotian_love():
    assert 1314 == 1314

2.6 allure下载

万能百度搜索allure进入到GitHub下载。 找到Download的字眼,并在其中点击releases

 

2.7 pytest插件:allure-pytest安装与目录生成

通过pip install allure-pytest进行安装

生成报告在命令行中输入:pytest --alluredir=目录

查看报告使用:allure serve 目录

allure可以翻译成中文,具体这里不过多阐述如何查看报告数据,有兴趣的同学可以自行了解

2.8 unittest转pytest形式

如果以代码形式呈现会比较复杂,笔者直接使用备注进行说明,大家如果之前的项目是unittest的项目那么可以根据本次说明转换成pytest:

"""
unittest转pytest:
1、数据驱动的ddt换成pytest的标记形式
2、unittest的testcase继承需要移除
3、self.asserEqual 需要重新封装
4、setUpclass 改成 pytest setup_class (参考上面的代码)
"""

 三、总结

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

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

 

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

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

相关文章

尚硅谷Docker实战教程-笔记10【高级篇,Docker微服务实战】

尚硅谷大数据技术-教程-学习路线-笔记汇总表【课程资料下载】视频地址:尚硅谷Docker实战教程(docker教程天花板)_哔哩哔哩_bilibili 尚硅谷Docker实战教程-笔记01【基础篇,Docker理念简介、官网介绍、平台入门图解、平台架构图解】…

浅析住宅小区电动车充电桩的电气设计与平台管理系统

安科瑞电气股份有限公司 上海嘉定201801 摘要:根据目前对于新能源汽车发展规划及政策,以及国内外充电设施的主要类型和技术参数。论述地下车库电动汽车充电桩的供配电系统的设计及设计过程中需要注意的一些问题。 关键词:充电桩&#xff1b…

力扣题库刷题笔记36--有效的数独

1、题目如下: 2、个人Python代码实现如下: 3、个人Python代码思路: 先放一个AI解释的思路: 个人理解,本题思路其实很简单,判断每一行、每一列、每一个3*3的子数独是否存在重复数字,如果存在则返…

不用转化器把pdf转化成Excel,分享两个实用方法!

将PDF文件转换为Excel格式通常是进行数据提取和分析的重要步骤。尽管市面上有许多PDF转Excel的工具,但本文将介绍两种无需使用转换器的实用方法,分别是复制粘贴法和使用记灵在线工具。这些方法简单易行,帮助您快速将PDF中的数据提取到Excel表…

第21章:索引优化与查询优化

一、索引优化与查询优化 1.什么情况下要进行数据库调优 ①索引失效,没有充分利用到索引---索引建立 ②关联查询太多join---SQL优化 ③服务器调优和各个参数的设置---调整my.cnf ④数据过多---分库分表 2.SQL优化的技术 ①物理查询优化:通过索引和…

图论算法:DFS求有向图或无向图两点间所有路径及Dijkstra算法求最短路径

1、目的 1)根据有向图获取指定起终点的所有路径; 2)直接求解两点间最短路径。 2、示例效果 2.1 原始数据 路线起终点整理如下: // 共计12个顶点,19条边。 (起点,终点,1)最后的1代表起点终点是连通的。 起点,终点,1:2 4 1 起点,终点,1:9 10 1 起点,终点,1:…

Java面向对象程序开发——网络编程入门知识

​ 文章目录 软件结构网络通信协议协议分类网络编程三要素TCP通信程序概述Socket类构造方法成员方法 ServerSocket类构造方法成员方法 简单的TCP网络程序客户端向服务器发送数据服务器端 文件上传服务端实现:客户端实现: BIO 、 NIO 与 AIO 软件结构 C…

Unity3D如何在一个项目建多个场景

推荐:将 NSDT场景编辑器 加入你的3D工具链 3D工具集: NSDT简石数字孪生 设置多个场景 您可以添加多个场景、编辑查看场景的方式以及更改场景设置。 要创建新场景,请参阅创建、加载和保存场景。 添加场景 有两种方法可以向项目添加新场景&…

react—路由

1. 注册路由 路由的注册和vue框架中类似,注册过后需要在地址栏输入你想要进去的页面。 // 引入 import { createRoot } from "react-dom/client"; import { createBrowserRouter,RouterProvider,Route,Link }from "react-router-dom"; // 引入…

springboot分组校验

1、分组校验场景 主要2个场景,场景1:多个接口使用相同的入参,不同接口需要校验的内容不同。场景2:针对同一个接口,某个值(一般是类型)的不同会影响其他值的内容,此时需要根据某个值的…

【Linux】设置 命令 --help 帮助文件为中文

🍁博主简介 🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入! 文章目录 前言设置系统默认语言为中文安装man-…

【C#】并行编程实战:使用 PLINQ(2)

PLINQ 是语言集成查询(Language Integrate Query , LINQ)的并行实现(P 表示并行)。本章将继续介绍其编程的各个方面以及与之相关的一些优缺点。 本文的主要内容为 PLINQ 中的合并选项以及抛出和处理异常。 本教程对应学习工程&…

Xshell连接不上虚拟机的解决办法(给他最后一次机会)

VM还原默认设置 如果你之前的操作都没问题的话Xshell还是连接不上我们的虚拟机,可以试试这个方法 点VM中的 编辑–>虚拟网络编辑器–还原默认设置**(这个方法也特别有效)** 注意还原好以后我们主要看一下VM8的 这是没还原之前的NAT设置 没还原之前的DHCP设置…

如何在Windows 10中创建引导到UEFI固件设置的快捷方式

大多数计算机都有一个特定的键,当计算机启动时按下该键,用户可以访问UEFI(固件)设置。然而,我们经常在错过给定的时间段时按键太晚,因为笔记本电脑默认情况下只需等待几秒钟就可以启动到 Windows。 另一个引导到 UEFI 设置的选项是重新启动到高级启动选项,然后从那里开…

centos6.X防火墙110.42.2

防火墙机制介绍122.228.84 Centos5.X 6.X的防火墙机制为什么称为iptables呢? 因为这个防火墙软件里面有多个表格(table),每个表格都定义自己的默认策略与规则,且每个表用途都不同。 Centos5.X 6.X 主要表格(table&am…

第三课:设计小技巧

前期准备 下载一份官方规范,将官方规范文件置入到 Figma 中,若是使用网页版,建议打开两个 Figma 网页,在两个网页中分别打开规范文档和需要设计的项目,这样便可以通过 Tab 切换,快速将官方文档中的文件复…

学习c++ Part03

文章目录 前言1.动态空间申请1.1 静态空间申请1.2 动态分配 2.字符串处理函数3.结构体3.1 结构体的浅拷贝3.2 结构体的深拷贝3.3 结构体变量在堆区 结构体指针成员也指向堆区(先释放成员,再释放结构体)3.4 结构体的对齐规则3.5 结构体的位域&…

跟我一起从零开始学python(三)多线程/多进程/协程

前言 回顾之前讲了python语法编程 ,关于从零入门python的第一遍,编程语法必修内容,比如python3基础入门,列表与元组,字符串,字典,条件丶循环和其他语句丶函数丶面向对象丶异常和文件处理和网络…

oracle,update更新时,条件没走索引

update更新时没走索引, 查询索引是有效的: 没走索引的原因是条件字段的字段类型不一致, 一个是varchar2, 另一个是 nvarchar2 。 要走索引需要字段类型一致,可以利用to_char()将 nvarchar2转为 varchar2

VS2019+Qt5.15 在线显示百度地图

1.Qt5.15编译程序需要选择mscv2019 Release版本 2.需要到百度地图开发平台注册并获取到开发者key 3.显示地图是JS与Qt的交互过程&#xff0c;显示地图的html文件&#xff1a; <!DOCTYPE html> <html><head> <meta name"viewport" content&q…