pytest中fixture,pytest实现fixture的原理_2

  pytest中fixture,pytest实现fixture的原理

  本文详细解释了Pytest框架的fixture,通过示例代码对其进行了非常详细的介绍。对大家的学习或者工作都有一定的参考价值,有需要的朋友可以参考一下。

  

相关文章

 

  Py框架夹具说明(1)

  Py框架夹具说明(2)

  Py框架夹具说明(三)

  本文关于夹具的内容如下:

  1.参数化夹具2、夹具工厂3,并请求此夹具

1、参数化fixture

 

  Fixture有一个params参数,允许我们传递数据。

  语法格式:

  # conftest.py文件

  # fixture的参数

  #当取值为1时,依赖于这个fixture的用例将被再次执行。

  #当取值2时,依赖于这个fixture的用例将被再次执行。

  #当取值3时,依赖于这个fixture的用例将被再次执行。

  # params有几个参数,依赖于这个fixture的用例会被执行几次。

  @ py test . fixture(params=[值1,值2,值3.])

  定义修复名称():

  #做点什么

  当我们需要多次调用fixture时,可以使用fixture的参数化功能。

  但它不是并发的,而是串行执行的。

  例如,如果测试对象有多种配置,参数化可以帮助我们在多种配置下执行用例。

  接下来以网页自动化为例。

  需求:在google和firefox浏览器下执行测试用例,用例是打开百度搜索pytest。

  1)首先,在conftest.py中,定义fixture并设置params=[google , firefox]

  # conftest.py

  # params设置为google和firefox

  @ pytest . fixture(params=[ Google , firefox])

  定义浏览器_修复(请求):

  if request.param==google:

  driver=webdriver。铬合金()

  elif request . param== Firefox :

  driver=webdriver。火狐()

  else:

  驱动因素=无

  产量驱动因素

  如果驱动程序:

  driver.quit()

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

  # test _百度_action.py

  @ pytest . mark . use fixtures( browser _ fix )

  def测试_百度(浏览器_修复):

  驱动程序=浏览器_修复

  driver . get( https://www . Baidu.com/)

  driver.find_element(By。ID,“千瓦”)。send_keys(pytest ,keys。回车)

  loc=(By。XPATH,//h3 )

  WebDriverWait(驱动程序,10)。直到(EC . visibility _ of _ element _ located(loc))

  driver.find_element(*loc)。单击()

  3)运行2)中的用例,这些用例将在google浏览器中执行,然后在firefox浏览器中执行。总共有2个测试用例。

  

2、fixture工厂

 

  当我们需要在一个用例中多次调用fixture时,我们可以使用fixture factory。

  用的是装修的方式。

  在fixture中,定义一个函数。fixture返回一个函数。

  以下案例来自官网:

  @pytest.fixture

  定义制造商_客户_记录():

  定义_制造_客户_记录(名称):

  返回{name: name, orders: []}

  退货_制造商_客户_记录

  #在用例中,多次

  调用了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

 

  

3、request这个fixture

 

  pytest内置的名为requests的fixture,主要功能: 提供请求fixture的测试用例/测试类的信息的。

  我们定义fixture之后,通常都是测试用例/测试类,来请求fixture。

  而request fixture就会记录 测试用例/测试类 相关信息。

  request fixture是通过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

 

  定义一个测试类,直接请求名为init的fixture:

  

@pytest.mark.usefixtures("init")

 

  执行结果如下:

  

 

  到此这篇关于Pytest框架之fixture的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: