软件测试学习笔记丨Pytest的使用

本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/22158

1. 简介

  • pytest是一个成熟的全功能python测试框架
  • 测试用例的skip和xfail,自动失败重试等处理
  • 能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试,接口自动化测试
  • pytest有很多第三方插件,并且可以自定义扩展,如pytest-allure(完美html测试报告生成)等

2. 测试文件:

  • test_*py *_test.py

用例识别

  • 测试方法都要以test开头
  • 测试类中不要添加__init__方法
  • Test*类包含的所有test_*的方法 (测试类不能带有_init_方法)
  • 不在class中的所有test_*方法

安装:

pip install pytest

示例:

def inc(x):return x + 1def test_answer():assert inc(3) == 5

在pycharm中运行pytest

import pytestdef func(x):return x+1def test_answer():                #使用pytest解释器执行,pytest test_a.pyassert func(4)==5class TestDemo:         #测试类def test_a(self):       #测试方法,以test开头print('a')def test_b(self):print('b')def c(self):            #没有以test开头,虽然在测试类中,但不会执行print('c')if __name__ == '__main__':            #使用python解释器运行,入口函数pytest.main(['test_a.py::TestDemo','-v'])       #使用python运行的话,参数要在列表里增加#指定文件名::方法名调用,-v显示详细日志

pytest的框架结构

# 模块级:模块始末,全局(优先级最高)    (setup_module/teardown_module)# 函数级:只对函数用例生效(不在类中)    (setup_function/teardown_function)# 类级:只在类中前后运行一次        (setup_class/teardown_class)# 方法级:开始于方法的始末 ( 在类中 )    (setup_method/teardown_method)# 类里的运行在调用方法的前后  (setup/teardown)import pytest                执行步骤def setup_module():print("这是一个setup_module方法")          1def teardown_module():            11print("这是teardown_module方法")def setup_function():            2print("setup_function")def teardown_function():            4print("teardown_function")def test_login():                3print("这是一个外部的方法")class testDemo():                类开始def setup_class(self):            5print("setup_class")def setup_method(self):            6print("setup_method")def setup(self):                7print("setup")def teardown_class(self):            10print("teardown_class")def teardown_method(self):            9print("teardown_method")def teardown(self):            8print("teardown")
  • setup代表在每一个测试函数前执行
  • teardown代表在每一个测试函数后执行

3. 参数化

  • mark是pytest内置的标签,可以处理一些特殊的测试用例
#pytest参数化,通过参数化的方法,生成多条测试用例import pytest# 1.参数化的名字,要与方法中的参数名一一对应# 2. 如果传递多个参数的话,要放在列表中,列表中可以嵌套列表/元组# 3. 可以通过ids参数设定测试用例名称,而且ids设置的个数要与传递数据个数一致@pytest.mark.parametrize("test_input,expected",[("3+5",8),("6+6",12),("2+3",5)],ids=["num1","num2",'num3'])def test_mark(test_input,expected):assert eval(test_input) == expected

4. 标记测试用例:对于只执行某些符合要求的测试用例的场景中使用

实现:在测试用例方法上加@pytest.mark.标签名

执行:-m 执行自定义标记的相关用例

  • pytest -s test_mark.py -m apptest
  • pytest -s test_mark.py -m=webtest
  • pytest -s test_mark.py -m “not ios” #使用逻辑运算符的情况

注意:在执行测试用例的时候,会抛出警告,主要是因为自定义的标签名并没有被pytest识别导致的,可以创建一个名为pytest.ini的文件,在里面写入如下格式解决:

[pytest]
markers = strbignumfloatintminuszero

根据实际情况自行更改

5. 跳过,预期失败用例的设置

  • skip - 始终跳过该测试用例
  • skipif - 遇到特定情况跳过该测试用例
  • xfail - 遇到特定情况,产生一个期望失败输出

skip应用场景

  • 调试时不想运行某个测试用例
  • 标记无法中某些平台运行的测试功能
  • 在某些版本中执行,其他版本跳过

方法1:添加装饰器

@pytest.mark.skip
@pytest.mark.skipif

a = True@pytest.mark.skipif(a,reason="跳过")def test_a():print(a)#skipif第一个参数是表达式,满足这个表达式的测试用例不会执行,后面必须指定原因reason(字符串)。

xfail

与skip类似,预期结果为fail,标记用例为fail。

  • 用法:添加装饰器@pytest.mark.xfail
def test_xfail():print("开始测试")# 代码内加入跳过,下面的代码不会被执行pytest.xfail(reason="跳过测试用例")print('执行测试用例')assert 1==1

注意:加了xfail装饰器的测试用例还是会执行,但是不会标红,会当作预期失败的用例执行

