百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

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

ccwgpt 2024-11-02 11:02 32 浏览 0 评论

一、前言

本文章主要会讲解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 (参考上面的代码)
"""

三、总结

本篇文章就到这里了,喜欢的小伙伴可以点赞收藏评论加关注哟,关注我每天给你不同的惊喜。

相关推荐

用Deepseek扩写土木工程毕业论文实操指南

用Deepseek扩写毕业论文实操指南一、前期准备整理现有论文初稿/提纲列清楚论文核心框架(背景、现状、意义、方法、数据、结论等)梳理好关键文献,明确核心技术路线二、Deepseek扩写核心思路...

985学霸亲授,DeepSeek也能绘6大科研图表,5分钟就出图

在实验数据处理中,高效可视化是每个科研人的必修课。传统绘图软件操作复杂、耗时费力,而智能工具DeepSeek的出现彻底改变了这一现状。本文将详解如何用DeepSeek一键生成六大科研常用图表,从思维导...

AI写论文刷屏?大学生正在丢掉的思考力

一、宿舍深夜:当论文变成"Ctrl+C+V"凌晨两点的大学宿舍,小王对着电脑屏幕叹气。本该三天前开始写的近代史论文,此刻还一片空白。他熟练打开某AI写作网站,输入"论五四运动的...

Grok在辅助论文写作上能不能既“聪明”又“可怕”?!

AcademicIdeas-学境思源AI初稿写作随着人工智能技术的飞速发展,论文写作这一学术任务正迎来新的助力。2025年2月18日,美国xAI公司推出了备受瞩目的Grok3模型,其创始人埃隆·...

大四论文沟通场景!音频转文字难题听脑AI来化解

大四学生都知道,写论文时和导师沟通修改意见,简直是“过关斩将”。电话、语音沟通完,想把导师说的修改方向、重点要求记下来,麻烦事儿可不少。手写记不全,用普通录音转文字工具,转完还得自己慢慢找重点,稍不注...

论文写作 | 技术路线图怎么画?(提供经典优秀模板参考)

技术路线图是一种图表或文字说明,用于描述研究目标、方法和实施计划。它展示了研究的整体框架和步骤,有助于读者理解研究的逻辑和进展。在课题及论文中,技术路线图是常见的一部分,甚至是一个类似心脏一样的中枢器...

25年信息系统项目管理师考试第2批论文题目写作建议思路框架

25年信息系统项目管理师考试第2批论文题目写作建议思路框架--马军老师

微信购物应尽快纳入法律框架(微信购物管辖)

符向军近日,甘肃省工商行政管理局发布《2016年上半年信息分析报告》。报告显示,微信网购纠纷迅猛增长,网络购物投诉呈上升趋势。投诉的主要问题有出售的商品质量不过关、消费者通过微信付款后对方不发货、购买...

泛珠三角区域网络媒体与腾讯微信签署《战略合作框架协议》

新海南客户端、南海网7月14日消息(记者任桐)7月14日上午,参加第四届泛珠三角区域合作网络媒体论坛的区域网络媒体负责人及嘉宾一行到腾讯微信总部座谈交流,并签署《战略合作框架协议》(以下简称《框架协...

离线使用、植入微信-看乐心Mambo手环如何打破框架

从2014年开始智能手环就成功进入人们的生活,至今已经演变出数据监测、信息推送、心率监测等诸多五花八门的功能,人们选择智能手环并不指望其能够改变身体健康情况,更多的是通过数据来正视自身运动情况和身体健...

微信私域电商运营策略与框架(微信私域怎么做)

...

华专网络:如何零基础制作一个网站出来?

#如何零基础制作一个网站出来?#你是不是觉得网站建设很复杂,觉得自己是小白,需求不明确、流程搞不懂、怕被外包公司坑……这些问题我都懂!今天华专网络就用大白话给你捋清楚建站的全流程,让你轻松get网站制...

WAIC2024丨明日上午9点,不见不散!共同探讨智能社会与全球治理框架

大咖云集,硕果闪耀WAIC2024世界人工智能大会智能社会论坛将于7月5日9:00-12:00与你相约直播间WAIC2024上海杨浦同济大学哔哩哔哩多平台同步直播探讨智能社会与全球治理框架WAIC...

约基奇:森林狼换来戈贝尔时大家都在嘲笑 他们的阵容框架很不错

直播吧5月4日讯西部季后赛半决赛,掘金将迎战森林狼,约基奇赛前接受采访。约基奇说道:“当蒂姆-康纳利(森林狼总经理、前掘金总经理&曾选中约基奇)做了那笔交易(换来戈贝尔)时,每个人都在嘲笑他...

视频号带货为什么一个流量都没有?顶级分析框架送给你

视频号带货为什么一个流量都没有?遇到问题,一定是步步来分析内容,视频号带货一个流量都没有,用另外一个意思来讲,就可以说是零播放。为什么视频号带货一个流量都没有?跟你说再多,都不如来个分析框架。1、是否...

取消回复欢迎 发表评论: