Pytest自动化测试框架

1、pytest简介

pytest是Python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高。

  • 执行测试过程中可以将某些测试跳过,或者对某些预期失败的case标记成失败
  • 能够支持简单的单元测试和复杂的功能测试
  • 支持重复执行失败的case
  • 支持运行由nose, unittest编写的测试case
  • 具有很多第三方插件,并且可以自定义扩展
  • 方便的和持续集成工具集成
  • 支持参数化

2、安装pytest

pip install pytest

3、举例

(1)单测试case

执行测试的时候,我们只需要在测试文件test_sample所在的目录下,运行py.test即可。pytest会在当前目录及其子目录下寻找以test开头的py文件或者以test结尾的py文件(即测试文件),找到测试文件之后,进入到测试文件中寻找test_开头的测试函数并执行。

在当前目录下新建文件 test_champ.py

def func(x):return x + 1def test_answer():assert func(3)==5

在命令行输入py.test [-q],加上-q(quiet)输出结果会省去pytest版本信息,便可以看到执行的成功与失败的原因了

(2)多测试case

当需要编写多个测试样例的时候,我们可以将其放到一个测试类当中,如:

class TestClass:def test_one(self):assert "h" in "this"def test_two(self):x = "hello"assert hasattr(x,"check")

我们可以通过执行测试文件的方法,执行上面的测试:py.test -q test_class.py

同时,在这我为大家准备了一份软件测试视频教程(含面试、接口、自动化、性能测试等),就在下方,需要的可以直接去观看,也可以直接【点击文末小卡片免费领取资料文档】

软件测试视频教程观看处:

【2024最新版】Python自动化测试15天从入门到精通,10个项目实战,允许白嫖。。。

4、pytest测试样例编写规则

通过上面2个实例,我们发现编写pytest测试样例非常简单,只需要按照下面的规则:

  • 测试文件以test_开头(以_test结尾也可以)
  • 测试类以Test开头,并且不能带有 __init__ 方法
  • 测试函数以test_开头
  • 断言使用基本的assert即可

5、如何执行pytest测试样例

执行测试样例的方法很多种,上面第一个实例是直接执行py.test,第二个实例是传递了测试文件给py.test。其实py.test有好多种方法执行测试:

py.test               # run all tests below current dir
py.test test_mod.py   # run tests in module
py.test somepath      # run all tests below somepath
py.test -k stringexpr # only run tests with names that match the# the "string expression", e.g. "MyClass and not method"# will select TestMyClass.test_something# but not TestMyClass.test_method_simple
py.test test_mod.py::test_func # only run tests that match the "node ID",# e.g "test_mod.py::test_func" will select# only test_func in test_mod.py

6、测试报告

pytest可以方便的生成测试报告,即可以生成HTML的测试报告,也可以生成XML格式的测试报告用来与持续集成工具集成。

生成txt格式报告:

py.test --resultlog=path/log.txt 

生成XML格式的报告:

py.test --junitxml=path/log.xml  

将测试报告发送到pastebin服务器,执行下面的命令会生成报告的网址

py.test test_report.py --pastebin=all 

只发送失败的报告

py.test test_report.py --pastebin=failed 

生成Html格式报告

这个需要安装pytest的第三方插件pytest-html:

pip install pytest-html
py.test test_report.py --html=path/log.html 

7、如何获取帮助信息

py.test --version # shows where pytest was imported from  
py.test --fixtures # show available builtin function arguments  
py.test -h | --help # show help on command line and config file options  

与Python自带的unitest测试框架中的setup、teardown类似,pytest提供了fixture函数用以在测试执行前和执行后进行必要的准备和清理工作。但是fixture函数对setup和teardown进行了很大的改进。

  • fixture函数可以使用在测试函数中,测试类中,测试文件中以及整个测试工程中。
  • fixture支持模块化,fixture可以相互嵌套
  • fixture支持参数化
  • fixture支持unittest类型的setup和teardown

setup完成测试前的初始化工作,teardown实现测试完成后的垃圾回首工作。如果测试的程序使用jdbc连接数据库,那么setUpBeforeClass()方法中就可以写上初始化数据库连接的一些代码,tearDownAfterClass()方法中就可以写上关闭数据库连接的一些代码。

8、最佳实践

其实对于测试而言,特别是在持续集成环境中,我们的所有测试最好是在虚拟环境中。这样不同的虚拟环境中的测试不会相互干扰的。

由于我们的实际工作中,在同一个Jekins中,运行了好多种不同项目册的测试,因此,各个测试项目运行在各自的虚拟环境中。

将pytest安装在虚拟环境中:

1、将当前目录创建为虚拟环境

virtualenv .        # create a virtualenv directory in the current directory  
source bin/activate # on unix 

2、在虚拟环境中安装pytest:

pip install pytest  

9、断言的使用

①正常断言

# 子签名类,忽略中间打印的过程,直接表示出错的原因
# assert value == 0, "value was odd, should be even"  
# 等于、不等、小于、大于
assert func(2)==3

②异常断言

使用pytest.raise方法(需import pytest)

