资讯专栏INFORMATION COLUMN

Pytest架构之fixture详细说明(三)

89542767 / 199人阅读

  原文中详细的讲解了Pytest架构之fixture,原文中根据实例编码推荐的十分详尽。对大家学习培训和工作具有很强的参阅参考意义,需用的小伙伴可以参考一下


  原文中有关fixture的具体内容如下所示:


  1、参数化设计fixture


  2、fixture工厂


  3、request这一fixture


  1、参数化设计fixture


  fixture有个params主要参数,容许大家传送数据。


  词法文件格式:


  #conftest.py文件
  #fixture的params参数
  #取value1时,会把依赖此fixture的用例执行一遍。
  #取value2时,会把依赖此fixture的用例执行一遍。
  #取value3时,会把依赖此fixture的用例执行一遍。
  #params有几个参数,就会将依赖此fixture的用例执行几遍。
  pytest.fixture(params=[value1,value2,value3..])
  def fix_name():
  #do something


  在我们需用数次调用fixture时,则可使用fixture的参数化设计作用。


  但它不是高并发的,是串行通信实施的。


  例如,实验对象有很多种配备方法,那样参数化设计能帮大家在多种多样配备方法下实行功能测试。


  下边,以网页页面自动化技术为实例。


  要求:要在google、firefox浏览器下实行功能测试,用被列开启网页搜索pytest。


  1)先往conftest.py之中,界定fixture,并设定params=["google","firefox"]


  #conftest.py
  #params设置为google和firefox
  pytest.fixture(params=["google","firefox"])
  def browser_fix(request):
  if request.param=="google":
  driver=webdriver.Chrome()
  elif request.param=="firefox":
  driver=webdriver.Firefox()
  else:
  driver=None
  yield driver
  if driver:
  driver.quit()


  2)在测试用例文件test_baidu_action.py中,编写测试用例,并调用browser_fix


  #test_baidu_action.py
  pytest.mark.usefixtures("browser_fix")
  def test_baidu(browser_fix):
  driver=browser_fix
  driver.get("https://www.baidu.com/")
  driver.find_element(By.ID,"kw").send_keys("pytest",Keys.ENTER)
  loc=(By.XPATH,'//h3')
  WebDriverWait(driver,10).until(EC.visibility_of_element_located(loc))
  driver.find_element(*loc).click()

  3)运行2)中的用例,会依次在google浏览器中执行完成,然后在firefox浏览器中执行完成。一共是2条测试用例。

01.png

  2、fixture工厂


  我们在1个功能测试之中,需用数次调用fixture时,就可以用fixture工厂


  运用的是装饰器的形式


  在wixture内部,界定一个函数。fixture回来的是函数公式。


  以下实例来自官方网站:


  pytest.fixture
  def make_customer_record():
  def _make_customer_record(name):
  return{"name":name,"orders":[]}
  return _make_customer_record
  #用例内部,多次调用了fixture.
  def test_customer_records(make_customer_record):
  customer_1=make_customer_record("Lisa")#第1次调用
  customer_2=make_customer_record("Mike")#第2次调用
  customer_3=make_customer_record("Meredith")#第3次调用
  如果工厂创建的数据需要管理,那么fixtue可以如下处理:
  pytest.fixture
  def make_customer_record():
  #管理工厂的数据。在前置中创建。在后置中销毁
  created_records=[]
  
  def _make_customer_record(name):
  record=models.Customer(name=name,orders=[])
  #前置中添加数据
  created_records.append(record)
  return record

  

  yield _make_customer_record#返回内部函数
  #销毁数据
  for record in created_records:
  record.destroy()
  
  #测试用例
  def test_customer_records(make_customer_record):
  customer_1=make_customer_record("Lisa")
  customer_2=make_customer_record("Mike")
  customer_3=make_customer_record("Meredith")


  3、request这一fixture


  pytest内嵌的名为requests的fixture,基本功能:给予要求fixture的功能测试/测试类的数据的。


  大家界定fixture以后,一般都是功能测试/测试类,来要求fixture。


  而requestfixture便会纪录功能测试/测试类有关信息。


  requestfixture是根据FixtureRequest来完成的,有如下特性(例举一部分)可以用:


  request.param:获得fixture的params变量值


  request.scope:获得fixture的修饰符


  request.function:获得调用fixture的功能测试函数名称。假如fixture是函数公式级别修饰符。


  request.cls:获得功能测试是以哪一个测试类里收集到的。


  request.module:获得功能测试/测试类从哪个python模块里收集到的。


  request.config:从pytest的config文件之中,获得与现阶段要求相关的配置信息


  更多请查阅官方网站:https://docs.pytest.org/en/stable/reference.html


  即然requests是fixture,那我们界定的fixture,就能直接把requests做为函数调用再用。


  下边,以简易实例来演试。


  界定一个fixture,将requests做为主要参数。


  import pytest
  pytest.fixture(params=[1,2])
  def init(request):
  print("用例名称:",request.function)
  print("fix参数",request.param)
  print("fix的作用域",request.scope)
  print("用例所在的类",request.cls)
  定义一个测试类,直接请求名为init的fixture:
  pytest.mark.usefixtures("init")
  class TestABC:
  def test_hello(self):
  print("-------------------------")


  执行结果如下:

