全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

pytest框架四之断言

发布时间:2022-09-02 17:12:10
发布人:qyf

  今天这篇技术文章要分享的是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培训服务经验,采用全程面授高品质、高体验培养模式,拥有国内一体化教学管理及学员服务,助力更多学员实现高薪梦想。

相关文章

ITSS各级别之间有什么联系?

ITSS各级别之间有什么联系?

2023-10-14
什么是软件定义存储(SDS)?

什么是软件定义存储(SDS)?

2023-10-14
DeepMind和OpenAI身后的两大RL流派有什么具体的区别?

DeepMind和OpenAI身后的两大RL流派有什么具体的区别?

2023-10-14
软件开发管理流程中会出现哪些问题?

软件开发管理流程中会出现哪些问题?

2023-10-14

最新文章

常见网络安全面试题:Windows常用的命令有哪些?

常见网络安全面试题:Windows常用的命令有哪些?

2023-10-09
常见网络安全面试题:根据设备告警如何展开排查?

常见网络安全面试题:根据设备告警如何展开排查?

2023-10-09
常见网络安全面试题:mysql加固呢?(数据库加固)

常见网络安全面试题:mysql加固呢?(数据库加固)

2023-10-09
常见网络安全面试题:windows和linux加固?(操作系统加固)

常见网络安全面试题:windows和linux加固?(操作系统加固)

2023-10-09
在线咨询 免费试学 教程领取