软件测试学习笔记丨Pytest 学习指南

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

基本介绍

pytest框架是一个成熟,全面的测试框架,具有非常丰富的第三方插件,并且可以自定义扩展

比如:pytest-selenium , pytest-html , pytest-rerunfailures(失败case重复执行)pytest-xdist(多cpu分发)

pytest还以其简单灵活,上手简单著称,能够支持简单的单元测试和复杂的功能测试,支持参数化操作。

安装指南

pip install pytest

验证安装:

pytest --version # 会展示当前已安装版本

文件基本命名格式

默认满足以下条件:

测试文件满足:test_xxx.pyxxx_test.py格式,即以test_为前缀或_test为后缀

测试类满足:以Test开头,且不能含有init方法(定义class时,要以T开头,不然pytest框架不会识别该类,自然就不会进入该类内部进行搜索)

因为测试类里进行前后置操作不能通过init等魔法函数,而是通过特定的函数setup_classteardown_class前面半段指定了是前置操作还是后置操作,后半段则是指定了该操作的重复级别:

class:类重复级别:该类中只执行一次

method:测试方法重复级别:该类中每个测试用例(方法)执行一次

执行:在命令行执行pytest命令时,会自动从当前目录及子目录中寻找符合上述约束的测试函数来执行。

模板

import pytest  #导入pytest模块def test_beifan():  #测试用例passclass TestBaili:  #测试套件def test_a(self): #测试用例,第一个测试方法passdef test_b(self):  #测试用例,第二个测试方法pass

pytest框架断言

常用断言:

  • assert xx:判断 xx 为真
  • assert not xx:判断 xx 不为真
  • assert a in b:判断 b 包含 a
  • assert a == b:判断 a 等于 b
  • assert a !=b:判断 a 不等于 b

pytest命令行执行

指定文件:
pytest ./xxx.py
指定方法
pytest ./xxx.py::类名::方法名
pytest ./xxx.py::TestData::test_demo1### 常用命令参数
-v 输出用例更加详细的执行信息,比如用例所在文件和用例名称
-k 执行用例中包含'关键字'的用例
-s 输出用例中的调试信息,比如print打印消息,不加参数则不输出待执行的用例
-m 执行标记的内容,执行特定的测试用例,执行有相同标记的测试用例
-x 执行失败则停止执行,后面的用例不会被执行
--maxfail=n 执行失败n次后停止执行,n为最大程度接收失败的次数
--count=n 执行用例n次,n=2则执行两次
--lf (last failed) 重新执行上传失败的用例,若没有失败,则会全部跑
--ff (failed first) 重新运行所有用例,但是首先运行上传失败的用例### 测试结果的标志
. 代表一个测试用例通过,..代表两个测试用例通过
s 代表skip,即用例跳过执行
F 即failure一般是断言发生错误
E error,一般是用例执行过程中报错

pytest 标记测试用例以及测试用例的指向执行

pytest的标记机制与用例执行的方法

pytest标记是需要通过pytest.mark来标记使用的,pytest为了应对各种测试场景也内置了许多标记。

1、参数化标记:pytest.mark.parametrize通过parametrize可以将用例数据和用例执行的逻辑代码分离,并实现根据用例,自动生成测试用例

2、

@pytest.mark.parametrize('item',[11,22,33,44,55,66])
def test_demo(item)assert item >50
用法:
格式:pytest.mark.parametrize('每个用例包含的变量列表,以引号括住,变量间以,号隔开',实参列表,当每组变量数量只有一个时,使用一维数组即可,无特殊包裹要求,以逗号隔开,若存在多个变量则输入二维数组即可。)

3、跳过用例执行:pytest.mark.skip通过skip装饰的用例,在执行时会无条件跳过。可选参数reason:跳过测试函数的原因

4、

@pytest.mark.skip
def test_demo():assert item>50
@pytest.mark.skip(reason='不需要执行')
def test_demo1():assert item>50