6. 命令行方式运行多条测试用例

  • 执行包下所有的用例:pytest/py.test [包名]
  • 执行单独一个pytest模块:pytest 文件名.py
  • 运行某个模块里面的某个类:pytest 文件名::类名
  • 运行某个模块里某个类的方法:pytest 文件名.py::类名::方法名

常用命令行参数:

-v  打印详细日志(一般vs一起用)-s 打印输出日志-x 用例一旦失败(fail/error)就立刻停止执行--maxfail=num 失败用例达到峰值立刻停止-m 标记测试用例-k 执行包含某个关键字的测试用例-collect-only (测试平台,pytest自动导入功能)--lf    只重新执行上一次故障的测试用例,如果上一次没有失败的用例,将会执行所有测试用例--ff    先运行失败的测试用例,再运行其他的用例

pytest的异常处理方法:pytest.raise()

  • 可以捕获特定的异常
  • 获取捕获的异常细节(异常类型,异常信息)
  • 发生异常,后面的代码将不会执行

方法的第一个参数是捕获的预期异常,如果指定多个异常,可以用元组包起来。

在这里插入图片描述

推荐学习

【霍格沃兹测试开发】7天软件测试快速入门带你从零基础/转行/小白/就业/测试用例设计实战

【霍格沃兹测试开发】最新版!Web 自动化测试从入门到精通/ 电子商务产品实战/Selenium (上集)

【霍格沃兹测试开发】最新版!Web 自动化测试从入门到精通/ 电子商务产品实战/Selenium (下集)

【霍格沃兹测试开发】明星讲师精心打造最新Python 教程软件测试开发从业者必学(上集)

【霍格沃兹测试开发】明星讲师精心打造最新Python 教程软件测试开发从业者必学(下集)

【霍格沃兹测试开发】精品课合集/ 自动化测试/ 性能测试/ 精准测试/ 测试左移/ 测试右移/ 人工智能测试

【霍格沃兹测试开发】腾讯/ 百度/ 阿里/ 字节测试专家技术沙龙分享合集/ 精准化测试/ 流量回放/Diff

【霍格沃兹测试开发】Pytest 用例结构/ 编写规范 / 免费分享

【霍格沃兹测试开发】JMeter 实时性能监控平台/ 数据分析展示系统Grafana/Docker 安装

【霍格沃兹测试开发】接口自动化测试的场景有哪些?为什么要做接口自动化测试?如何一键生成测试报告?

【霍格沃兹测试开发】面试技巧指导/ 测试开发能力评级/1V1 模拟面试实战/ 冲刺年薪百万!

【霍格沃兹测试开发】腾讯软件测试能力评级标准/ 要评级表格的联系我

【霍格沃兹测试开发】Pytest 与Allure2 一键生成测试报告/ 测试用例断言/ 数据驱动/ 参数化

【霍格沃兹测试开发】App 功能测试实战快速入门/adb 常用命令/adb 压力测试

【霍格沃兹测试开发】阿里/ 百度/ 腾讯/ 滴滴/ 字节/ 一线大厂面试真题讲解,卷完拿高薪Offer !

【霍格沃兹测试开发】App自动化测试零基础快速入门/Appium/自动化用例录制/参数配置

【霍格沃兹测试开发】如何用Postman 做接口测试,从入门到实战/ 接口抓包(最新最全教程)

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

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

相关文章

HTML的块级元素与行内元素

在HTML中,元素可以分为两大类:块级元素(block-level elements)和行内元素(inline elements)。这两种类型的元素在网页布局和呈现中扮演着不同的角色。 块级元素(Block-level Elements&#xff…

CMU 10423 Generative AI:HW1(编程部分:在GPT-2模型中实现RoPE、GQA)

完整代码和PDF笔记:https://github.com/YM2025/CMU_10423_2024S 文章目录 1 概述Rotary Positional Embeddings (RoPE)Grouped Query Attention (GQA)实验任务 2 项目文件1. requirements.txt2. input.txt3. chargpt.py4. mingpt/a. model.pyb. trainer.pyc. utils.…

毕业论文选题难?5招帮你轻松搞定选题!

AIPaperGPT,论文写作神器~ https://www.aipapergpt.com/ 你是不是已经为毕业论文的选题愁得头发都要掉光了?每次打开文档,都觉得什么都想写,又好像什么都写不了。选题看起来很简单,但真正开始动手的时候,…

深入探索系统架构设计

目录 前言 软件的体系结构 软件架构定义 软件架构设计与生命周期 1、需求分析阶段 2、设计阶段 3、实现阶段 4、构件组装阶段 5、部署阶段 6、后开发阶段 软件架构的重要性 1、架构设计能够满足系统的品质 2、架构设计使受益人达成一致的目标 3、架构设计能够支持…

UDS 诊断 - RequestTransferExit(请求传输终止)(0x37)服务

UDS 诊断服务系列文章目录 诊断和通信管理功能单元 UDS 诊断 - DiagnosticSessionControl(诊断会话控制)(0x10)服务 UDS 诊断 - ECUReset(ECU重置)(0x11)服务 UDS 诊断 - SecurityA…

【北京迅为】《STM32MP157开发板使用手册》- 第二十六章Cortex-M4 GPIO_蜂鸣器实验

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器,既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构,主频650M、1G内存、8G存储,核心板采用工业级板对板连接器,高可靠,牢固耐…

matlab 基于选权迭代法的空间平面拟合

目录 一、算法原理1、参数平差2、选权迭代法3、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的抄袭狗。 一、算法原理 1、参数平差 由空间几何学知,空间平面方程可以表述为: A x…

【C++】——string类的模拟实现

目录 一、string模拟实现 1.1构造析构 1.2迭代器 1.3修改 1.4查找 1.5substr 深浅拷贝的区别 1.6比较函数与流插入流提取 二、string类的拷贝 2.1浅拷贝与深拷贝 2.2传统版与现代版区别 2.3写时拷贝(了解) 三、vs和g下string结构的说明 3.1v…

零信任沙箱让源代码防泄漏“如虎添翼”

"数据泄露事件频发,给企业带来了巨大的经济损失和声誉损害。SDC沙盒,一款基于零信任模型构建的数据防泄密解决方案,正成为企业数据安全的新防线。 🔐 零信任模型的核心:SDC沙盒遵循“永不信任,始终验…

Python爬虫案例七:抓取南京公交信息数据并将其保存成excel多表形式

测试链接: https://nanjing.8684.cn/line4 思路:先抓取某个类型下的某一条线路所有数据,然后实现批量,,列举出三个类型代表既可 源码: from lxml import etree from xlutils.copy import copy import requests, os, xlrd, xlwtd…

串口输出时:英文正常输出、中文乱码输出

一、问题:英文正常输出,英文乱码输出 二、解决方法 1、查看自己使用的串口助手的编码格式 2、查看自己使用输出的文件编码格式 以记事本的格式查看,原则上这两种应该保持相同,如果不相同,就需要把这个文件去另保存一…

UE5 阴影通道

Shadow Pass Switch节点中 Default代表模型遮罩的效果 Shadow代表阴影的生成遮罩效果

Android Studio报错中文乱码

现象: 解决办法: 按两下Shift,查找Edit Custom VM Options并确认; 没有studio64.exe.vmoptions的话会弹窗,创建一个即可;原本存在的话,在最下面添加 -Dfile.encodingUTF-83. Sync Gradle 重…

开源项目chartDB体验

github地址 :https://github.com/chartdb/chartdb 在线网站体验:https://chartdb.io/ 体验后发现 chartDB的作用是可视化各个表格之间的关系,方便数据库设计者操作并且接上openai的接口生成各个数据库语言的代码;但它没法导入实际…

人工智能在鼻咽癌诊断和治疗中的应用进展、当前挑战和未来前景|文献精析·24-09-13

小罗碎碎念 这篇文章综述了人工智能在鼻咽癌诊断和治疗中的应用进展、当前挑战和未来前景。 角色姓名单位名称(中文)第一作者杨四川大学华西医院肿瘤中心生物治疗科,生物治疗国家重点实验室通讯作者陈四川大学华西医院血管外科,普…

通过TikTok创新视频广告并提高ROAS

通过使用TikTok视频购物广告,Refurbed在五个国家的广告支出回报率(ROAS)提升了5.8%。 目录 总结营销策略是什么?取得了什么成果?为什么有效?获取更多类似的策略 总结 公司: Refurbed。目标&…

Matlab对状态机建模的方法

【 线性代数 状态机 】良好的控制系统设计 (根据现有的情况总结出状态转移方程) 状态组件在设计时需要考虑的内容 AI 的逻辑 可以提供一个思路 python 库调用的路径,必须是完整的路径 python 解释器的入口

【Leetcode算法面试题】-1. 两数之和

文章目录 算法练习题目思路参考答案算法1算法2算法3 算法练习 面试经常会遇到算法题目,今天开启算法专栏,常用算法解析 题目 ** 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数&…

Metasploit 渗透测试之Metasploit快速入门

简介 Metasploit 是目前世界上领先的渗透测试工具,也是信息安全与渗透测试领域最大的开源项目之一。它彻底改变了我们执行安全测试的方式。Metasploit之所以流行,是因为它可以执行广泛的安全测试任务,从而简化渗透测试的工作。Metasploit 适…

查看TCP/UDP网络连接通信情况

绪论​ “宿命论是那些缺乏意志力的弱者的借口。 ——罗曼.罗兰” 话不多说安全带系好,发车啦(建议电脑观看)。 主要使用: nestat -nltp n 拒绝显示别名,能显示数字的全部转化成数字l 仅列出有在 Listen (…