pytest自动化测试框架详解+mark标记+fixture夹具

news2024/11/19 17:42:08

介绍

pytest是python的一种单元测试框架,同自带unittest框架类似,功能,效率更强大

特点:

1. 非常容易上手,入门简单,丰富的文档
2. 支持参数化
3. 执行测试用例的过程中,跳过某些用例,标记失败的用例
4. 支持重复执行失败的用例
5. 便于管理用例,方便和持续集成工具一起集成,便于生成测试报告
6. 有很多的第三方插件,并且可以随意自动以扩展

一,pytest详解及常用的插件的安装

pytest-html(生成html报告)

pytest-xdist(多线程运行)

pytest-ordering(控制用例的执行顺序)

pytest-rerunfailures(失败用例重跑)

allure-pytest(生成allure报告)

pytest-base-url(管理基础路径)

pytest(框架本身)

首先会在项目线面新建一个:requirements.txt 文件

把以上插件配置放在文件当中

输入安装命令:

pip install - r requirements.txt

二,pytest默认的测试用例的规则

1,模块名(文件名py)必须要以test开头或者test结尾

2,测试类必须要以Test开头,并且不能有init方法

3,测试用例必须也要以test开头

三,pytest三种执行方式

1,命令行执行:pytest

2,使用主函数执行:新建一个run文件

```python
import pytest

if __name__ == '__main__':
    pytest.main()
```

3,通过pytest.ini全局配置文件执行

```python
[pytest]
# 输出格式内容
addopts = -vs
# 指定测试用例的文件夹
testpaths = ./testcases
# 指定的模块规则
python_files = test_*.py demo_*.py
# 修改默认的类规则
python_classes = Test* Demo*
# 修改默认的测试用例规则
python_functions = test_* demo_*
```

**注意事项:如果全局配置文件写入了中文,那么记得右下角修改编码格式(utf-8改成gbk)**

四,pytest标记跳过测试用例

无条件跳过

```python
@pytest.mark.skip(reason="版本原因")
def test_02(self):
    print("这是第2条登录测试用例")
```

有条件跳过

```python
@pytest.mark.skipif(2>10,reason="反例跳过")
def test_03(self):
    print("这是第3条登录测试用例")
```

注意:条件成立跳过,条件不成立就执行

五,pytest控制测试用例的执行顺序

默认情况是按照文件名,测试时用力的从上到下的顺序执行

如果需要改变执行顺序:pytest-ordering插件可以改变默认的用例执行顺序

```python
@pytest.mark.run(order=2)
def test_02(self):
    print("这是第2条登录测试用例")
```

六,pytest标记失败的测试用例

标记预期会出现的异常,只有出现异常才对,不出现异常反而不对

```python
@pytest.mark.xfail(reason="0不能当做被除数")
def test_03(self):
    # print(1/0)
    print("这是第3条登录测试用例")
```

七,pytest支持标记参数化

对于相似的过程,但数据不一样的时候,可以使用参数化

```python
@pytest.mark.parametrize(["a", "b"], [(1, 2), (3, 4), (5, 6), (9, 8), (7, 66)])
def test_04(self, a, b):
    assert a * b > 100
```

八,pytest前后置(固件,夹具)

类夹具,方法夹具,函数夹具,模块夹具

```python
def setup_class(self):
    print("类执行之前")

def teardown_class(self):
    print("类执行之后")

def setup(self):
    print("方法(用例)夹具执行之前")

def teardown(self):
    print("方法(用例)夹具执行之后")
# 方法夹具更新之后的用法
def setup_method(self):
    print("方法(用例)夹具执行之前")

def teardown_method(self):
    print("方法(用例)夹具执行之后")
```

九,部分前后置Fixture固件

fixture的语法:

1,方法夹具

```python
@pytest.fixture(scope="function",autouse=True)
def exe_sql():
    print("执行sql语句")
    yield
    print("关闭数据库")
```

2,类夹具需要手痛调用自定义夹具

```python
# 核心:自定义夹具
@pytest.fixture(scope="class", autouse=True)
def exe_sql():
    print("执行sql语句")
    yield
    print("关闭数据库")


@pytest.mark.usefixtures("exe_sql")
class Testlogin:
```

3,模块级别

```python
@pytest.fixture(scope="module", autouse=True)
def exe_sql():
    print("执行sql语句")
    yield
    print("关闭数据库")


@pytest.mark.usefixtures("exe_sql")
class Testlogin:
```

4,session会话级别

```python
@pytest.fixture(scope="session", autouse=True)
```

十,fixture结合conftest.py文件使用

整个文件是专门用来存放fixture夹具的代码内容,名字是固定的

不需要做任何导包,不管是在根目录,还是在用例目录,还在模块目录,都会被自动调用

执行顺序:从最里面内层执行,从上道下,如果是同一个conftest那么按照,夹具的ASCII编码先后执行

做为一名自动化软件测试,接下来我想分享一下这些年来,我对于技术一些归纳和总结,和自己对作为一名高级测试者需要掌握那些技能的笔记分享,希望能帮助到有心在技术这条道路上一路走到黑的朋友!

1、想学习却无从下手,该如何学习?
这里我准备了对应上面的每个知识点的学习资料、可以自学神器,已经项目练手。

2、软件测试/自动化测试【全家桶装】学习中的工具、安装包、插件....

​ 3、有了安装包和学习资料,没有项目实战怎么办,我这里都已经准备好了往下看

最后送上一句话:
世界的模样取决于你凝视它的目光,自己的价值取决于你的追求和心态,一切美好的愿望,不在等待中拥有,而是在奋斗中争取。
如果我的博客对你有帮助、如果你喜欢我的文章内容,请 “点赞” “评论” “收藏” 一键三连哦!

 

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

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

相关文章

Python环境搭建

将向大家介绍如何在本地搭建Python开发环境。 Python可应用于多平台包括 Linux 和 Mac OS X。 你可以通过终端窗口输入 "python" 命令来查看本地是否已经安装Python以及Python的安装版本。 Unix (Solaris, Linux, FreeBSD, AIX, HP/UX, SunOS, IRIX, 等等。) W…

Dev-C++ 的下载、安装和配置

Dev-C 的下载、安装和配置 Dev-C 下载 我们直接打开 https://sourceforge.net/projects/orwelldevcpp/ 点击 Download 进行下载即可,如下图所示: 下载速度也不错,很快就可以下载完成了。 不像某些博主,为了引流量,…

Cadence Allegro PCB设计88问解析(二十二) 之 Allegro中放入元器件

一个学习信号完整性仿真的layout工程师 在之前的文章和大家介绍过Allegro中导入网表,那么导入网表成功之后,还在Allegro在进行一步就是放入导入成功的器件。下面和大家简单介绍具体的操作过程: 第一步:添加版外形outline 我们在…

DAX:SUMMARIZE的秘密

作为一个查询函数,SUMMARIZE 执行三个操作: 它可以按表本身或相关表的任何列对表进行分组;它可以创建新列,在行上下文和过滤上下文中计算表达式;它可以产生不同级别的小计(subtotal)。 在 SUMMARIZE 的三个主要操作中&…

PHP代码审计系列(三)

PHP代码审计系列&#xff08;三&#xff09; 本系列将收集多个PHP代码安全审计项目从易到难&#xff0c;并加入个人详细的源码解读。此系列将进行持续更新。 sql闭合绕过 源码如下 <?phpif($_POST[user] && $_POST[pass]) {$conn mysql_connect("*******…

关于操作PPL进程引发的一些问题

背景 之前发布过一篇关于procexp的利用&#xff0c;但是最近有brother说&#xff0c;最新的版本不能利用了&#xff0c;然后就去下载了最新版本的。 发现判断了是不是受保护进程&#xff0c;不是就拒绝。 这里简单看一下这个函数&#xff0c;发现对比的是_PS_PROTECTION,其实就…

windows cmd指令记录、监听进程是否存在、exe注册到服务中开机后台运行

cmd指令记录 mstsc&#xff1a;远程桌面 regedit&#xff1a;打开注册表 control userpasswords2&#xff1a;去掉开机登录界面 shell:startup&#xff1a;进入登录界面后自启程序 services.msc&#xff1a;启动、终止并设置服务管理界面 shutdown -r -t 0&#xff1a;-r…

一步一步学Iceberg-对比Flink+Kafka和Flink+Iceberg的差异