5、根据条件跳过用例:pytest.mark.skipifskipif可以根据条件来决定是否跳过用例的执行,如果条件为True则跳过测试函数执行。 参数:condition:跳过条件,reason:跳过的原因

6、

a =10
@pytest.mark.skipif(a>20,reason='条件不成立,不执行')
def test_demo():assert item >50

7、标记预期失败的用例:pytest.mark.xfailxfail可以将测试用例标记为预期执行失败的用例.

  • 参数
    • condition:将测试函数标记为xfail的条件(True/False)
    • reason:测试函数被标记为xfail的原因
    • raises:预期失败的异常类型
    • run:是否应该实际执行函数,如果False,该函数将始终xfail并且不会被执行
    • strict:严格模式(True或False)

8、

a=10
@pytest.mark.xfail(a>20,reason='条件不成立,不执行',raises = AssertionError)
def test_demo():assert item>50

在这里插入图片描述

推荐学习

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

相关文章

spring模块都有哪些

Spring 框架是一个庞大而灵活的生态系统,它包含了多个模块,每个模块都提供了特定的功能和服务。以下是一些主要的 Spring 模块: Spring Core: 核心容器,提供了 IoC(控制反转)和 DI(…

推荐4个精准高效的录音转文字软件。

录音转文字在很多的场景中都能够为我们提供便利,比如:可以将课堂录音转换为文字,方便复习和整理笔记,可以将会议录音转换为文字,快速准确地记录内容,可以将采访录音转成文字,提高新闻稿件的撰写…

被Karpathy誉为“蕴藏着类似ChatGPT的机会的AI产品Notebook LM”,它到底做对了什么?

就在昨天,Karpathy在X上连续发布了多条安利帖,强烈地给大家推荐一个AI产品NotebookLM。 嘶~给周围人疯狂种草并不稀奇,但Karpathy的推荐理由给NotebookLM戴了一个高帽子-他提到这款产品让人联想到ChatGPT。 这种就令人好奇&#…

JAVA开源项目 大学生就业招聘系统 计算机毕业设计

本文项目编号 T 058 ,文末自助获取源码 \color{red}{T058,文末自助获取源码} T058,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 企…

DRF实操——项目部署

DRF实操——项目部署 一、Mysql集群1. 集群方式1)Replication集群2)PXC集群2. Docker安装PXC知识补充:具名数据卷创建docker容器django后端接口服务二、Nginx概述作用安装配置三、uWSGI1. 概述2. 项目的配置3. 将本地项目及环境打包到服务器4. uwsgi的安装与启动5. 使用uwsg…

Vue Mini基于 Vue 3 的小程序框架

新的小程序框架 https://vuemini.org/ Vue Mini 是一个基于 Vue 3 的小程序框架,它允许开发者利用 Vue 3 的强大功能来构建微信小程序。Vue Mini 的核心优势在于它的响应式系统和组合式 API,这些特性让开发者能够以一种更声明式、更高效的方式来编写和…

今天不止是A股疯,这家国产大模型也疯了!AI人:1亿小目标已实现

这两天有个很神奇的现象,就是有两个从来不碰A股的小伙伴,竟然跑过来问我——“现在上车A股还有机会吗?” 放心吧,我当然不可能在这里回答这个问题的,否则就你懂的。 今天这篇文章不是讨论A股的。而是我无意间发现&am…

脸爱云管理系统存在任意文件上传漏洞

漏洞描述 脸爱云一脸通智慧管理平台是一套功能强大、运行稳定、操作简单方便、用户界面美观的一脸通系统。该平台整合了人脸识别技术和智能化解决方案,可以实现识别和管理个体身份,为各种场景提供便捷的身份验证和管理功能。其存在任意文件上传漏洞&…

记一次vue-cli老项目的打包时长优化

记一次vue-cli老项目的打包时长优化 背景 这是一个基于 vue-cli 的 vue2 的老项目,比较久远,一般Jenkins中打包时间都在 5-6min 左右,基本能够接受。 近来由于项目原因,在该项目中加入了一些在打包时动态生成的js文件以做“缓存…

