初识pytest框架及其应用原理
目前市面上流行的测试框架有两种unittest以及pytest,接下来我们来学习下pytest,pytest与unittest的区别有什么呢,首先是pytest框架自带生成测试报告的库,我们不需要使用unittest借助第三方的包来进行生成,其次pytest上手容易,并且自带的插件功能十分强大,这是unittest所不具备的,另外就是unittest的坑其实还是比较多的,所以pytest我个人比较主推!
首先我们要使用pytest我们需要先安装下pytest,打开电脑终端cmd,
pip install pytest
接下来我们直接编写代码示例:
import pytestdef test_b():print('-------test_b---------')def test_a():print('--------test_a--------')if __name__ == '__main__':pytest.main()
运行以上代码,我们可以看到结果分别打印了以上内容,并且看到打印的顺序是test_b在先的,并没有根据a-z的执行方式,并且我们并不需要以类的方式才能够继承pytest的框架,这点区别于unittest。
为了项目规范一点 我们还是尽量把方法写到类里面,pytest框架也存在类前置方法与单用例前置!
import pytest
class Testmethod:def setup_class(self):print('--------setupclass----------')def teardown_class(self):print('--------setupclass----------')def test_a(self):print('---------testa----------')def test_b(self):print('---------testb------------')def setup(self):print('---------setup------------')def teardown(self):print('----------teardown--------------')if __name__ == '__main__':pytest.main(['-s','test_one.py'])
与unittest相同的是前置方法名称也是固定的,先执行类前置–>单用例前置–>方法用例–>用例后置–>类后置。pytest.main()方法括号中的"-s"是能够显示出方法实现的内容,文件名称是为了运行时固定这个文件。我们也可以在终端中运行。打开pycharm的终端:
进入当前路径输入:pytest -s test_one.py (test_one.py文件名,需根据自身文件名称修改)
我们可以看到运行时发现了两个用例,并且进行执行了,通过了两个用例,耗时0.03秒。
接下来我们讲一下pytest.mark,这个是pytest中的标记,属于一种装饰器,能力比较强大!
import pytest
class Testmethod:@pytest.mark.test01def test_a(self):print('---------testa----------')def test_b(self):print('---------testb------------')
在这里我们可以看到我们在test_a()的方法上面进行了一个标记,然后我们在终端中进行运行pytest -s -m test01 test_one.py:
这个时候我们会发现,只执行了一个用例,test_b()方法并没有执行,这个标记的作用就是让我们只执行我们标记的内容,test01是随便命名的一个标记名,你可以命名为001,test_1等等,-m参数是执行标记内容,未进行过标记会全部执行,后面跟的文件名称是执行某个文件内标记的方法,不传文件名的化,会执行当前路径下所有文件符合的内容。
标记名可以有多个,一个可以多用:
import pytest
class Testmethod:@pytest.mark.test01def test_a(self):print('---------testa----------')def test_b(self):print('---------testb------------')@pytest.mark.test01def test_c(self):print('---------testc------------')
采用以上运行命令,我们会发现执行了test_a()与test_c()方法,我们还可以命名不同的标记名:
import pytest
class Testmethod:@pytest.mark.test01def test_a(self):print('---------testa----------')def test_b(self):print('---------testb------------')@pytest.mark.test02def test_c(self):print('---------testc------------')
以上我们可以看到有一个标记名test01一个标记名test02,那么我们在终端可以输入:pytest -s -m “test01 or test02” test_one.py
这里需要注意下:"test01 or test02"需要用双引号,双引号具有转译功能,使用单引号的话,是无法识别or,多个标记就继续使用or连接!
这里我们可以看到执行了两个方法!
skip:跳过(@pytest.mark.skip)
有些时候我们部分用例并不需要执行,这个时候我们就可以用到这个标记,跳过该用例:
import pytest
class Testmethod:@pytest.mark.skipdef test_a(self):print('---------testa----------')def test_b(self):print('---------testb------------')
我们依然可以在pycharm中或者终端中运行:pytest -s test_one.py
我们可以看到test_a()方法被跳过了,之执行了test_b()方法!
skipif:@pytest.mark.skipif(condition,reason=None)
通过字面意思我们可以明白到,当我们满足某种条件后可以跳过该用例,reason=是让我们填写原因,为什么想执行,为什么不想执行:
import pytest
class Testmethod:@pytest.mark.skipif(5>2,reason='不想执行')def test_a(self):print('---------testa----------')@pytest.mark.skipif(0>1,reason='不满足条件就执行吧')def test_b(self):print('---------testb------------')
if __name__ == '__main__':pytest.main(['-s','test_one.py'])
终端中运行不显示原因,所以这一次我们在pycharm中运行:
我们可以看到test_a()满足了条件所以被跳过了,test_b()不满足跳过条件,所以仍然被执行了,跳过的原因也显示了出来"不想执行"!
parametrize:参数化(@pytest.mark.parametrize())
unittest框架想要实现参数化只能借助第三方库ddt才可实现参数化执行,pytest自带的装饰器就可以满足参数化的实现:
import pytest
class Testmethod:@pytest.mark.parametrize('name',["小明",'李雷','韩梅梅'])def test_a(self,name):print(name)if __name__ == '__main__':pytest.main(['-s','test_one.py'])
name是指参数的名称,列表中的是参数值,然后我们把参数名称传给下面的方法,这样就可以实现了参数化,运行以上结果,会依次输出小明,李雷,韩梅梅。那么如果存在多个参数呢?
import pytest
class Testmethod:@pytest.mark.parametrize(('name','age'),[("小明",18),('李雷',20),('韩梅梅',25)])def test_a(self,name,age):print(name+'今年'+str(age))if __name__ == '__main__':pytest.main(['-s','test_one.py'])
以上我们可以看出,参数名以元组形式存放,参数值存在在list中,并以元组形式一一对应存放。运行以上代码我们可以得出以下结果:
以上是关于pytest框架中一些基础的运用以及与unittest存在的差异性,后面小编会介绍一下pytest如何生成测试报告,失败重试机制以及自定义pytest的运行规则等知识!希望喜欢的朋友可以多多推广,让更多的朋友一起学习交流!
初识pytest框架及其应用原理相关推荐
- 自动化测试框架-pytest框架入门篇
前段时间,九九姐更新了自动化测试中unittest框架,然后有很多小伙伴私聊九九姐,说想学习一下pytest框架的内容.既然大家已经说话了,九九姐怎么能不安排呢,所以今天就给大家说一说pytest框架 ...
- 面经-软件测试面试常见面试题全套合集系列unittest框架面试题 pytest框架面试题 性能测试面试题 4-4
目录 前言: 十二. Unittest框架 12.1 你们自动化用例是怎么管理的? 12.2 Web UI自动化都用到过哪些库? 12.3 Unittest框架的原理? 12.4 Unitte ...
- 基于Selenium与Pytest框架的Web UI自动化测试系统的设计与实现
摘要 随着互联网的高速发展,软件技术日新月异,产品更新换代的加快等,始终都离不开一个最核心的要素就是保证产品的质量,测试人员则在其中担任着不可或缺的角色.测试人员的主要工作职责就是通过各种测试手段去发 ...
- pytest框架安装(MacOS)
pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,比 unittest 框架使用起来更简洁,效率更高.pytest容易上手,入门简单,文档丰富,文档中有很 ...
- python scrapy框架原理_Scrapy框架的工作原理是什么?
Scrapy框架的工作原理是什么? Scrapy架构 学习Scrapy框架,从理解它的架构开始.图1所示是Scrapy的架构图. 从图1可知,Scrapy框架主要包含以下组件: (1)Scrapy E ...
- pytest框架_Python最火的第三方开源测试框架——pytest
一.介绍 本篇文章是介绍的是Python 世界中最火的第三方单元测试框架:pytest.它有如下主要特性: assert 断言失败时输出详细信息(再也不用去记忆 self.assert* 名称了) 自 ...
- 好程序员web前端分享MVVM框架Vue实现原理
好程序员web前端分享MVVM框架Vue实现原理,Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的.相比于Angular.js和react.js更加简洁 ...
- Pytest框架集成Allure定制测试报告详解(一)
Allure简介 Allure是一款非常轻量级并且非常灵活的开源测试报告生成框架. 它支持绝大多数测试框架, 例如TestNG.Pytest.JUint等.它简单易用,易于集成.下面就Pytest如何 ...
- pytest框架实现一些前后置(固件,夹具)的处理
pytest框架实现一些前后置(固件,夹具)的处理,常用的有三种 一.setup/teardown,setup_class/teardown_class所有 为什么需要这些功能? 比如:web自动化执 ...
最新文章
- Myeclise下tomcat启动报错,启动超时
- 除 Java 外,还有哪些编程语言蹭了 JVM 的车票?
- leetcode 1189 python
- 外模告急时薪翻倍?中国AI虚拟模特取代高价外模,效果逼真与真人无异。
- 给Xcode增加复制行、删除行快捷键的方法
- Spring Boot_打造企业级微信点餐系统_汇总贴
- python大家都是怎么学的_你们都是怎么学 Python 的?
- 使用JAVA基础语法做一个简易的发票管理系统
- via浏览器如何拦截广告
- pandas——解决excel科学计数法问题
- 实现黑客帝国中的代码雨 快进来学(附源代码)
- 故事系列之一:围棋世界里看天赋和勤奋
- Linux iio驱动学习
- 数字化时代已经改变了我们的沟通方式
- ORA-01045: user ICCS lacks CREATE SESSION privilege; logon denied
- 【百问网】七天智能家居实战
- Photoshop Cs5上经常使用的快捷键汇总
- 生命灯:年赚100万太少,500万不多
- -- 某大学生写给女朋友的信
- 滤波器基础01——滤波器的种类与特性