Pytest自动化测试框架---(单元测试框架)

news2024/11/15 11:43:03

unittest是python自带的单元测试框架,它封装好了一些校验返回的结果方法和一些用例执行前的初始化操作,使得单元测试易于开展,因为它的易用性,很多同学也拿它来做功能测试和接口测试,只需简单开发一些功能(报告,初始化webdriver,或者http请求方法)便可实现。

但自动化测试中我们常常需要根据不同需求挑选部分测试用例运行,并且我们希望用例克服环境不稳定的局限,即运行失败后自动重新运行一次,如果成功就认为是环境问题导致第一次失败,还有我们经常希望测试用例可以并发执行等等,这些unittest都做不到或者需要大量二次开发才能做到,那么有没有更加强大的框架可以替代unittests呢?

pytest是python里的一个强大框架,它可以用来做单元测试,你也可以用来做功能,接口自动化测试。而且它比unittest支持的功能更多更全面。但是pytest在Getstarted里给出的实例却很简单,很多同学错以为它只是跟unittest一样是个单元测试框架罢了,如果你查询中文互联网,你也只能找到寥寥数篇大致一样的用法,可以说pytest的精髓使用,没有被大家挖掘出来,如此强大的框架不应该被埋没,今天我就带领大家深入pytest使用,共同领略pytest的强大。

1.pytst安装

pytest不属于python的标准库,所以需要安装才能使用, 安装方式如下:
在这里插入图片描述
如果你已经安装有pytest,想查看它的版本号:
在这里插入图片描述
2.你的第一个pytest测试
在这里插入图片描述
非常简单吧, 如果想运行多个用例该如何做呢?
在这里插入图片描述
注意:

(1).如果你想用pytest寻找整个文件夹下的测试用例,那么文件须以test_开头或者以test结尾。
(2).测试类以Test开头,并且不能带有 init 方法。
(3).测试函数以test开头。
(4).另外,pytest不支持也不打算支持中文路径,如果项目路径中有中文会报错。
好了,pytest的getStarted就结束了, 看了上面的应用方式的确没觉得它哪里强大。 别着急,我们再来想一想,如果你有个测试框架,你希望如何用这个框架做测试?

3.灵活的指定测试用例运行集。

在unittest框架里,你只能通过suite.addTest(),或者defaultTestLoader.Discover()两种方法在查找测试用例,对于你不需要的测试用例,只能用@unittest.skip()
来忽略,但做不到不改动代码变更测试用例集,pytest很好的实现了这一点,它支持如下查找:
在这里插入图片描述
难道就仅限于此吗? 其实pytest帮我们实现了更多的高级功能,比如:

4.并发运行测试用例集

关注公众号TesterTalk,跟我一起关注测试技术
首先,你得安装个插件:
在这里插入图片描述

其次,要注意区这个插件仅仅支持python3.6版本及以上,而且如果你想多进程并发,必须跑在Unix或者Mac机器上,windows环境仅仅支持多线程运行。
运行上需要指定参数:

–workers (optional) X。 多进程运行, X是进程数。 默认值1。
–tests-per-worker (optional) X. 多线程运行, X是每个worker运行的最大并发线程数。 默认值1。
举例来说:
在这里插入图片描述
5.测试报告优化
在这里插入图片描述
生成的结果如下:

有时候,我们需要克服环境问题,让失败的用例rerun,有没有办法呢?
在这里插入图片描述
生成的结果如下:

可以看到,rerun聚合在了报告里。

我们自动化一般用到持续集成,Jenkins里需要junit XML格式的报告,pytest有没有办法直接生成?

在这里插入图片描述
这就结束了吗?还远呢?数据参数化你了解下?

6.数据参数化

pytest有几种数据参数化方式:
pytest.fixture(). 不带参数
在这里插入图片描述
pytest.fixture(), 带parms参数:

params with @pytest.fixture, a list of values for each of which the fixture function will execute and can access a value via request.param.
在这里插入图片描述
report显示下图,可以看到test_login被执行了2遍,每次执行带入的数据不同:
除了直接用pytest.fixture, 还可以这么用:

pytest.mark.usefixtures()
在这里插入图片描述
pytest固然强大,这就结束了吗?还有什么高阶的功能吗?必须的。

