软件测试学习笔记丨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 + 1
     
    def test_answer():
        assert inc(3) == 5

在pycharm中运行pytest

import pytest
     
    def func(x):
        return x+1
     
    def test_answer():                #使用pytest解释器执行,pytest test_a.py
        assert func(4)==5
     
    class 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方法")          1
     
    def teardown_module():            11
        print("这是teardown_module方法")
     
    def setup_function():            2
        print("setup_function")
     
    def teardown_function():            4
        print("teardown_function")
     
    def test_login():                3
        print("这是一个外部的方法")
     
    class testDemo():                类开始
        def setup_class(self):            5
            print("setup_class")
     
        def setup_method(self):            6
            print("setup_method")
     
        def setup(self):                7
            print("setup")
     
        def teardown_class(self):            10
            print("teardown_class")
     
        def teardown_method(self):            9
            print("teardown_method")
     
        def teardown(self):            8
            print("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 = str
          bignum
          float
          int
          minus
          zero

根据实际情况自行更改

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.mfbz.cn/a/875341.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Hive任务优化参数整理

Hive本身是个基于hdfs的结构化数据管理工具,虽然在后面的发展中允许底层接入其他的数据源,比如第三方数据服务这种基础架构,但是它从立意上来说,它不适合用来做高性能查询引擎,反而在传统离线数据仓库中它有着自身的优…

python 函数 封装

封装 函数的参数是:变量 def 函数(参数):print(参数)if __name__ __main__:函数(参数)函数(参数2)函数的参数是: 字典 import requests# 定义一个字典 data {} 地址 "https://webdriveruniversity.com/" 请求方法 getdata["url"…

科研绘图系列:R语言宏基因组PCoA图(PCoA plot)

介绍 PCoA(主坐标分析,也称为主轴分析)是一种多维统计技术,用于分析和可视化高维数据集,如宏基因组数据。在宏基因组学中,PCoA图用于展示样本之间的相似性和差异性,通常基于样本之间的距离或相似度矩阵。PCoA图说明: 样本间关系:PCoA图通过降维技术将高维数据投影到二…

RK3588开发板TF卡槽连接WIFI模组O9201SB

RK3588平台开发板有TF卡槽,可以做为SDIO WIFI连接接入点,本文以O9201SB WIFI模组接入配置。 一、O9201SB模组放于测试架上,底板具有SDIO接口可插入TF卡卡槽。 O9201SB为2T2R SDIO 13x15mm 支持sdio3.0的wifi6模组,支持DBDC1x1或DB…

数据中台 | 数据资源管理平台介绍

01 产品概述 数据资源的盘查、集成、存储、组织、共享等全方位管理能力,无论对于企业的数字化转型,还是对企业数据资产的开发、运营、交易及入表,都具有极为关键的作用。今天,小兵就来为大家介绍我们自研数据智能平台中的核心产品…

3D云渲染农场为何怎么贵?主要消耗成本介绍

随着对高质量3D动画的需求持续增长,云渲染农场对于旨在以高效速度生产高质量视觉效果的工作室来说变得至关重要。然而,用户经常想知道为什么渲染农场的价格如此之高,理解背后的原因可以帮助艺术家做出更好的选择。 什么是云渲染农场&#xff…

YOLO配合 PYQT做自定义虚拟电子围-自定义绘制多边形虚拟电子围栏

电子围栏标注以及显示 1、目标检测: YOLO可以识别检测物体,这是众所周知的。使用YOLO来做目标检测,并获取坐标信息。 2、电子围栏 比如在监控中,指定一块区域,如果有目标进入,则发出警报,并提…

计算机网络(一) —— 网络基础入门

目录 一,关于网络 二,协议 2.1 协议是什么,有什么用? 2.2 协议标准谁定的? 2.3 协议分层 2.4 OSI 七层模型 2.5 TCP/IP 四层模型 三,网络传输基本流程 3.1 局域网中两台主机通信* 3.2 报文的封装与…

[001-03-007].第07节:Redis中的事务

我的后端学习大纲 我的Redis学习大纲 1、Redis事务是什么: 1.可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化, 按顺序地串行化执行而不会被其他命令插入,不许加塞2.一个队列中,一次性、…

2009-2023年上市公司华证esg评级、评分年度数据(含细分项)

2009-2023年上市公司华证esg评级、评分年度数据(含细分项) 1、时间:2009-2023年 2、来源:整理自wind 3、指标:证券代码、年份、证券简称、评级日期、综合评级、综合得分、E评级、E得分、S评级、S得分、G评级、G得分…

How to see if openAI (node js) createModeration response “flagged“ is true

题意:如何查看 OpenAI (Node.js) createModeration 响应中的 "flagged" 是否为 true 问题背景: Using the OpenAI createModeration feature, I am trying to see if the string gets flagged or not. 使用 OpenAI 的 createModeration 功能…

基于开源WQ装备知识图谱的智能问答优化

基于笔者之前写的博客基础上:https://blog.csdn.net/zhanghan11366/article/details/142139488【基于开源WQ装备知识图谱的智能问答全流程构建】进行优化。 优化一、 解决你提出的多武器、多关系解析问题,并确保每个武器只匹配其对应的关系&#xff0c…

百元内真无线蓝牙耳机推荐有哪些?四大百元性价比品牌公开推荐

在当今这个科技迅速发展的时代,真无线蓝牙耳机以其便携性和自由度成为了许多人日常生活中不可或缺的配件,然而,面对市场上琳琅满目的产品,消费者往往感到眼花缭乱,难以抉择,百元内真无线蓝牙耳机推荐有哪些…

Python | 练习作业 2

为学生登录系统新增搜索功能。 第二天作业的解题思路: # 1.创建一个空列表保存搜索结果 # 2.让用户输入要搜索的内容 # 3.遍历学生信息,检查学生的id name age gender score # 中的属性值 是否跟用户搜索的内容一致 # 4.如果有一致的属性 那么就将该学生…

通过nginx代理转发实现共用80和443端口

目录 项目场景: 问题:怎么实现端口共用? 一、域名解析到nginx服务器 二、创建vhost解析到实际的服务器 三、防火墙的配置 项目场景: 公司自建服务器,有一条专线带有公网IP,如何满足不同的域名解析共用…

春日美食汇:基于SpringBoot的订餐平台

2 系统关键技术 2.1JSP技术 JSP(Java脚本页面)是Sun和许多参与建立的公司所提倡的动态web技术。将Java程序添加到传统的web页面HTML文件()。htm,。Html) [1]。 JSP这种能够独立使用的编程语言可以嵌入在html语言里面运行,正因为JSP参照了许多编程语言的特性&#xf…