02.png

  综上所述,这篇文章就给大家介绍到这里了,希望可以给大家带来帮助。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/128731.html

相关文章

  • python+pytest接口自动化主要参数关系

      文章主要是详细介绍了python+pytest接口自动化技术主要参数关系,主要参数关系,又叫插口关系,即插口之间产生参数联络或依靠,大量相关知识必须的小伙伴们可可以了解一下  序言  那么今天,小编想跟大伙儿来讲讲python+pytest接口自动化测试主要参数关系,小编那边就不多说了废话了,大家可以直接直入主题。  一、什么叫主要参数关系?  主要参数关系,又叫插口关系,即插口之间产生参数联...

    89542767 评论0 收藏0
  • flask 单元测试 (一)

    框架选择: 根据 https://blog.zengrong.net/pos...得知: flask项目本身使用的是pytest nose是对标准库unittest的封装,现在比较流行,但文档没有pytest做的好,且近几年一直处于维护状态没有更新。 Flask-Testing flask扩展 最终选择:pytest pytest 特点: 非常容易上手,入门简单,文档丰富,文档中有很多实...

    syoya 评论0 收藏0
  • python单元测试卷架构pytest详细介绍

      此篇文章详细介绍了python的单元测试卷架构pytest,原文中根据实例编码推荐的十分详尽。对大家学习培训和工作具有很强的参照参考意义,需要的小伙伴可以必须  pytest是python语言表达中一个强悍的单元测试卷架构,用于管理方法和管理功能测试,可运用在单元测试卷、功能测试工作上。  unittest也是python语言表达中一个单元测试卷架构,可是作用比较有限,没有pytest灵便。 ...

    89542767 评论0 收藏0
  • 带你深入理解自动化测试框架Pytest的配置文件!

    摘要:其中用到编程等,还需要花更多的精力去深入学习,当每项技能都能掌握到一定深度,才能称为一个完整的知识体系。 都有哪些种类的配置文件 pytest.ini:pytes...

    wayneli 评论0 收藏0
  • pytest插件探索——hook workflow

    摘要:会调用向打印一些环境信息,比如插件版本,版本,操作平台这些等。在执行之后调用执行的过程是否执行取决于是否需要创建执行的过程如果有。所有测试执行完毕之后,返回之前的阶段。结束以后,整个退出之前的阶段。 pytest插件开发需要熟悉一些常用的hook函数,官方对于这些hook有一份简略的文档(目前除了小部分hook目前缺乏文档外,见这个issue),但是各个hook的调用逻辑没有一个直观的...

    pubdreamcc 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<