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()

----------------------------------------------------------------------------------------------------------------------

核心作用:

  • 可以减少代码的冗余,而且方便后台维护,若页面元素发生变化,只需要调整页面封装的类属性即可
  • 提高用例脚本的维护性和可持续性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/483841.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringCloud-Gateway服务网关

一、网关介绍 1. 为什么需要网关 Gateway网关是我们服务的守门神,所有微服务的统一入口。 网关的核心功能特性: 请求路由 权限控制 限流 架构图: 权限控制:网关作为微服务入口,需要校验用户是是否有请求资格&am…

算法-双指针

目录 1、双指针遍历分割:避免开空间,原地处理 2、快慢指针:循环条件下的判断 3、左右指针(对撞指针):分析具有单调性,避免重复计算 双指针又分为双指针遍历分割,快慢指针和左右指针 1、双指…

深度学习 tablent表格识别实践记录

下载代码:https://github.com/asagar60/TableNet-pytorch 下载模型:https://drive.usercontent.google.com/download?id13eDDMHbxHaeBbkIsQ7RSgyaf6DSx9io1&exportdownload&confirmt&uuid1bf2e85f-5a4f-4ce8-976c-395d865a3c37 原理&#…

C# 将 Word 转文本存储到数据库并进行管理

目录 功能需求 范例运行环境 设计数据表 关键代码 组件库引入 Word文件内容转文本 上传及保存举例 得到文件Byte[]数据方法 查询并下载Word文件 总结 功能需求 将 WORD 文件的二进制信息存储到数据库里,即方便了统一管理文件,又可以实行权限控…

查看文件内容的指令:cat,tac,nl,more,less,head,tail,写入文件:echo

目录 cat 介绍 输入重定向 选项 -b -n -s tac 介绍 输入重定向 nl 介绍 示例 more 介绍 选项 less 介绍 搜索文本 选项 head 介绍 示例 选项 -n tail 介绍 示例 选项 echo 介绍 输出重定向 追加重定向 cat 介绍 将标准输入(键盘输入)的内容打…

【微服务】Gateway服务网关

📝个人主页:五敷有你 🔥系列专栏:微服务 ⛺️稳中求进,晒太阳 Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等响…

单目深度估计基础理论和论文学习总结

单目深度估计基础理论和论文学习总结 一、背景知识: 三维刚体运动的数学表示:旋转平移矩阵、旋转向量、欧拉角、四元数、轴角模型、齐次坐标、各种变换等 照相机模型:单目/双目模型,单目中的世界坐标系/相机坐标系/图像坐标系的…

MySQL表的增删改查---多表查询和联合查询

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …

保研复习概率论1

1.什么是随机试验(random trial)? 如果一个试验满足试验可以在相同的条件下重复进行、试验所有可能结果明确可知(或者是可知这个范围)、每一次试验前会出现哪个结果事先并不确定,那么试验称为随机试验。 …

ssm+vue的消防物资存储系统(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频: ssmvue的消防物资存储系统(有报告)。Javaee项目,ssm vue前后端分离项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&…

PyQT5学习--新建窗体模板

目录 1 Dialog 2 Main Window 3 Widget Dialog 模板,基于 QDialog 类的窗体,具有一般对话框的特性,如可以模态显示、具有返回值等。 Main Window 模板,基于 QMainWindow 类的窗体,具有主窗口的特性,窗口…

重生奇迹mu弓箭手技能

1、弓箭手职业技能:多重箭:同时射出三发弓箭,给予复数敌人伤害,根据弓的不同,射出的数量也不同。天堂之箭:弓箭垂直射向天际,准确的落在敌人的头顶上,造成严重的伤害。 2、连技技能…

动态规划之数字三角形模型

题目:1015. 摘花生 思路 很经典的动态规划问题。 定义:v[i][j]表示位置是i,j的花生数量,f[i][j]表示走到位置i,j所能获得的最大花生数量。初始状态:f[1][1],目标状态:f[n][m]状态转移:由于题目规定只能向…

2024-03-24 需求分析-智能问答系统-调研

一. 需求列表 基于本地知识库的问答系统对接外围系统 数字人语音识别二. 待调研的公司 2.1 音视贝 AI智能外呼_大模型智能客服系统_大模型知识库系统_杭州音视贝 (yinshibei.com) 2.2 得助智能 智能AI客服机器人-智能电话机器人客服-电话电销机器人-得助智能 (51ima.com) 2…

Redis常见数据类型(1)

Redis提供了5种数据结构, 理解每种数据类型的特点对于Redis开发运维非常重要, 同时掌握每种数据类型的常见命令, 会在使用Redis的时候做到游刃有余. 内容如下: 预备知识: 几个全局命令, 数据结构和内部编码, 单线程机制解析. 5种数据类型的特点, 命令使用, 应用场景示例. 键遍历…

03-SparkSQL入门

0 Shark Spark 的一个组件,用于大规模数据分析的 SQL 查询引擎。Shark 提供了一种基于 SQL 的交互式查询方式,可以让用户轻松地对大规模数据集进行查询和分析。Shark 基于 Hive 项目,使用 Hive 的元数据存储和查询语法,并基于Hiv…

信号的小波包能量谱计算(以轴承振动信号为例,Python环境)

小波分析是近30年来发展起来的数学分支,是Fourier分析划时代发展的结果,由法国工程师Morlet首先提出,后广泛应用于信号处理、图像处理与分析、地震勘探、故障诊断、自动控制等领域,小波就是小的波形,所谓“小”是指它具…

备忘录导出的HTML文档转换MarkDown尝试记录

备忘录导出的HTML文档转换MarkDown尝试记录 1. pandoc命令行2. HTML转换MARKDOWN3. MD导入CSDN记录过长报错及压缩尝试参考 本地备忘录写了些旅游攻略,想做个纪念,导出为长图片ok,导出为HTML,也可以。但是导出图片是base64格式的&…

2、事件修饰符、双向绑定、style样式使用、v-for循环遍历、v-if 和 v-show

一、事件修饰符 1、.stop 阻止冒泡事件 给谁加了阻止冒泡事件&#xff0c;谁下面的盒子就不会执行了 <div id"app"><div class"parent" click"log3"><div class"child" click"log2"><button click.…

厨师上门服务小程序开发与运营指南

随着移动互联网的普及&#xff0c;各种生活服务类APP应运而生。厨师上门服务小程序作为一种新型的服务模式&#xff0c;为用户提供了便捷、个性化的餐饮服务。本文将为您介绍厨师上门服务小程序的开发与运营方法&#xff0c;帮助您快速搭建起一款实用的小程序。 一、小程序开发…