web自动化3-pytest前后置夹具

一、pytest前后置(夹具)-fixture

夹具的作用:在用例执行之前和之后,需要做的准备工作和收尾工作。

用于固定测试环境,以及清理回收资源。

举个例子:访问一个被测页面-登录页面,执行测试用例过程中,上来就输入账户、密码、验证码吗,实际上是先获取浏览器的驱动,有了驱动才去执行用例的执行,用例执行完后关闭页面。

夹具要做的事情就是在执行用例之前,把驱动获取到,用例执行完之后,页面需要关闭就放到固定的测试环境之后。

pytest内部提供了多种类型的夹具

1、已经定义好的夹具类型一共有以下几种类型:

  • 函数
  • 方法
  • 模块

2、自定义夹具:fixture

使用fixture灵活调度固定的测试环境

1.1、fixture基本介绍

是pytest当中的一个装饰器

@pytest.fixture(夹具的作用域、参数化、自动使用)

复制代码
@pytest.fixture(scope="function",autouse=True)
def go_shop():
    print("使用自动保持登录的id")  # 代码段1
    yield  # 不需要返回任何的内容
    print("登录成功之后的用户id")  # 代码段2

每一个函数级别的用例,它都会在你用例执行之前执行代码段1,用例执行之后执行代码段2

1、自动调用夹具

2、不自动调用夹具

1.2、项目中的使用

fixture一般在项目中集中管理-封装成一个模块。

  • 整个项目中会定义一个py模块:conftest.py专门用来放置自定义的fixture,文件名固定而且不能修改。
  • 在使用fixture不需要进行导包,可以直接使用。不管是在项目根目录还是用例目录都会自动识别进行调用。
  • 执行顺序:多个fixture-从最外边到最里边以及从最上边到最下边,定位fixture然后执行。有相同的名字的,根据ASCII编码进行筛选选中,然后进行一个集中使用。

也就是将定义fixture的那段代码放在conftest.py文件中即可。

二、POM设计模式

  • P:page代表页面
  • O:object代表对象
  • M:module代表模型

以页面对象为模型进行封装和使用的模式。

核心思想(以下三步):

新建一个pom.py文件,封装后台登录页面类

封装后台登录页面类

class BackgroundLoginPage():

定义一个实例属性获取驱动

def init(self,driver):

self.driver = driver

1、对页面元素 进行封装成类的属性

页面类属性的封装:需要被操作的元素

pom.py文件

- 输入账号

ipt_username =(By.XPATH,"/html/body/form/table/tbody/tr/td[3]/table/tbody/tr[2]/td[2]/input")

- 输入密码

ipt_password =(By.XPATH,"/html/body/form/table/tbody/tr/td[3]/table/tbody/tr[3]/td[2]/input")

#- 输入验证码

ipt_code =(By.XPATH,"/html/body/form/table/tbody/tr/td[3]/table/tbody/tr[5]/td[2]/input")

- 点击登录

btn_login_submit =(By.XPATH,'//*[@id="login_btn"]')

2、对用例执行流程 设计成类的实例方法

pom.py文件

def login(self):

self.driver.find_element(*self.ipt_username).send keys("admin")

self.driver.find_element(*self.ipt_password).send keys("888888")

self.driver.find_element(*self.ipt_code).send keys("xcvf")

self.driver.find_element(*self.btn_login_submit).click

3、通过定义好的页面类实例化一个对象,通过对象调用实例方式执行用例。

test_login2.py

创建webdriver对象

获取驱动对象

def test_001():

driver =webdriver.chrome()

通过驱动访问页面

driver.get("http://47.107.116.139/fangwei/m.php?m=Public\&a=login\&")

#将页面最大化

driver.maximize window()

login_page = BackgroundLoginPage(driver)

login_page.login()


代码优化

1、使用前后置(夹具),将获取驱动和关闭驱动放在fixture中,在conftest.py文件:

@pytest.fixture

def driver():

print("用例开始执行之前,获取驱动")

driver = webdriver.Chrome()

#通过驱动访问页面

driver.get("http://47.107.116.139/fangwei/m.php?m=Public\&a=login\&")

#将页面最大化

driver.maximize_window()

yield driver

#用例执行完成之后,关闭驱动

print("用例执行完成之后,关闭驱动")

driver.quit()

2、这样test_login2.py文件:

from pom import BackgroundLoginPage

创建webdriver对象

获取驱动对象

def test_001(driver):

login_page = BackgroundLoginPage(driver)

login_page.login()


核心作用:

  • 可以减少代码的冗余,而且方便后台维护,若页面元素发生变化,只需要调整页面封装的类属性即可
  • 提高用例脚本的维护性和可持续性
相关推荐
欲游山河十万里3 小时前
pytest(三)——参数化@pytest.mark.parametrize
pytest
奶茶精Gaaa4 天前
pytest
pytest
霍格沃兹测试开发学社测试人社区6 天前
软件测试学习笔记丨Pytest 学习指南
软件测试·笔记·测试开发·学习·pytest
神即道 道法自然 如来8 天前
测试面试题:pytest断言时,数据是符点类型,如何断言?
pytest
high_tea8 天前
pytest - 多线程提速
python·pytest
傻啦嘿哟10 天前
自动化测试框架集成:将Selenium集成到pytest与unittest中
selenium·测试工具·pytest
一名在八月份找工作的测试员10 天前
自动化学习1:pytest自动化框架的基本用法:注意事项/断言assert/测试结果分析
学习·自动化·pytest
什么时候才能变强11 天前
Pytest-如何将allure报告发布至公司内网
linux·服务器·pytest
一名在八月份找工作的测试员11 天前
自动化学习2:pytest的高级用法(mark标记/fixture/hook)
学习·自动化·pytest