一 FlinkKafka做实时数仓的弊端 我们以前&#xff08;包括现在&#xff09;还有用FlinkKafka做实时数仓&#xff0c;以及日志传输。Kafka本身的存储成本很高&#xff0c;并且数据保留时间有时效性&#xff0c;一旦消费积压&#xff0c;数据达到过期事件后&#xff0c;就会导致…

[附源码]JAVA毕业设计文件发布系统(系统+LW)

[附源码]JAVA毕业设计文件发布系统&#xff08;系统LW&#xff09; 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; …

Talk预告 | 剑桥大学在读博士生苏熠暄:对比搜索(Contrastive Search)—当前最优的文本生成算法

本期为TechBeat人工智能社区第461期线上Talk&#xff01; 北京时间12月8日(周四)20:00&#xff0c;剑桥大学在读博士生——苏熠暄的Talk将准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “对比搜索&#xff08;Contrastive Search&#xff09;—当前最优的…

【Keras计算机视觉】Faster R-CNN神经网络实现目标检测实战(附源码和数据集 超详细)

需要源码请点赞关注收藏后评论区留言私信~~~ 一、目标检测的概念 目标检测是计算机视觉和数字图像处理的一个热门方向&#xff0c;广泛应用于机器人导航、智能视频监控、工业检测、航空航天等诸多领域&#xff0c;通过计算机视觉减少对人力资本的消耗&#xff0c;具有重要的现…

抗疫专题网页设计 致敬最美逆行者网页制作 疫情感动人物静态HTML网页

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

开发必装最实用工具软件与网站

声明&#xff1a;有些不管你是不是程序员都可以装的软件&#xff0c;我都备注了 我是一名java开发工程师嘛&#xff0c;就给大家分享一下实用的软件 这里我就不介绍idea、postman 如果只是代码编辑&#xff0c;可以看推荐一下我使用的开发工具_我认不到你的博客-CSDN博客 存放…

【软件测试】资深测试告诉你做好测试需求分析是有多么重要......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 测试需求到底是什么…

iwebsec靶场 文件上传漏洞通关笔记2-第02关 文件名过滤绕过

目录 第02关 文件名过滤绕过 1.打开靶场 2.源码分析 3.上传info.pHp 4.获取上传脚本地址 5.访问上传脚本 第02关 文件名过滤绕过 1.打开靶场 iwebsec 靶场漏洞库iwebsechttp://iwebsec.com:81/upload/02.php 随手上传脚本info.php&#xff0c;如下所示提示不能上传php文…

日志:logback、枚举

logback下载步骤&#xff1a; logback官网https://logback.qos.ch/index.html教程http://t.csdn.cn/xSK0I 点击SLF4J API进去&#xff0c;注意看右上角的标题是有变化的&#xff0c;是什么目录下就会显示什么目录&#xff0c;点击下载 然后一样点击右下角的Maven 下载这三个&a…

12月8日:thinkphp中的杂项

缓存 缓存概念及类型&#xff1a;什么是缓存 - 与非网 缓存(cache)一般存放在runtime目录下&#xff0c;页面请求一次将请求内容进行缓存&#xff0c;下一次再次访问&#xff0c;会直接访问到缓存内容&#xff0c;不会再次请求服务器&#xff0c;减少服务器压力 场景&#xff…

C++ Primer Plus第五版笔记(p151-200)

64 空语句存在危害 p155 65 复合语句是指用花括号括起来的&#xff0c;也被叫做块 一个块就是一个作用域 66 空块的概念p155 67 else只和最近的没配对的if 进行配对 &#xff08;悬垂else&#xff09; 68 case标签必须是一个整形常量表达式 69 default也是一种特殊的case标签 …

【github项目更新以及相关常用操作】

文章目录(一)更新github项目以及更新项目里某个特定文件(二)报错(三)github更改默认分支(一)更新github项目以及更新项目里某个特定文件 更新github项目&#xff1a; 1、首先确保你有github账号并且执行过上传操作&#xff08;有项目&#xff0c;项目里有文件 2、点击想更新的…

Oracle PrimaveraUnifier 数据定义(Data Definitions),S1

目录 Basic Cost Code Data Picker 数据类型 数据长度 输入方式 Oracle Primavera Unifier数据定义描述了如何将数据输入到Unifier中并存储。数据定义是构建数据元素&#xff08;表单字段&#xff09;的基础。有三种类型的数据定义&#xff1a; BasicCost CodeData PickerBasic…