软件测试/测试开发丨Pytest测试框架学习笔记

news2025/1/8 13:47:38

Pytest 参数化用例

测试登录场景

  • 测试登录成功,登录失败(账号错误,密码错误)*
  • 创建多种账号: 中⽂文账号,英⽂文账号*
    普通测试用例方法
  • Copy 多份代码 or 读⼊入参数?*
  • 一次性执⾏多个输⼊入参数*
def test_param_login_ok():
    # 登录成功
    username = "right"
    password = "right"
    login(username,password)

def test_param_login_fail():
    # 登录失败
    username = "wrong"
    password = "wrong"
    login(username,password)

 参数化实现方案

  • pytest 参数化实现方法
  • 装饰器:@pytest.mark.parametrize
@pytest.mark.parametrize("username,password",[["right","right"], ["wrong","wrong"]])
def test_param(username,password):
    login(username,password)

Pytest 设置跳过、预期失败

Mark:跳过(Skip)及预期失败(xFail)

  • skip - 始终跳过该测试用例

  • 解决 1:添加装饰器

    • @pytest.mark.skip
    • @pytest.mark.skipif
  • 解决 2:代码中添加跳过代码

    • pytest.skip(reason)
  • skipif - 遇到特定情况跳过该测试用例

  • xfail - 遇到特定情况,产生一个“期望失败”输出
    添加装饰器@pytest.mark.xfail

pytest命令行常用参数

—help
-x 用例一旦失败(fail/error),就立刻停止执行
–maxfail=num 用例达到
-m 标记用例
-k 执行包含某个关键字的测试用例
-v 打印详细日志
-s 打印输出日志(一般-vs一块儿使用)
—collect-only(测试平台,pytest 自动导入功能 )*

Python 代码执行 pytest

  • 使用 main 函数
if __name__ == '__main__':
    # 1、运行当前目录下所有符合规则的用例,包括子目录(test_*.py 和 *_test.py)
    pytest.main()
    # 2、运行test_mark1.py::test_dkej模块中的某一条用例
    pytest.main(['test_mark1.py::test_dkej','-vs'])
    # 3、运行某个 标签
    pytest.main(['test_mark1.py','-vs','-m','dkej'])

运行方式
python test_*.py

  • 使用 python -m pytest 调用 pytest(jenkins 持续集成用到)

pytest异常处理

  • 常用的异常处理方法*
  • try…except、
try:
    a = int(input("输入被除数:"))
    b = int(input("输入除数:"))
    c = a / b
    print("您输入的两个数相除的结果是:", c)
except (ValueError, ArithmeticError):
    print("程序发生了数字格式异常、算数异常之一")
except:
    print("异常未知")
print("程序继续运行")

  • 异常处理方法 pytest.raise()
import pytest


def test_raise():
    with pytest.raises(ZeroDivisionError, ValueError):
        raise ZeroDivisionError("除数为0")

def test_raise1():
    with pytest.raises(ValueError) as exc_info:
        raise ValueError("value must be 42")
    assert exc_info.type is ValueError
    assert exc_info.value.args[0] == "value must be 42"

最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取 【保证100%免费】

 全套资料获取方式:点击下方小卡片自行领取即可

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

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

相关文章

解决分类任务中数据倾斜问题

大家好,在处理文本分类任务时,基准测试流行的自然语言处理架构的性能是建立对可用选项的理解的重要步骤。在这里,本文将深入探讨与分类相关的最常见的挑战之一——数据倾斜。如果你曾经将机器学习(ML)应用于真实世界的…

selenium---滑动框验证码破解

前言 目前常见的验证码有很多种,比如数字验证码,滑动验证码,以及滑动补全图像验证码等,关于验证码的操作属于我们在UI自动化很大的一个障碍,今天安静来介绍下如何通过python来实现我们滑动验证码 滑动验证码 先来一…

MySQL之全文索引二三事

全文索引 MySQL全文索引是一种用于快速搜索文本字符串的索引,在MySQL数据库中,它可以用来提高文本搜索的效率。全文索引不同于普通索引,普通索引只是对列值进行排序,而全文索引则会对列的内容进行分词,并且对每个分词…

RocketMQ重复消费的解决方案::分布式锁直击面试!

文章目录 场景分析方法的幂等分布式锁Redis实现分布式锁抢锁的设计思路 分布式锁案例 直击面试rocketmq什么时候重复消费消息丢失的问题消息在哪里丢失发送端确保发送成功并且配合失败的业务处理消费端确保消息不丢失rocketmq 主从同步刷盘 场景分析 分布式系统架构中,队列是分…

go-zero学习 第六章 分布式事务dtm

go-zero学习 第六章 分布式事务dtm 1 参考文档2 官方示例3 go-zero使用dtm参考代码3.1 go-zero支持dtm 代码操作步骤※3.2 gozerodtm 代码操作步骤 4 注意事项4.1 grpc接口地址※4.2 动态调用过程4.3 dtm的回滚补偿4.4 barrier的空补偿、悬挂等4.5 barrier在rpc中本地事务 1 参…

多媒体工作中用到的小工具

安利下嵌入式多媒体用到的各种小工具 下面是同事们推荐的 以下是对这些软件的简要介绍: ocenaudio:ocenaudio是一款跨平台的音频编辑软件,它提供了直观的界面和丰富的功能,可以帮助用户进行音频剪辑、修复、转码等操作。 MKVToolNix:MKVToolNix是一款开源的多媒体容器格…

web-vim信息泄露

(1)知识补充 vim 交换文件名 在使用vim时会创建临时缓存文件,关闭vim时缓存文件则会被删除,当vim异常退出后,因为未处理缓存文件,导致可以通过缓存文件恢复原始文件内容   以 index.php 为例&#xff1…

Redis一主二从三哨兵模式

文章目录 Redis一主二从三哨兵模式环境配置实践配置主从配置哨兵模式 测试主从复制测试模拟master宕机恢复master Redis一主二从三哨兵模式 当你使用Redis作为主从复制的架构,并且希望在出现主节点故障时自动进行故障转移时,适用于一主而从三哨兵模式。…

android 面试题目之handler消息机制

Handler消息机制是Android里面很基础的东西,基本上属于必考题 一般会从如下几个方面来考查 实现原理,Handler/Message/MessageQueue/Looper 几个类的实现流程,Handler导致的内存泄露怎么处理主线程的Looper是什么时候创建的;如果…

3. Spring 更简单的读取和存储对象(五大类注解 方法注解)

目录 1. 存储 Bean 对象 1.1 配置扫描路径 1.2 添加注解存储 Bean 对象 1.2.1 Controller(控制器存储) 1.2.2 Service(服务存储) 1.2.3 Repository(仓库存储) 1.2.4 Component(组件存储&…

C语言学习笔记 Ubuntu系统下部署gcc编译工具-01

在22.04版本 ubuntu系统下: 1.进行apt工具包更新 sudo apt-get update 2.安装gcc工具 sudo apt-get install -y gcc 3.创建一下文件,并编译它输出相应的内容 touch hello.c 4.使用gcc编译c源程序并运行 格式:gcc 源文件名 -o 生成的执行文…

AcWing 1210. 连号区间数

输入样例1: 4 3 2 4 1输出样例1: 7输入样例2: 5 3 4 2 5 1输出样例2: 9样例解释 第一个用例中,有 77 个连号区间分别是:[1,1],[1,2],[1,3],[1,4],[2,2],[3,3],[4,4][1,1],[1,2],[1,3],[1,4],[2,2],[3,3…

记一次vscode配置CMake编译task的坑

事情经过是这样的,博主在一个项目中需要使用交叉编译链进行项目编译,但是在CMake中有一个自定义的编译选项,在vscode中配置task任务后,编译发现终端报静态库.a文件格式错误,如下图所示: 但是如果在CMakeLis…

python与深度学习(七):CNN和fashion_mnist

目录 1. 说明2. fashion_mnist实战2.1 导入相关库2.2 加载数据2.3 数据预处理2.4 数据处理2.5 构建网络模型2.6 模型编译2.7 模型训练2.8 模型保存2.9 模型评价2.10 模型测试2.11 模型训练结果的可视化 3. fashion_mnist的CNN模型可视化结果图4. 完整代码 1. 说明 本篇文章是C…

Install the Chinese input method on Linux

Open terminal and input: sudo -i apt install fcitx fcitx-googlepinyinWait for it to finish. Search fcitx: "设置"-->"输入法": Finally, we get the following result: Ctrl Space:Switch the input method. The test …

Redis追本溯源(三)内核:线程模型、网络IO模型、过期策略与淘汰机制、持久化

文章目录 一、Redis线程模型演化1.Redis4.0之前2.Redis4.0之后单线程、多线程对比3.redis 6.0之后 二、Redis的网络IO模型1.基于事件驱动的Reactor模型2.什么是事件驱动,事件驱动的Reactor模型和Java中的AIO有什么区别3.异步非阻塞底层实现原理 三、Redis过期策略1.…

印刷和数字设计的页面布局软件 QuarkXPress 2023 Crack

QuarkXPress 2023 用于印刷 和数字设计的页面布局软件,使用 QuarkXPress 释放您的创造力并最大限度地提高生产力 图形设计和桌面出版流程早就应该进行创新和颠覆,所以 QuarkXPress 就来了。自 1987 年首次亮相市场以来,成千上万的创意专业人士…

RocketMQ教程-(5)-功能特性-事务消息

事务消息为 Apache RocketMQ 中的高级特性消息,本文为您介绍事务消息的应用场景、功能原理、使用限制、使用方法和使用建议。 事务消息为 Apache RocketMQ 中的高级特性消息,本文为您介绍事务消息的应用场景、功能原理、使用限制、使用方法和使用建议。…

FFmpeg AVFilter的原理(三)- filter是如何被驱动的

1、下面是一个avfilter的graph 上图是ffmpeg中doc/examples中filtering_video.c案例的示意图。 本章节主要查看avfilter中的数据是怎么进入的,然后又是怎么出来的。 主要考察两个函数: av_buffersrc_add_frame_flags()av_buffers…

gcc编译的时候出现错误,可以用core查看错误信息

比如说我们有文件main.c,threadpool.c,threadpool.h main.c和threadpool.c都用了threadpool.h,也就是#include "threadpool.h" (1)如果我们直接使用gcc main.c -o a.out -lpthread会报如下的错 我们需要进行动态库链接 gcc -c threadpool.c -…