7.pytest.mark.parametrize实现数据驱动
在这里插入图片描述
如果我的数据来自外部文件呢?
在这里插入图片描述
到这里为止,你已经学习了pytst的基础功能,高阶功能,还有什么吗? 如果你之前的框架是unittest, pytest支持无缝切换, 你不需要改任何代码。
记得上次直播我分享的unittest实现的自动化框架吗,我们看看这个page:

这个是unittest实现的测试类,我们之间在terminal里运行
在这里插入图片描述
怎么样,就问你惊喜不惊喜?!

当然,pytest的特色还远不只与此,我们最后介绍一个高级特性,它允许你在用例运行的整个session里,或者一个module里共享测试数据。

8.作用域(scope)实现数据共享(autouse)
我们知道,fixture,允许你不带参数运行和带参数运行, 调用fixture的第三种方式就是使用autouse
fixture decorator一个optional的参数是autouse, 默认设置为False。 当默认为False,就可以选择用上面两种方式来试用fixture。 当设置为True时,在一个session内的所有的test都会自动调用这个fixture。 权限大,责任也大,所以用该功能时也要谨慎小心。

举例来说,我想初始化我的浏览器,但是我不想每次测试运行都初始化,怎么办呢?我可以用scope限制住。
首先要建立一个conftest.py文件:

在这里插入图片描述
其次,写我们的测试类
在这里插入图片描述
fixture的存在使得我们在编写测试函数的准备函数、销毁函数或者多个条件的测试提供了更加灵活的选择。
autouse的scope含义如下:

autouse fixtures obey the scope= keyword-argument: if an autouse fixture has scope=’session’ it will only be run once, no matter where it is defined. scope=’class’ means it will be run once per class, etc.
if an autouse fixture is defined in a test module, all its test functions automatically use it.
if an autouse fixture is defined in a conftest.py file then all tests in all test modules below its directory will invoke the fixture.

学习安排上

如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

在这里插入图片描述

视频文档获取方式:

这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片进群即可自行领取

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

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

相关文章

阿里云新用户活动:云服务器ECS 新购、升级报价出炉了!

阿里云新人特惠,阿里云新用户新购升级立享满减,新购升级云服务器ECS ,购买热门产品 s6/u1/c6/g6/r6/c7/g7/r7指定配置,可享折上折!从未购买过云服务器ECS或者轻量应用服务器的用户一次性可领取3张优惠券。优惠券适用于…

深入浅出Seata的AT模式

单个掉队,导致集体被动摆烂; 一、业务背景 在分布式架构中,事务管理是个无法避开的复杂问题,虽然有多种解决方案,但是需要根据业务去选择合适的; 从个人最近几年的实践经验来看,Seata组件的AT…

【JUC】SpringBoot使用线程池的两种方式 注解和注入

学习笔记一、ThreadPoolTaskExecutor与ThreadPoolExecutor的区别二、编写配置文件ThreadPoolConfig二、编写Controller三、编写Service3.1、注解3.1、注入一、ThreadPoolTaskExecutor与ThreadPoolExecutor的区别 ThreadPoolExecutor 是JDK自1.5添加的线程池。 ThreadPoolTaskE…

排序算法:插入排序,选择排序,冒泡排序

插入排序 一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下: 步骤1: 从第一个元素开始,该元素可以认为已经被排序; 步骤2: 取出下一个元素,在已经排序的元素序列中从后向前扫描; 步骤3: 如…

[附源码]计算机毕业设计-中国传统手工艺销售平台Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

[附源码]计算机毕业设计JAVA校园失物招领平台

[附源码]计算机毕业设计JAVA校园失物招领平台 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybati…

李峋同款会动的爱心Python代码版

最近看到不少关于李峋同款爱心的视频、文章,今天我们也分享一下李峋同款爱心 Python 代码版。要问李峋是谁?我也不太清楚,大家可自行百度,这个是我百度的结果,仅供参考。 简单来说李峋同款爱心就是一个动态的♥型效果&…

【STM32学习(1)】详解STM32时钟体系

一、8051和stm32时钟体系结构区别 HSE:外部高速的振荡时钟(8MHZ) HSI:内部高速的振荡时钟(16MHZ) LSI:内部低速的振荡时钟(32KHZ) LSK:外部低速的振荡时钟&a…

HTML+CSS+JS静态网页设计【篮球NBA介绍体育运动】web前端学生作业源码

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

