基于Python+Pytest+Selenium的自动化测试之PO模式简介

2023-10-31

在实际的软件研发过程中,往往会存在项目时间紧张、待测工作量大,待测的功能点较多,但是团队测试人员有限,难以全部测试覆盖的问题。针对问题,我们可以通过自动化测试去解决一些测试工作中遇到的实际问题,把一些工作写成代码,交给机器去处理和执行,解放测试人员,让代码帮助人去执行测试,从而达到提升测试效率的目的。而以低成本的方式选择合适的自动化测试框架,并且在项目中解决一些实际问题,就显得尤为重要。
本文结合笔者的一些实践,将基于Python+Pytest+Selenium的自动化测试实践简要总结,做一些介绍。
![在这里插入图片描述](https://img-blog.csdnimg.cn/ce7b646753ce4ff18527d12a4eef1dd3.png
一、Selenium介绍
◆Selenium无疑是当下主流的自动化测试工具之一,尤其在Web UI功能测试领域,有极其出色的表现。那么最主要的原因之一,当然是开源!它主要是用于Web 应用程序的自动化测试,但不只局限于此,同时支持所有基于web 的管理任务自动化

◆当客户端(Client)测试脚本启动浏览器驱动(driver)时,Selenium WebDriver会启动相应的浏览器,启动完成后,WebDriver会将浏览器绑定到特定端口形成一个浏览器实例,测试脚本创建session通过HTTP请求向远程控制服务器(Remote Server,简称RS)发送请求,由RS进行解析并完成相应操作并返回结果
在这里插入图片描述

二、环境要求
◆Python:3.0以上版本
◆安装selenium:pip3 install selenium
◆安装Chrome浏览器及chromedriver(放在python的主目录中)
三、基于python使用pytest+selenium框架下PO模式测试框架
1、PO模式简介
◆Page Object Model 页面对象模型,用来管理维护一组页面元素的对象库
◆在PO下,应用程序的每一个页面都有一个对应的Page类
◆每一个Page类维护着该页面的元素集和操作这些元素的方法
在这里插入图片描述
在这里插入图片描述

2、PO模式解读

官网:https://github.com/SeleniumHQ/selenium/wiki/PageObjects

  1. The public methods represent the servives that the page offers
    ◆使用公共方法来代表页面提供的服务
    ◆基类(基础服务:页面的基础的操作:点击元素、输入内容等)
    ◆页面类:登录,不同页面中增删改查等方法
  2. Try not to expose the internals of the page
    ◆避免暴露页面的内部细节,比如元素定位值、元素的定位方法等,隔离测试用例与业务层面和页面对象
  3. Generally don’t make assertions
    ◆PO本身通常不应进行判断或断言,判断和断言为测试的一部分,应始终在测试的代码内,而不是在PO中,PO用来包含页面的表示形式,以及页面通过方法提供的服务,但是与PO无关的测试代码不应包含其中
  4. Methods return other PageObjects
    ◆方法返回其他页面对象,进行页面间的关联
    例如:登录→首页 首页→其他页面。
  5. Need not represent an entire page
    ◆PO不一定需要代表整个页面,定义所需要实现的业务部分,也可用于表示页面上的组件,若在自动化测试的页面中包含多个组件,每个组件都有单独的页面对象,可提高可维护性
  6. Different results for the same action are modelled as different methods
    ◆相同的操作(不同的数据)带来的不同的结果可以封装为不同的方法
    3、项目架构

◆common:公共模块,如基类、定位器、浏览器
◆configs:项目配置等
◆docs:项目文档
◆outFiles:logs、reports、screenshots
◆pageObject:页面对象
◆testCases:测试用例
◆testDatas:测试数据
◆utils:工具模块

4、基类的封装

◆获取浏览器方法get_driver()
◆通过参数控制浏览器的默认类型(兼容性测试)
◆通过参数控制浏览器的模式,有头/无头
◆通过参数控制隐式等待时间
◆单例实现(参数化登录用例避免打开多个页面后进行)
◆元素定位:存储在yaml文件中
以类名区分页面,将对应页面元素定位存储在类名下,在basePage中定义不同页面对应不同元素
◆操作页面元素方法:

  1. 定位单个元素get_element
  2. 定位多个元素get_elements
  3. 在元素上输入文本(添加清除已有内容)
  4. 点击元素
  5. 获取单个元素文本(添加异常保护)
  6. 获取多个元素文本
  7. 点击元素加入等待时长(需要在页面刷新/切换等场景下使用)

5、操作层pageObject

  1. loginPage:定义打开页面、登录页面方法→返回mainpage页面类
  2. mainPage:定义主页面进入到不同页面中的方法
    →不同页面类返回当前页面类
  3. otherPage:其他页面类,类中包含功能方向操作方法

6、业务层——测试用例

  1. 将文件、数据存储在yaml文件或excel表格中

  2. 利用数据驱动获取数据并传参

  3. 编写测试用例,可用allure.step添加测试步骤说明

  4. 进行断言,验证所有的测试结果是否符合预期结果
    7、生成报告

  5. 在cmd中pip install allure

  6. 在测试用例中import allure、import os

  7. 运行时添加生成测试报告用例pytest.main([‘-sv’, ‘–alluredir’, ‘./report’])

  8. 可指定报告存储的位置,例如存储在当前文件夹中:
    os.system(‘allure generate ./report -o ./report/report --clean’)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于Python+Pytest+Selenium的自动化测试之PO模式简介 的相关文章

随机推荐

  • 简单易懂矩阵螺旋打印

    简单易懂矩阵螺旋打印 C语言 给定一个 m 行 n 列的矩阵 请按照顺时针螺旋的顺序输出矩阵中所有的元素 输入格式 首先在第一行输入 2 个整数 分别对应题目描述中的 mm 和 nn 1 leq m n leq 1001 m n 100 之
  • 设置入校时间字段的有效性规则为_2012年计算机二级Access第二十六套上机试题及答案详解...

    1 基本操作题 在考生文件夹下 存在一个数据库文件 samp1 mdb 和一个图像文件 photo bmp 在数据库文件中已经建立一个表对象 tStud 试按以下操作要求 完成各种操作 1 设置 ID 字段为主键 并设置 ID 字段的相应属
  • UE4 C++ 用蓝图调用C++里定义的变量、方法

    UE4 C 用蓝图调用C 里定义的变量 方法 这是一个Object的C 脚本 h UCLASS Blueprintable 可被蓝图继续 class BASICTRAINING API UMyObject public UObject GE
  • 企业微信接入自研小程序流程

    一 背景 企业微信是企业内部办公常用的即时通讯工具 可以作为企业内部工作的枢纽 例如 重要内容通知 重要应用的集成等 二 自研程序接入企业微信配置 1 登录企业微信管理后台https work weixin qq com 2 找到应用管理
  • java -jar xxx.jar中没有主清单属性

    使用Spring Initailizr创建的项目 使用mvn打包后 java jar xxx jar显示xxx jar中没有主清单属性 去掉标签即可
  • Java实现阿里云短信发送功能(保姆级!!!搞懂短信功能,这一篇就够了!)

    目录 一 准备工作 1 功能如何切入 2 为什么要用阿里云来实现 二 阿里云部分 三 代码部分 OK 分享结束 收 一 准备工作 1 功能如何切入 第一步 分析业务需求 想要实现短信通知功能那就要有短信的收发双方 而手机上的短信功能需要占用
  • FFmpeg滤镜:制作图片视频流

    iPhone相册有个 为你推荐 功能 它会挑选一些照片形成一个主题 点击后可以像视频一样播放 那么 怎样才能把多张照片转成一个视频文件呢 使用FFmpeg可以这么来做 ffmpeg f image2 framerate 0 5 i D MT
  • Qt使用QSplitter实现分割窗口

    分割窗口在应用程序中经常用到 它可以灵活分布窗口布局 经常用于类似文件资源管理器的窗口设计中 然后抱着这样的想法简单的实现了下 cpp view plain copy print main cpp include
  • Android之通过BaseAdapter自定义适配器的使用

    通过BaseAdapter创建自定义适配器 在所有的适配器中 通过BaseAdapter定义的适配器非常好用 可以自定义ListView每行布局的样式 使用非常的广泛 是开发过程中必不可少的 下面看一个效果图 接下来一起来实现聊天列表 1
  • 在 ROS 中使用 Protobuf 替代 ros msg

    转自 https segmentfault com a 1190000012734275 Background 做 ROS 相关开发的 应该都知道 ros msg 有个非常大的槽点 ros msg 扩展性较差 即如果 msg 的字段发生变化
  • JAVA 输出一个会动的爱心

    以下是 Java 代码 可以在控制台输出一个会动的爱心 public class Love public static void main String args throws InterruptedException while true
  • 看完百度文心一言的魔性作图,我头都笑掉了...

    近日看到网友们用百度文心一言来作图 看了后我都愣住了 1 AI 作画 车水马龙 2 AI 作画 驴肉火烧 3 AI 作画 唐伯虎点秋香 4 AI 作画 鱼香肉丝 5 AI 作画 胸有成竹 6 AI 作画 夫妻肺片 7 AI 作画 红烧狮子头
  • 【GUI】Python图形界面(一)

    Python图形界面 一 第一个界面 1 了解模块代码的组成 导入库 PySimpleGUI 定义布局 确定行数 创建窗口 事件循环 关闭窗口 1 导入库 import PySimpleGUI as sg 2 定义布局 确定行数 layou
  • SharePreference原理

    SharedPreferences是Android提供的数据持久化的一种手段 适合单进程 小批量的数据存储与访问 因为SharedPreferences的实现是基于单个xml文件实现的 并且 所有持久化数据都是一次性加载到内存 如果数据过大
  • Error Handling with C++ Exceptions, Part 1

    by Chuck Allison Error Handling Alternatives With the traditional programming languages of yore a developer s alternativ
  • 电流电压曲线 vc源码_如何真正理解三极管伏安特性曲线在饱和区的含义

    初次学习三极管工作原理的时候 往往会对三极管的伏安特性曲线非常困惑 特别是饱和区的性质 本文就讨论这方面的内容 三极管的工作电路如图所示 图一 三极管工作电路 按照上述电路得出三极管的伏安特性如图所示 教科书中一般都这样描述三极管的三个工作
  • 快排算法实现

    找到分区点 把数组元素放到分区点两侧 再对分区点两侧数组进行排序 完成快排 同样递归实现快排 递归公式 递归终止条件 当所分区只有一个元素是 即元素下标相同时 递归终止 并返回 快排实现目的 对数组进行排序 实现过程 传递一个数组和数组起始
  • wangEditor富文本编辑器图片/视频上传

    wangEditor 有丰富的 API 和足够的扩展性 允许我们自定义开发菜单 模块 插件等 在Vue React中运用也很方便 因此本文介绍下vue中富文本上传图片和视频 安装引入后富文本有显示上传图片按钮 点击上传后会报没有配置上传地址
  • 14. TypeScript 自定义类型

    TypeScript 自定义类型 1 Diff实现 求两个对象不同的部分 let person1 name 123 age 11 address 456 let person2 address 123 type Diff
  • 基于Python+Pytest+Selenium的自动化测试之PO模式简介

    在实际的软件研发过程中 往往会存在项目时间紧张 待测工作量大 待测的功能点较多 但是团队测试人员有限 难以全部测试覆盖的问题 针对问题 我们可以通过自动化测试去解决一些测试工作中遇到的实际问题 把一些工作写成代码 交给机器去处理和执行 解放