软件测试学习笔记丨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.mzph.cn/bicheng/57339.shtml

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

相关文章

2024互联网大厂营收排名:京东/阿里/华为前三,超多技术岗都在热招!

2024年已经过去一大半,各大互联网大厂的竞争如火如荼,营收都取得了不俗的成绩,京东、阿里、华为分别占领前三! 第四第五名则为华为和拼多多。 根据排行榜里的公司名单,小码特意为大家整理了一批各大厂的招聘岗位。 阿…

【论文#快速算法】Fast Intermode Decision in H.264/AVC Video Coding

目录 摘要1.前言2.帧间模式决策概览2.1 H.264/AVC中的帧间模式决策2.2 发现和动机 3.同质性和平稳性的确定3.1 同质性区域的确定3.2 稳定性区域的决定3.3 整体算法 4.实验结果4.1 IPPP序列的测试4.2 IBBP序列测试 5.结论 《Fast Intermode Decision in H.264/AVC Video Coding》…

基础数据结构——数组(动态数组,二维数组,缓存与局部性原理)

1.概述 在计算机科学中,数组是由一组元素(值或变量)组成的数据结构,每个元素有至少一个索引或键来标识 因为数组内的元素是连续存储的,所以数组中元素的地址,可以通过其索引计算出来,例如&…

生产力工具|vscode for mac的安装python库和使用虚拟环境(一)

一、在vscode中运行python代码(mac或windows) (一)在vscode中安装Python插件 若想在vscode中高效率的编辑Python代码,需要安装Python插件,点击下图中红框内的按钮: 然后在左上角的搜索框中输入…

Vue前端开发2.1 单文件组件

文章目录 一、单文件组件概念二、单文件组件构成1. 模板(Template)2. 样式(Style)3. 逻辑(Script) 三、单文件组件演示1. 创建Vue项目2. 启动Vue项目3. 用VS Code打开项目4. 清空样式文件代码5. 创建欢迎组…

【redis】热点key问题

【redis】热点key问题 【一】什么是热点key问题【二】什么样的key被称为热key【三】热点Key问题的危害【四】如何监控发现热点key【五】热点Key的解决方案【1】使用二级缓存【2】将热key分散到不同的服务器中【3】热key拆分【4】将核心/非核心业务做Redis的隔离 【六】业界已有…

Nature 正刊丨细菌免疫蛋白直接感知两种不同的噬菌体蛋白

01摘要 真核先天免疫系统使用模式识别受体通过检测病原体相关的分子模式来感知感染,然后触发免疫反应。细菌也进化出了类似的免疫蛋白,可以感知其病毒捕食者的某些成分,即噬菌体1,2,3,4,5,6。尽管不同的免疫蛋白可以识别不同的噬菌体编码的触…

log4j2.xml

log4j2.xml 1、log4j2.xml使用2、日志器的流程解析2.1、几个重要的类2.2、整体流程图 3、部分源码3.1、通过简单例子看源码3.2、log4j2.xml配置指导 如侵权&#xff0c;请联系&#xff0c;无心侵权&#xff5e; 如有错误&#xff0c;也请指正。 1、log4j2.xml使用 <?xml v…

Anaconda虚拟环境安装cuda和pytorch

首先电脑上要有Anaconda&#xff0c;使用conda创建一个虚拟环境,并激活 conda create yolov8 conda activate yolov8winR输入cmd&#xff0c;在命令窗口输入 NVIDIA-smi可以查看到自己电脑支持的cuda环境&#xff0c;如下图 再打开torch的官网 pytorch官网 查看目前支持的版…

目标检测——Cascade R-CNN算法解读

论文&#xff1a; Cascade R-CNN: Delving into High Quality Object Detection (2017.12.3) 链接&#xff1a;https://arxiv.org/abs/1712.00726 Cascade R-CNN: High Quality Object Detection and Instance Segmentation (2019.6.24) 链接&#xff1a;https://arxiv.org/abs…

Z 字形变换(6)

这道题之前一直不会做&#xff0c;明白他是什么意思&#xff0c;但是找不到方法或者方法过于繁琐 方法1&#xff1a; 这是我在力扣评论区看到的方法&#xff0c;太精彩了。 虽然我实现起来效率并不高&#xff0c;可能是我代码的问题&#xff0c;但是他的思路很巧妙。 字符串的…

Spring--1

spring是一个轻量级的&#xff0c;采用IOC与AOP编程思想的java后端开发框架&#xff0c;简化了企业级的应用开发。 Spring体系 数据访问层&#xff0c;Web层&#xff0c;配置中心&#xff0c;测试区 IOC 控制反转&#xff0c;将创建对象的控制权交由Spring框架&#xff0c;需…

音频分割:长语音音频 分割为 短语音音频 - python 实现

在做语音任务时&#xff0c;有是会用到的语音音频是长音频&#xff0c;这就需要我们将长音频分割为短音频。 该示例将声音的音量和静默时间结合作为语音的分割条件。 使用音量和静默时间结合的分割条件&#xff0c;能够比较好的进行自然断句&#xff0c;不会话语没有说完就切断…

Spring声明式事务管理:深入探索XML配置方式

前言 Spring的事务管理&#xff0c;无论是基于xml还是注解实现&#xff0c;本质上还是实现数据库的事务管理机制&#xff0c;因此要注意发送SQL的连接是否为同一个&#xff0c;这是实现声明式事务的关键。 以下案例和实现基于SSM整合框架完成&#xff0c;不知道如何整合SSM&…

【K8S系列】Kubernetes Pod 状态详细介绍及异常状态解决方案

在 Kubernetes 中&#xff0c;Pod 是最小的可调度单元&#xff0c;负责运行一个或多个容器。Pod 的状态能够反映其生命周期中的不同阶段&#xff0c;帮助用户了解当前的运行状况。本文将详细介绍 Kubernetes Pod 的各种状态及其可能的异常状态解决方案。 一、Pod 状态概览 Po…

查缺补漏----数据结构树高总结

① 对于平衡二叉树而言&#xff0c;树高的规律&#xff1a; 高度为h的平衡二叉树的含有的最少结点数&#xff08;所有非叶节点的平衡因子均为1&#xff09;&#xff1a; n01&#xff0c;n11&#xff0c;n22 含有的最多结点数&#xff1a; (高度为h的满二叉树含有的结点数) ②…

Flutter在 iOS 中实现无弹窗获取剪切板内容

前言 在最新的项目需求中&#xff0c;我们需要在获取剪切板内容时避免弹出授权提示。这一功能是基于竞品的实现&#xff0c;旨在优化用户体验&#xff0c;特别是在推广获取跳转链接的场景下非常有用。 解决方案 通过查阅资料&#xff0c;我们发现对于 iOS 16 及以上的系统&a…

Fusion创建一个简单的api脚本文件

我的Fusion版本&#xff1a;Fusion 2.0.20476 x86_64 脚本模块在实用程序->附加模型->脚本和附加模块&#xff0c;快捷键为shifts 里面有一些演示脚本&#xff0c;可以直接使用 也可以自己创建一个新的脚本 创建的脚本在此处—— 选择脚本文件&#xff0c;点击编辑&a…

Unity Mirror NetworkManager初识

文章目录 Network Manager网络管理器什么是网络管理器&#xff1f;通过Transports进行定制化网络连接管理自定义连接地址和端口号Game State Management游戏状态管理Network Manager HUD玩家预制体及其生成控制Spawn Prefabs其他预制体注册Scene Management场景管理 Network Ma…

在Windows系统中,cmd 查看 MongoDB 相关信息

MongoDB是一种流行的NoSQL数据库&#xff0c;广泛应用于各种现代应用程序中。 1 查看MongoDB的版本号 要查看MongoDB的版本号&#xff0c;可以使用mongo命令连接到MongoDB&#xff0c;然后执行db.version()。 mongo连接到数据库后&#xff0c;执行以下命令&#xff0c;输出M…