【学习笔记】DDD领域驱动设计篇

【学习笔记】DDD领域驱动设计篇 文章目录【学习笔记】DDD领域驱动设计篇什么是DDD?DDD的优缺点DDD的架构框架详解User Interface层application层domain层infrastructure层结语什么是DDD? DDD 是 Domain driven design (领域驱动设计&#xf…

GIS工具maptalks开发手册(四)02——渲染地图信息框之添加绘制工具 获取面的坐标数据信息框进行展示 渲染图片的两种方式

GIS工具maptalks开发手册(四)02——渲染地图信息框之添加绘制工具 & 获取面的坐标数据信息框进行展示 & 渲染图片的两种方式 效果-获取面的坐标 效果-渲染图片的2种方式 代码 index.html <!DOCTYPE html> <html> <meta charset"UTF-8">…

[附源码]计算机毕业设计springboot校园招聘系统设计

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

家装家居行业该如何进行网络推广?

咱们这里谈家居家装行业&#xff0c;指得是置办新家的大件产品&#xff0c;不是锅碗瓢盆&#xff0c;也不是床单被罩那些。如衣柜、橱柜、灯具、智能马桶、窗户、瓷砖、沙发、床等等这些是咱们讨论的范围。 在家装家居行业中&#xff0c;每个产品的客单价通常很高&#xff0c;回…

更改 HIVE 表字段数据类型有哪些注意事项?

更改 HIVE 表字段数据类型有哪些注意事项&#xff1f; 1. 使用 HIVE 表的常见规范 在大数据离线分析场景中&#xff0c;在数据建模/表格式这一层&#xff0c;目前使用最多的还是 APACHE HIVE 这一数据仓库框架&#xff08;湖仓一体的框架&#xff0c;如 Iceberg/DeltaLake/Hu…

深入理解 Web 协议:HTTP 2

目录 本篇将详细介绍 http2 协议的方方面面&#xff0c;知识点如下&#xff1a; HTTP 2 连接的建立 HTTP 2 中帧和流的关系 HTTP 2 中流量节省的奥秘&#xff1a;HPACK 算法 HTTP 2 协议中 Server Push 的能力 HTTP 2 为什么要实现流量控制&#xff1f; HTTP 2 协议遇到的…

记一次PDU接室外监控溶解事故

近期要新增20-30个室外监控&#xff0c;监控位于山道&#xff0c;山道长约1000米&#xff0c;根据以往惯例&#xff0c;要求从UPS接电。 室外设备箱如图&#xff1a; 施工方从UPS接电后&#xff0c;直接接接线板&#xff0c;从接线板接两个220V-24V海康监控电源&#xff0c;电…

MySQL8高级

MySQL8高级 一、Linux下MySQL的安装与使用 1、版本说明 MySQL Community Server 社区版本&#xff0c;开源免费&#xff0c;自由下载&#xff0c;但不提供官方技术支持&#xff0c;适用于大多数普通用户。MySQL Enterprise Edition 企业版本&#xff0c;需付费&#xff0c;不能…

软件测试基础-自动化测试技术

今天跟大家分享软件测试基础&#xff0c;自动化测试技术&#xff0c;主要从引入自动化测试的原因、自动化测试的定义、自动化测试的优势、自动化测试的劣势、自动化测试的工具五个方面来讲述。 01 引入自动化测试的原因 软件规模越来越大&#xff0c;用户对软件的质量要求越来…

基于PHP+MYSQL药店会员管理系统的设计与实现

药房会员管理系统是信息时代的产物,随着时代的发展,各大药店也与时俱进使用了各类现代化的系统来进行各类药品和会员信息的管理,甚至有些药店会给会员使用积分系统,根据用户的消费进行积分,然后用积分兑换一些差用的日常用品或者药品,从而增加会员的黏度。 PHP&#xff1a;MYSQ…

[SpringMVC1]简介与快速入门案例详解

文章目录 一、SpringMVC简介 1.概述 2.三大模块 二、SpringMVC快速入门 1.准备工作 &#xff08;1&#xff09;新建Maven项目&#xff0c;选择webapp模板 &#xff08;2&#xff09;新增java源文件包 2.开始配置SpringMVC (1)在pom.xml中导入相关坐标以下载需要用到的依赖…