RHCE--复习(一)之系统延迟任务及定时任务

系统延迟任务及定时任务 #关闭图形命令(第二次开启的时候)[rootlocalhost ~]# systemctl set-default multi-user.target#windos系统级别类型 0-6个级别#查看级别类型[rootlocalhost ~]# runlevel 一、延迟任务 在系统中我们的维护工作大多数时在服务器…

自选择问题和处理效应模型

这里写目录标题 自选择问题和处理效应模型Tobit 模型假定Heckman过程逆米歇尔比率推导过程逆米希尔比率推导过程自选择问题典型事实分析一定要列出来的关于OLS,Heckman-2sls,Heckman三种模型的估计结果对比Heckman两阶段算逆米希尔比率分解 处理效应模型…

labview禁用8080端口

需求背景 最近电脑上安装了labview全家桶,发现idea的8080端口项目启动报错,一直提示8080端口被占用。最简单的办法就是找到8080端口的服务,然后关闭这个服务。但是我不想这么做,我想把labview的web服务器的端口给修改了。 操作教程 1、cmd查看8080端口 2、windows进程 同…

pgAdmin 4备份数据库失败,解决

pgAdmin4中,必须先设置二进制路径;binary paths pgAdmin4操作路径,File—>Preferences—>Paths—>Binary paths 找到postgreSQL的安装目录,bin目录复制,然后设置在截图标记位置; 再去备份数据库就…