千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > pytest框架四之断言

pytest框架四之断言

来源:千锋教育
发布人:qyf
时间: 2022-09-02 17:12:10 1662109930

  今天这篇技术文章要分享的是pytest框架当中的断言。会从以下几个方面来分享:

pytest框架四之断言

  一、断言的概念

  简单来讲就是实际结果和期望结果去对比,符合预期结果那就测试通过,不符合预期那就测试失败。

  二、pytest框架断言常用的方法

  在pytest框架里面,断言主要是用到assert

  assert xx 判断xx为真

  assert not xx 判断xx不为真

  assert a in b 判断b包含a

  assert a == b 判断a等于b

  assert a != b 判断a不等于b

  三、pytest框架的断言与unittest框架的断言有什么区别

  在pytest框架里面,断言只用一种方式assert就可以实现了,简单方便。

  unittest框架里面,断言分了好几种类型:

  1、基本的布尔断言,即:要么正确,要么错误的验证

  断言方法 断言描述

  assertEqual(arg1, arg2, msg=None) 验证arg1=arg2,不等则fail

  assertNotEqual(arg1, arg2, msg=None) 验证arg1 != arg2, 相等则fail

  assertTrue(expr, msg=None) 验证expr是true,如果为false,则fail

  assertFalse(expr,msg=None) 验证expr是false,如果为true,则fail

  assertIs(arg1, arg2, msg=None) 验证arg1、arg2是同一个对象,不是则fail

  assertIsNot(arg1, arg2, msg=None) 验证arg1、arg2不是同一个对象,是则fail

  assertIsNone(expr, msg=None) 验证expr是None,不是则fail

  assertIsNotNone(expr, msg=None) 验证expr不是None,是则fail

  assertIn(arg1, arg2, msg=None) 验证arg1是arg2的子串,不是则fail

  assertNotIn(arg1, arg2, msg=None) 验证arg1不是arg2的子串,是则fail

  assertIsInstance(obj, cls, msg=None) 验证obj是cls的实例,不是则fail

  assertNotIsInstance(obj, cls, msg=None) 验证obj不是cls的实例,是则fail

  2.比较断言,如比较两个变量的值(跟上面的布尔断言区别不大,主要是通过比较两个变量的值得出布尔值)

  assertAlmostEqual (first, second, places = 7, msg = None, delta = None)

  验证first约等于second。 palces: 指定精确到小数点后多少位,默认为7

  assertNotAlmostEqual (first, second, places, msg, delta)

  验证first不约等于second。 palces: 指定精确到小数点后多少位,默认为7

  注: 在上述的两个函数中,如果delta指定了值,则first和second之间的差值必须≤delta

  assertGreater (first, second, msg = None)

  验证first > second,否则fail

  assertGreaterEqual (first, second, msg = None)

  验证first ≥ second,否则fail

  assertLess (first, second, msg = None)

  验证first < second,否则fail

  assertLessEqual (first, second, msg = None)

  验证first ≤ second,否则fail

  assertRegexpMatches (text, regexp, msg = None)

  验证正则表达式regexp搜索匹配的文本text。 regexp:通常使用re.search()

  assertNotRegexpMatches (text, regexp, msg = None)

  验证正则表达式regexp搜索不匹配的文本text。 regexp:通常使用re.search()

  3.复杂断言(一般用的比较少,像断言两个列表、元组等) (省略)

  从上面也可以看出来,unittest框架的断言的确是比pytest框架要复杂很多。

  四、pytest框架断言的使用

  除了上面说的常用的断言方法:

  assert xx 判断xx为真

  assert not xx 判断xx不为真

  assert a in b 判断b包含a

  assert a == b 判断a等于b

  assert a != b 判断a不等于b

  还可以这么用:

  1、想知道断言失败时的一些关于失败的原因等说明信息,assert也能满足该功能。

  assert 断言的内容,”断言的说明”

  2、一些测试用例中,比如异常测试用例,测试的结果必然是失败会报出异常的。这时候用例的期望结果就是该异常。

  对于异常的断言,Pytest的语法是:with pytest.raises(异常类型)

  最后给大家附上代码:

  # #!/usr/bin/python3

  # -*- coding: utf-8 -*-

  # @Author : 九九

  # @FileName: test_assert.py

  # @Software: PyCharm

  import pytest

  # 定义一个测试类

  class TestAssert():

  # 定义一个功能

  # 传一个变量,判断变量是否为偶数,如果为偶数则用例通过,否则用例失败

  def func1(self,a):

  if a%2==0:

  return True

  else:

  return False

  # 定义一个测试用例

  def test_func1(self):

  assert self.func1(3)

  # 定义一个测试用例,验证包含断言的方法

  def test_in(self):

  # 定义一个列表

  list_demo=[1,2,3,4,5,6]

  # 验证数字3是不是在list_demo里面,如果在,则用例通过,否则用例失败

  assert 3 in list_demo

  # 定义一个测试用例,验证断言的不包含方法

  def test_notin(self):

  list_demo = [1, 2, 3, 4, 5, 6]

  # 验证数字7不包含在list_demo里面,如果不包含,则用例通过,否则用例失败

  assert 5 not in list_demo

  # 定义一个测试用例,验证断言的判断相等的方法

  def test_ass(self):

  name="九九"

  assert name=="九","变量的名字,和最终预期的名字不一致,所以失败"

  # 定义一个测试用例,验证异常信息断言

  def test_zero_division(self):

  # 断言异常

  with pytest.raises(ZeroDivisionError) as exc:

  1/0

  # 判断异常的类型是否和预期一致

  assert exc.type==ZeroDivisionError

  # 断言异常的value值和预期是否一致

  assert "division by sss" in str(exc.value)

  更多关于软件测试培训的问题,欢迎咨询千锋教育在线名师。千锋教育拥有多年IT培训服务经验,采用全程面授高品质、高体验培养模式,拥有国内一体化教学管理及学员服务,助力更多学员实现高薪梦想。

tags:
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT