川石教育
全国咨询热线:136-9172-9932
  1. 首页 > 资讯与干货 > IT资讯

Python单元测试框架—Pytest

作者:川石学院 日期:2021-11-04 13:42:38 点击数:

  一天一个关于测试知识点,5分钟内讲解你最关心的软件测试问题,今天就来谈谈关于软件测试中的“Python单元测试框架—Pytest”。

Python单元测试框架—Pytest(图1)

  Pytest概述

  Pytest也是python测试框架,与Python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,功能更强大。

  Pytest特征如下。

  l 断言提示信息更清楚。

  l 自动化加载函数与模块。

  l 支持运行由nose、unittest编写的测试case。

  l 支持Python2.3、Python2.7以及Python3.X。

  l 丰富的插件以及社区支持。

  l 支持参数化。

  l 支持失败重跑。

  l 支持多线程运行测试用例。

  l 支持分布式。

  由于Pytest不是python自带的,所以使用Pytest之前需要通过pip3命令安装。

  C:\Users\xiang>pip3 install -U Pytest

  查看Pytest版本如下。

  C:\Users\xiang>Pytest --version

  This is Pytest version 4.0.2,imported from c:\python37\lib\site-packages\Pytest.py

  下面是Pytest测试上一节提到的测试建议计算器的代码。

  案例2-8:用Pytest框架实现测试简易计算器。

  #coding=utf-8

  import Pytest

  from Util import util

  from Calculator import calculator

  from parameterized import parameterized

  class TestCalculator:

  def setup_class(self):

  print("测试开始")

  def test_base(self):

  j=calculator(4,2)

  util.AssertEqual(j.myadd(),6)

  util.AssertEqual(j.mysubs(),2)

  util.AssertEqual(j.mymultiply(),8)

  util.AssertEqual(j.mydivide(),2)

  def test_max_number(self):

  j=calculator(9223372036854775808,9223372036854775808)

  util.AssertEqual(j.mymultiply(),85070591730234615865843651857942052864)

  def test_subs(self):

  mydata = [[4,2,2],[2,4,-2],[4,4,0]]

  n=0

  for i in mydata:

  j=calculator(mydata[n][0],mydata[n][1])

  util.AssertEqual(j.mysubs(),mydata[n][2])

  n+=1

  @parameterized.expand([

  (4,2,2,),

  (2,4,-2,),

  (4,4,0,),

  ])

  def test_mysubs(self,a,b,p):

  util.AssertEqual(calculator(a,b).mysubs(),p)

  @Pytest.mark.website

  def test_multiply(self):

  mydata = [[4,2,8],[4,-2,-8],[-4,2,-8],[-4,-2,8]]

  n=0

  judge=True

  for i in mydata:

  j=calculator(mydata[n][0],mydata[n][1])

  util.AssertEqual(j.mymultiply(),mydata[n][2])

  n+=1

  @parameterized.expand([

  (4,2,8,),

  (4,-2,-8,),

  (-4,2,-8,),

  (-4,-2,8,),

  ])

  def test_mymultiply(self,a,b,p):

  util.AssertEqual(calculator(a,b).mymultiply(),p)

  def test_divide(self):

  j=calculator(4,0)

  util.AssertEqual(j.mydivide(),0)

  def teardown_class(self):

  print("测试结束")

  if __name__ == '__main__':

  Pytest.main(["-s","test_Calculator.py"])

  由于Pytest没有自己的断言方法,所以只能用python自身的断言。在这里所有的断言封装在一个名为Util.py的文件中。

  #!/usr/bin/env python

  #coding:utf-8

  class util:

  #判断a是否等于b

  def AssertEqual(a,b):

  assert a == b

  #判断a是否不等于b

  def AssertNotEqual(a,b):

  assert a != b

  #判断a是否大于等于b

  def AssertMoreEqual(a,b):

  assert a >= b

  #判断a是否大于b

  def AssertMore(a,b):

  assert a > b

  #判断a是否小与等于b

  def AssertLessEqual(a,b):

  assert a <= b

  #判断a是否小于b

  def AssertLess(a,b):

  assert a < b

  #判断a是否在b中

  def AssertIn(a,b):

  assert a in b

  #判断a是否不在b中

  def AssertNotIn(a,b):

  assert a not in b

  #判断b是否为空

  def AssertIsNone(b):

  if (b):

  assert 1==1

  else:

  assert 1==2

  #判断b是否不为空

  def AssertIsNone(b):

  if not (b):

  assert 1==1

  else:

  assert 1==2

  #用于判断n是否为素数

  def AssertPrime(n):

  if n <= 1:

  return False

  for i in range(2,n):

  if n % i == 0:

  return False

  return True

  #用于判断n是否不为素数

  def AssertNoPrime(n):

  return not AssertPrime(n)

  另外可以看到parameterized同样也可以在这里使用。运行输出结果如下。

  =============== RESTART: C:\python\unittest\test_Calculator.py ===============

  [1m============================= test session starts =============================[0m

  platform win32 -- Python 3.7.1,Pytest-4.0.2,py-1.7.0,pluggy-0.2.0

  rootdir: C:\python\unittest,inifile:

  [1mcollecting ... [0m[1m

  collected 12 items [0m

  test_Calculator.py 测试开始

  [32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m[32m.[0m除数不能为零

  [32m.[0m测试结束

  [32m[1m========================== 12 passed in 0.68 seconds ==========================[0m

  总结一下,Pytest 必须遵循以下规则。

  如果想用Pytest寻找整个目录下的测试用例,那么文件名必须以test_开头或者以test结尾

  测试类以Test开头,并且不能带有init方法。

  测试函数以test开头。

  Pytest不支持中文路径,如果项目路径中有中文会报错。


相关文章
  • 亚马逊运营成功转行软件测试,薪资13K表示很满意!2021-11-04 13:42:38
  • 西安川石的兰朋友喊你来当他的学弟学妹啦!2021-11-04 13:42:38
  • 国外的月亮也不一定比国内测试猿的年薪美~2021-11-04 13:42:38
  • 建筑工程专业朱同学成功转行为软件测试人!2021-11-04 13:42:38
  • 财务管理专业转行软件测试月薪甩会计几条街!2021-11-04 13:42:38
  • 只有技术沉淀才能成功上岸,深圳就业薪资13K!2021-11-04 13:42:38
  • 薪资11K!实现自我价值,从掌握一门IT技术开始...2021-11-04 13:42:38
  • 文科生转行软件测试照样拿下高薪15K!2021-11-04 13:42:38
  • 恭喜罗同学喜提19.5K,成功入行软件测试!2021-11-04 13:42:38
  • 毕业1年,迷茫的他最终选择转行软件测试2021-11-04 13:42:38