当前位置: 首页 > news >正文

python assert 不退出_Pytest中断言的重要性,就不需要我重复了吧

bcd1a81197aa013c6c8d3767e3cd19d4.gif

出品 | 51Testing软件测试网

443076a397335215cb904801f2b17199.png

前言 

我们在写自动化的过程中,用例的断言也是至关重要的,断言可以帮助我们判断用例测试点是否成功和失败。当然在我们这么强大的Pytest框架中,断言也是比较强大的。为什么?继续往下看 。

52f72b1c9f668cabd53a36e95c0e584a.png

Pytest断言

前面说到Pytest的断言比较强大,它直接可以使用Python自带的断言内容,当然不止而已,Pytest还有一个重要的功能是可以重写Assert关键字,Pytest会截断对Python中自带的Assert的调用然后替换成自己定位的Assert,从而可以获取更多的错误信息,让我们知道具体哪里出现了问题。

编写一个加法进行通过断言验证:

import pytestclass Test_01:    def add(self,x,y):            c = x + y            return c    def test_001(self):        c = self.add(1,2)        assert c == 4if __name__ == '__main__':    pytest.main(['-s'

看到上面的代码大家都知道是会失败的, 那么我们一起看下Pytest断言会给我们增加哪些新的报错信息。

3f0994c9c80b7d10763649472ccbd0b5.png

从上图的结果中可以看出带“>”的是Python自带的错误解释,而带E的则是Pytest进行添加的,这样就能很清楚的看到错误信息,比如这个3==4结果是错误的。

dbfa5ddaad4b2d9815aa2a61ea9604ac.png

增加断言详细信息

在编写用例的时候,断言的时候想要获取一些更加有用的信息,比如参数化的时候,需要知道哪个参数进行传入的,如果出错了可以帮助我们进行调试,那么这一点Pytest中的Assert也可以帮助我们进行增加。

import pytestclass Test_01:    def add(self,x,y):            c = x + y            return c    def test_001(self):        a = 1        b = 2        assert self.add(a,b) == 4 , '当前传入的a值:%s,传入的b值:%s' %(a,b)if __name__ == '__main__':    pytest.main(['-s

a327dcbfd4193c20b9850a2850a90580.png

很清楚的看到了Python自带的Assert和Pytest增加的对比,Python自带的没有把值传入,Pytest帮助我们把值传入进去,更加清楚的帮助查看错误信息。

fc4110b92d71d94a770bc9a3ee5da17e.png

异常断言

Pytest断言方法内容应该没有Unittests多,但是比Unittest更加方便,更加灵活。这里安静在举一个栗子。比如我们在执行一条错误的用例的时候,已经知道错误类型,这个时候我们也可以通过判断这个错误类型,如果错误类型和预期一致,那么就直接通过用例,反之失败。

安静先写一个错误的函数,然后找到他的错误类型,下面的函数错误类型为"AssertionError"

def cake():        a = 'anjing'        b = 'test_anjing'        assert  a == bcake()------------执行结果-------------- File "E:/auto_test/test_01.py", line 5, in     cake()  File "E:/auto_test/test_01.py", line 4, in cake    assert  a == bAssertionError

这里可以使用pytest.raises(错误类型)进行对比断言。

import pytestclass Test_01:    def cake(self):        a = 'anjing'        b = 'test_anjing'        assert  a == b    def test_001(self):        print('Test_01下的用例001')        with pytest.raises(AssertionError):            self.cake()if __name__ == '__main__':    pytest.main(['-v

这个从表面上运行结果肯定是失败的,因为a不等于b,但是加入Pytest的断言运行后就成功了。

f2161189517235253e8392b2c799d1d8.png

上文中的异常断言,可以进行实例化,实例化过后存在三个可以用的方法,分别是.type,.value,.traceback安静简单的进行举例说明

.type

我们这里也可以通过pytest.raises进行断言,我们可以根据返回的tpye进行对比,查看我们预期的与实际的是否一致

import pytestclass Test_01:    def cake(self):        a = 'anjing'        b = 'test_anjing'        assert  a == b    def test_001(self):        print('Test_01下的用例001')        with pytest.raises(AssertionError) as excinfo:            self.cake()        print('错误的类型是:%s' %excinfo.type)        assert excinfo.type == AssertionErrorif __name__ == '__main__':    pytest.main(['-s

51aead1879da796c3becdbdbb5066e6a.png

.value

如果还不知道具体的错误出现在哪里,我们也可以通过value进行查看具体的错误类型。

import pytestclass Test_01:    def cake(self):        a = 'anjing'        b = 'test_anjing'        assert  a == b    def test_001(self):        print('Test_01下的用例001')        with pytest.raises(ZeroDivisionError) as excinfo:            self.cake()        print('错误的类型是:%s' %excinfo.type)        print('错误的值:%s'%excinfo.value)        assert excinfo.type == ZeroDivisionErrorif __name__ == '__main__':    pytest.main(['-s

e7721890c485b0a3860d17ad84030262.png

可以看出具体错误的值是Assert中的两个字符串不相等导致的。

.traceback

这里这个方法表示可以把代码中哪行出现了错误进行打印出来,此方法必须在str下进行打印。

4bae8bc8d653d4d7aab3c163a7f71e10.png

a0739a38cde037d61425df12781680fa.png

Pytest常用断言

前面也介绍了Pytest的断言可以复用Python的断言,安静简单的列举几个Python的断言

1、判断是否为真:assert xx

2、判断不为真:assert not xx

3、判断a是否包含b:assert a in b

4、判断a不包含b:assert a not in b

5、判断两值相等:assert b == a

6、判断两值不相等:assert a != b

安静对常用断言简单的举几个例子。

import pytestclass Test:    def is_true(self):        '''返回True'''        return True    def test_01(self):        '''判断是否为真'''        assert self.is_true()    def is_false(self):        '''返回False'''        return False    def test_02(self):        '''判断不为真'''        assert not self.is_false()    def test_03(self):        '''判断是否相等'''        a = 'test_anjing'        b = 'test_anjing'        assert a == b    def test_04(self):        '''判断两值不相等'''        a = 'test_anjing'        b = 'anjing'        assert a != b    def test_05(self):        '''判断a包含b'''        a = 'test_anjing'        b = 'anjing'        assert b in a    def test_06(self):        '''判断a不包含b'''        a = 'anjing'        b = 'test'        assert b not in aif __name__ == '__main__':    pytest.mai

c923e87e7e234469e3e989c0e021218f.png

83a56d005b21aa34a5b532a87b323564.gifEND 811713299788ab7074ff811871a15d1e.gif

202b0c11e5254d3f69ba8eb17db8d8d4.gif

推荐阅读

点击阅读☞什么是断言?教你通过Postman增加断言!

点击阅读☞JMeter排忧解难——数据库断言

点击阅读☞UFT之使用断言来控制脚本流

点击阅读☞常用插件Pytest的测试用例相关问题总结

点击阅读☞Python测试框架Pytest的常用插件测试报告

1335c01eaaa920637a1b0aa10033a95a.gif

ac32db57f3f49a1ee28a3d026be38153.png

相关文章:

  • IDEA中Lombok插件的安装与使用
  • python坦克大战_python资料领取:尚学堂201903期python全栈(0基础到就业)
  • 【leetcode】88. 合并两个有序数
  • aix么把占用的端口释放掉_UNIX系统如何释放被异常占用的端口 - 河北分行(秦永峰)...
  • redis 多维度排序_解决Redis Cluster模式下的排序问题
  • python基础学习01
  • 不同平台安装python方式一样_大厦的基石,成为一个Python工程师的第一步——安装Python...
  • vue 多页面应用例子_用vue构建多页面应用
  • 6.7 二分查找
  • oracle手工收集awr报告_oracle手工生成AWR报告方法
  • 《杜拉拉升职记》//TODO
  • php缓存accestoken_php微信开发(1):缓存access_token的方法
  • git 更新代码到本地
  • python subprocess使用_python subprocess使用-阿里云开发者社区
  • tomcat日志神器--kibana
  • 0x05 Python数据分析,Anaconda八斩刀
  • 2017 前端面试准备 - 收藏集 - 掘金
  • Angular 4.x 动态创建组件
  • express.js的介绍及使用
  • happypack两次报错的问题
  • markdown编辑器简评
  • miaov-React 最佳入门
  • mysql_config not found
  • python大佬养成计划----difflib模块
  • Python利用正则抓取网页内容保存到本地
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • SpiderData 2019年2月13日 DApp数据排行榜
  • VuePress 静态网站生成
  • 基于webpack 的 vue 多页架构
  • 基于遗传算法的优化问题求解
  • 记录一下第一次使用npm
  • 1.Ext JS 建立web开发工程
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • (04)odoo视图操作
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (附源码)计算机毕业设计大学生兼职系统
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (论文阅读11/100)Fast R-CNN
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (转)scrum常见工具列表
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .chm格式文件如何阅读
  • .NET Project Open Day(2011.11.13)
  • .Net Remoting(分离服务程序实现) - Part.3
  • .NET 常见的偏门问题
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .NET6 开发一个检查某些状态持续多长时间的类
  • .net的socket示例
  • @ComponentScan比较
  • @Documented注解的作用
  • [ 第一章] JavaScript 简史