目前市面上流行的测试框架有两种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框架及其应用原理相关推荐

  1. 自动化测试框架-pytest框架入门篇

    前段时间,九九姐更新了自动化测试中unittest框架,然后有很多小伙伴私聊九九姐,说想学习一下pytest框架的内容.既然大家已经说话了,九九姐怎么能不安排呢,所以今天就给大家说一说pytest框架 ...

  2. 面经-软件测试面试常见面试题全套合集系列unittest框架面试题 pytest框架面试题 性能测试面试题 4-4

    目录 前言: 十二. Unittest框架 12.1  你们自动化用例是怎么管理的? 12.2  Web UI自动化都用到过哪些库? 12.3  Unittest框架的原理? 12.4  Unitte ...

  3. 基于Selenium与Pytest框架的Web UI自动化测试系统的设计与实现

    摘要 随着互联网的高速发展,软件技术日新月异,产品更新换代的加快等,始终都离不开一个最核心的要素就是保证产品的质量,测试人员则在其中担任着不可或缺的角色.测试人员的主要工作职责就是通过各种测试手段去发 ...

  4. pytest框架安装(MacOS)

    pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,比 unittest 框架使用起来更简洁,效率更高.pytest容易上手,入门简单,文档丰富,文档中有很 ...

  5. python scrapy框架原理_Scrapy框架的工作原理是什么?

    Scrapy框架的工作原理是什么? Scrapy架构 学习Scrapy框架,从理解它的架构开始.图1所示是Scrapy的架构图. 从图1可知,Scrapy框架主要包含以下组件: (1)Scrapy E ...

  6. pytest框架_Python最火的第三方开源测试框架——pytest

    一.介绍 本篇文章是介绍的是Python 世界中最火的第三方单元测试框架:pytest.它有如下主要特性: assert 断言失败时输出详细信息(再也不用去记忆 self.assert* 名称了) 自 ...

  7. 好程序员web前端分享MVVM框架Vue实现原理

    好程序员web前端分享MVVM框架Vue实现原理,Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的.相比于Angular.js和react.js更加简洁 ...

  8. Pytest框架集成Allure定制测试报告详解(一)

    Allure简介 Allure是一款非常轻量级并且非常灵活的开源测试报告生成框架. 它支持绝大多数测试框架, 例如TestNG.Pytest.JUint等.它简单易用,易于集成.下面就Pytest如何 ...

  9. pytest框架实现一些前后置(固件,夹具)的处理

    pytest框架实现一些前后置(固件,夹具)的处理,常用的有三种 一.setup/teardown,setup_class/teardown_class所有 为什么需要这些功能? 比如:web自动化执 ...

最新文章

  1. Myeclise下tomcat启动报错,启动超时
  2. 除 Java 外,还有哪些编程语言蹭了 JVM 的车票?
  3. leetcode 1189 python
  4. 外模告急时薪翻倍?中国AI虚拟模特取代高价外模,效果逼真与真人无异。
  5. 给Xcode增加复制行、删除行快捷键的方法
  6. Spring Boot_打造企业级微信点餐系统_汇总贴
  7. python大家都是怎么学的_你们都是怎么学 Python 的?
  8. 使用JAVA基础语法做一个简易的发票管理系统
  9. via浏览器如何拦截广告
  10. pandas——解决excel科学计数法问题
  11. 实现黑客帝国中的代码雨 快进来学(附源代码)
  12. 故事系列之一:围棋世界里看天赋和勤奋
  13. Linux iio驱动学习
  14. 数字化时代已经改变了我们的沟通方式
  15. ORA-01045: user ICCS lacks CREATE SESSION privilege; logon denied
  16. 【百问网】七天智能家居实战
  17. Photoshop Cs5上经常使用的快捷键汇总
  18. 生命灯:年赚100万太少,500万不多
  19. -- 某大学生写给女朋友的信
  20. 滤波器基础01——滤波器的种类与特性

热门文章

  1. 【前端CSS】offsetLeft,Left,clientLeft的区别
  2. Objective-C中的instancetype和id区别
  3. 超声成像_人工智能如何帮助转变医学超声成像
  4. 第三--JVM与线程
  5. Simulink基础【1】-弹簧-阻尼模型的常微分方程求解
  6. 静态博客网页中的网易云音乐播放器
  7. 微信小程序云开发完整案例
  8. Windows配置万德(Wind)量化接口
  9. Python做手写数字识别
  10. PowerQuery的参数表格用法