信号量SEM

前提 1.信号量的本质是一把计数器 2.申请信号本质就是预订资源 3.PV操作是原子的! 将一个公共资源当做整体访问-->锁 如果公共资源不当做整体使用,多进程可以并发的访问公共资源,但不是同一个区域,为了将资源均分,所以有了…

PE节表中是否存在misc.VirtualSize 比SizeofRawData还要大的情况

确实是存在的,这是win10自带记事本,可以看到 确实是大.所以在申请imagebuffer的时候,还是需要比较大小.但是在还原的时候.只考虑sizeofRawData即可>

Python查漏补缺

1.冒泡排序 时间复杂度O(n^2) 选择、插入都是 def bubble(data, reverse):for i in range(len(data)-1):for j in range(len(data)-i-1):if data[j] > data[j1]:data[j], data[j1] data[j1], data[j]if reverse:data.reverse()return data 2.快速排序 时间…

QT将QBytearray的data()指针赋值给结构体指针变量后数据不正确的问题

1、问题代码 #include <QCoreApplication>#pragma pack(push, 1) typedef struct {int a; // 4字节float b; // 4字节char c; // 1字节int *d; // 8字节 }testStruct; #pragma pack(pop)#include <QByteArray> #include <QDebug>int main() {testStruct …

ros2安装完成后重要的一步

安装完成ros2之后&#xff0c;每次打开新的终端都需要 source /opt/ros/humble/setup.bash 为了解决这个为题&#xff0c;我们需要做如下操作,避免每次打开一个新的在终端都要设置。 在文件的最后一行添加 source /opt/ros/foxy/setup.bash

职称评审难在哪?

没有项目业绩资料&#xff1f; 社保不符合&#xff1f; 看不懂评审文件&#xff1f; 申报材料不会做&#xff1f; 论文没地发表&#xff1f; 有这些疑问的 评论区滴滴

如何使用ssm实现白云会议管理系统+vue

TOC ssm741白云会议管理系统vue 第1章 绪论 1.1 选题动因 到现在为止&#xff0c;互联网已经进入了千家万户&#xff0c;最普通的平民百姓也有属于自己的智能设备&#xff0c;计算机各种技术的储备也是相当的丰富&#xff0c;并且实现也是没有难度&#xff0c;各行各业&…

MFU简介

1、缩写 MFU - Mask Field Utilization&#xff08;光刻掩膜版有效利用比例&#xff09; GDPW - Gross Die Per Wafer&#xff0c;每张wafer上die的数量 2、什么是MASK 在光刻机中&#xff0c;光源&#xff08;紫外光、极紫外光&#xff09;透过mask曝光在晶圆上形成图…

python12_字符类型转换

字符类型转换 # 整型 A 3.14 B "123" C True D False E "3.14" F "True" G 0.0# 整型转换函数 def to_int(m):int_m int(m)return int_m# 布尔转换为整型 def bool_to_int(m):bool_m int(m)return bool_m# 布尔类型转换为字符串 def b…

SQL增删查改操作

目录 数据库概述 SQL基础操作 SQL通用语法 数据类型 SQL语句的分类 DDL(数据库定义,表定义,字段定义) 数据库操作 表操作 DDL小结 DML(数据的增删改,数据操作语言) DQL(查询) DQL小节 数据库概述 数据库,顾名思义就是用来存储和管理数据的,我们平时所使用的各大软…

如何通过开源工具帮助保护您的计算机安全

引言 如果您正在考虑安全问题&#xff0c;您有很多选择。随着当前网络犯罪的激增&#xff0c;以及发生犯罪时常见的重大后果&#xff0c;许多企业开始关注如何在网络世界中保护公民的安全。网络安全行业蕴藏着巨大的商业利益&#xff0c;但您可能会惊讶地发现&#xff0c;有一…