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

Pytest是通过什么进行参数化的

作者:川石学院 日期:2021-11-09 17:15:30 点击数:

  一天一个关于测试知识点,5分钟内讲解你最关心的软件测试问题,今天就来谈谈关于软件测试中的“Pytest是通过什么进行参数化的”。

Pytest是通过什么进行参数化的(图1)

  Pytest可以通过fixtures、Mark_Usefixtures外部数据对测试用例进行参数化。

  1. 通过fixtures参数化

  案例2-15:通过fixtures参数化。

  #利用fixtures的params

  import Pytest

  from Calculator import calculator

  from Util import util

  @Pytest.fixture(params=[{'first':20,"second":30,"result":50},{'first':20,"second":20,"result":40}])

  def account_provider(request): #request是固定的。

  return request.param #request.parm也是固定的。

  def test_Calculato(account_provider):

  j=calculator(account_provider["first"],account_provider["second"])

  util.AssertEqual(j.myadd(),account_provider["result"])

  if __name__ == '__main__':

  Pytest.main(["-sv","Test_Parms_By_Pytest_Fixture.py"])

  运行结果如下。

  …

  collected 2 items [0m

  [32m[1m========================== 2 passed in 0.32 seconds ===========================[0m

  >>>

  由于有两组参数,所以测试用例认为有两个测试用例。

  2. 通过Mark_Usefixtures参数化

  案例2-16:通过Mark_Usefixtures参数化。

  #利用Mark_Usefixtures的params

  import Pytest

  from Calculator import calculator

  from Util import util

  @Pytest.fixture(params=[{'first':20,"second":30,"result":50},{'first':20,"second":20,"result":40}])

  def account_provider(request): #request是固定的。

  return request.param #request.parm也是固定的。

  @Pytest.mark.usefixtures("account_provider")

  def test_Calculato(account_provider):

  j=calculator(account_provider["first"],account_provider["second"])

  util.AssertEqual(j.myadd(),account_provider["result"])

  if __name__ == '__main__':

  Pytest.main(["-sv","Test_Parms_By_Mark_Usefixtures.py"])

  注意:使用fixture标记函数后,函数将默认接入一个request参数,它将包含使用该fixture函数的信息,这样可以更加灵活的根据不同的函数来决定创建不同的对象以及释放函数。 举例来说userfixtures可以用作setup()和teardown()。

  3. 通过外部数据参数化

  案例2-17:通过外部数据参数化。

  Util.py读取同目录下名为data.xlsx的Excel文件,文件格式如图2-35所示。

  import xlrd

  from xlutils.copy import copy

  …

  #读取Excel文件

  def read_from_excel():

  fname = './data.xlsx’

  filename = xlrd.open_workbook(fname)

  sheets = filename.nsheets

  sheet1 = filename.sheets()[0]

  nrows1 = sheet1.nrows

  row_list = []

  for i in range(0,nrows1):

  row_datas = sheet1.row_values(i)

  row_list.append(row_datas)

  return row_list

  测试程序。

  import Pytest

  from Calculator import calculator

  from Util import util

  #直接写函数读取外部文件生成数据值,注意values返回值是个list

  values = util.read_from_excel()

  @Pytest.mark.parametrize('v',values)

  def test_login(v):

  print(values)

  print(v)

  j=calculator(v[0],v[1])

  util.AssertEqual(j.myadd(),v[2])

  if __name__ == '__main__':

  Pytest.main(["-sv","Test_Parms_By_Pytest_Mark_Parametrize.py"])

Pytest是通过什么进行参数化的(图2)

  图2-35 data.xlsx文件格式

  运行结果为。

  …

  Test_Parms_By_Pytest_Mark_Parametrize.py::test_login[v0] [[100.0,200.0,300.0],[1.0,5.0,6.0]]

  [100.0,200.0,300.0]

  [32mPASSED[0m

  Test_Parms_By_Pytest_Mark_Parametrize.py::test_login[v1] [[100.0,200.0,300.0],[1.0,5.0,6.0]]

  [1.0,5.0,6.0]

  [32mPASSED[0m

  [32m[1m========================== 2 passed in 0.28 seconds ===========================[0m

  测试框架把Excel第一列赋值给v1、第二列赋值给v2…。

本章节关于“Pytest是通过什么进行参数化的”就学习到这里了,每个工作日小编都会更新一个小知识,希望大家多多关注我们,一起来学习喔!


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