断言1除以0,将产生一个ZeroDivisionError类型的异常。

import pytest  
def test_zero_division():  with pytest.raises(ZeroDivisionError):  1 / 0 

有的时候,我们可能需要在测试中用到产生的异常中的某些信息,比如异常的类型type,异常的值value等等。下面我们修改下上面的测试

import pytest  
def test_recursion_depth():  with pytest.raises(ZeroDivisionError) as excinfo:  1/0  assert excinfo.type == 'RuntimeError'  

因为该测试断言产生的异常类型是RuntimeError,而实际上产生的异常类型是ZeroDivisionError,所以测试失败了。在测试结果中,可以看到assert子表达式excinfo.type的值。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

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

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

相关文章

蜗牛目标检测数据集VOC格式480张

蜗牛,一种缓慢而坚韧的软体动物,以其螺旋形的外壳和黏附力极强的黏液而为人所熟知。 蜗牛体型呈螺旋形,有一个硬壳保护其柔软的身体。壳的形状和纹理因种类而异,有的光滑如玻璃,有的则布满细纹。蜗牛的头部有两对触角…

【算法Hot100系列】在排序数组中查找元素的第一个和最后一个位置

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

一台智能汽车会使用哪些芯片

目录 1.汽车芯片技术逻辑 2.汽车芯片产品详解和厂商一览 2.1 控制芯片 2.2 计算芯片 2.3 传感芯片 2.4 通信芯片 2.5 存储芯片 2.6 安全芯片 2.7 功率芯片 2.8 驱动芯片 2.9 电源管理芯片 2.10 系统基础芯片 3.小结 这两天算是和标准杠上了,哈哈。 昨…

解决:已经安装open3d,还是报错No module named ‘open3d‘的问题

首先示例,我是如何安装又是如何被报错的过程。 报错过程: 网上普遍的安装指令就是下面这个: pip install open3d 第一次,我是直接在pychram页面的python程序下方的终端窗口安装的: 安装完,检查列表已安…

游戏引擎巨头Unity 裁员 25%;章泽天净资产600亿;恒大汽车刘永灼被抓;抖音将“抖币”更名为“钻石”;董宇辉新账号将于今晚首播

今日精选 • 游戏引擎巨头 Unity 计划裁员 25%,去年底曾关闭全球多处办公室• 恒大汽车刘永灼被抓,股价闪崩20%,刚丢35亿救命钱• 抖音将“抖币”更名为“钻石”• 章泽天登胡润财富榜:净资产600亿• 董宇辉新账号未开播已有400万…

师傅带练|在线实习项目,提供实习证明

八大项目:某实习网站招聘信息采集与分析(Python数据采集与分析) 股票价格形态聚类与收益分析(Python金融分析) 某平台网络入侵用户自动识别(Python机器学习) 某平台广东省区采购数据分析&…

MySQL8.0 升级

将 MySQL8.0.30 升级到 MySQL8.0.32 备份旧数据 rootLAPTOP-FPIQJ438:/data/backup# xtrabackup --backup --userroot --password123456 --socket/tmp/mysql.sock --target-dir/data/backup/ 2024-01-08T16:46:38.98768708:00 0 [Note] [MY-011825] [Xtrabackup] recognized s…

控制障碍函数(Control Barrier Function,CBF) 三、代码

三、代码实现 3.1、模型 这是一个QP问题,所以我们直接建模 这其实还是之前的那张图,我们把这个大的框架带入到之前的那个小车追击的问题中去,得到以下的一些具体的约束条件 CLF约束 L g V ( x ) u − δ ≤ − L f V ( x ) − λ V ( x ) …

Java药物不良反应ADR智能监测系统源码

药物不良反应(Adverse Drug Reaction,ADR)是指在使用合格药品时,在正常的用法和用量下出现的与用药目的无关的有害反应。这些反应往往因药物种类、使用方式、个体差异等因素而异,可能导致患者身体不适、病情恶化。 为保…

【STM32】STM32学习笔记-USART串口数据包(28)

00. 目录 文章目录 00. 目录01. 串口简介02. HEX数据包03. 文本数据包04. HEX数据包接收05. 文本数据包接收06. 预留07. 附录 01. 串口简介 串口通讯(Serial Communication)是一种设备间非常常用的串行通讯方式,因为它简单便捷,因此大部分电子设备都支持…

OceanBase数据库大赛落幕,“五点下班”队夺冠获10万奖金

近日,2023全国大学生计算机系统能力大赛暨第三届OceanBase数据库大赛落下帷幕。本届大赛共吸引海内外包括新加坡国立大学、清华大学、浙江大学、西安交通大学等268所高校的1154支队伍参赛,经过三个多月的比拼,来自西北工业大学的“五点下班”…

0002.ATMEGA8单片机采用LM60CIM3X检测温度必须要了解的内容

1.特性 校准后的线性比例因子为6.25mV/℃。 检测温度范围-40℃---125℃。 本次开发采用SOT-23封装。 2.主要技术规格: 精度: 25℃ ---2℃---3℃(max) -40℃-125℃---4℃(max) -25℃-125℃---3℃&#x…