UI自动化框架搭建以及面试题详解(上)

UI自动化框架搭建以及面试题

  • UI自动化面试题
    • 框架面试题
      • 那你讲下如何搭建现成的框架
      • 公司里面的框架是你搭建的么
      • 请结合你的项目讲解一下你的框架是如何搭建的
    • PO模式
      • 什么是 PO 模式
      • PO 模式的封装原则有哪些
    • DDT驱动模式
      • 什么的项目适合ddt
    • ddt四种模式
    • ddt处理各种类型数据
  • 自动化框架的登录页面的搭建
    • 常量如何存储
    • 登录页面定位
    • 在case进行登录页面的调用
    • 验证码识别

UI自动化面试题

框架面试题

那你讲下如何搭建现成的框架

追风考试系统

1、对项目去选择合适的Ul自动化框架(cypress,selenium),从unittest 和 pytest 中选择了 pytest。(框架选择)
2、确定框架中有哪些目录和功能,比如config,reports,page,case,screenshots,data,common目录,再加上pytest核心两个文件conftest和pytest.ini文件
3.再根据项目去补全对应的内容,结合po模型,结合conftest里面的装饰器和生成器还有元素定位的描述符,以及ddt数据驱动的生成器一行一行读取文件。
4.最后完善登录登出的常规操作就大功告成了。

公司里面的框架是你搭建的么

1、我们公司的项目是很多年不断迭代的,框架已经有人搭建好了,我没有在公司中搭建过框架,但是我有去看过框架中的结构和源码的设计思想。(不是我搭建的,但是我了解框架的搭建细节)
或者:
2、我们公司的项目都是最近才做的,甲方那边需要我们搭建一个ui自动化框架来跑跑看一看,所以我花了几天搭建了一个框架完成了一些主干自动化用例。(是我独立从0到1搭建的框架)

请结合你的项目讲解一下你的框架是如何搭建的

1.我们的项目要求做ui自动化框架,我们先选型,选择pytest
2.我们设计结构的时候,想到了po模型,所以划分了一些目录,我们项目中登录的时候有验证码的识别,我就写了一个验证码的工具识别,还有颜色识别,我就写了一个工具函数,还有文件上传功能,还有滑动操作,还有失败重跑,以及多现成这些功能都放在我的项目中了,我们项目中还有需要用到数据驱动的地方,比如登录页面多次尝试不同的账号密码进行登录,我就写了一个ddt的读取文件的函数,利用装饰去实现ddt。

PO模式

什么是 PO 模式

是指把一个具体的页面转化为编程语言当中的一个对象,页面特性转化成对象属性,页面操作转化为对象方法。
1)把每个页面当成一个对象,页面层写定位元素方法和页面操作方法
2)用例层从页面层调用操作方法,写成用例
3)可以做到定位元素与脚本的分离
4)主要用来实现对页面操作和测试逻辑的一个分离

PO 模式的封装原则有哪些

1)要封装页面中的功能或服务,比如点击页面元素,可以进入到新的页面,则可为这个服务封装方法"进入新页面"
2)封装细节,对外只提供方法名或者接口,尽量不要暴露页面的内部
3)封装的操作细节中不要使用断言,把断言放到单独的模块中,
4)点击一个按钮会开启新的页面,可以用return方法跳转,比如return MainPage()表示跳转到主页
5)整个 PO 你不需要封装整个页面的行为,用到什么逻辑就封装什么
6)一个动作可能产生不同结果,比如点击按钮后,可能成功,也可能失败,为两种结果封装两个方法:click_success和click_error

DDT驱动模式

什么的项目适合ddt

在进行登录测试用例设计时,我们通常会遇到以下情况:

  1. 登录功能的前置条件是一致的,即需要有一个登录页面和正确的登录接口。
  2. 测试数据会有变化,主要是用户名和密码的组合,但是测试用例的逻辑结构基本相同。 针对这种情况,可以利用数据驱动测试(Data-Driven Testing,简称
    DDT)来管理测试数据,提高代码复用率。DDT可以通过excel、csv等方式存储测试数据,并且利用循环结构来执行多组测试数据,从而覆盖不同的测试情景。
import unittest
from ddt import ddt, data@ddt
class TestLogin(unittest.TestCase):@data(("user1", "password1"), ("user2", "password2"), ("user3", "password3"))def test_login_with_valid_credentials(self, login_data):username, password = login_data# 进行登录操作,并断言登录成功@data(("user4", "wrong_password"), ("user5", ""), ("", "password6"))def test_login_with_invalid_credentials(self, login_data):username, password = login_data# 进行登录操作,并断言登录失败if __name__ == "__main__":unittest.main()

在这个示例中,我们使用了 ddt 装饰器来标记测试类,并使用 @data 装饰器来标记测试方法。每个测试方法都接受一个参数 login_data,它代表一个用户名和密码的组合。通过在 @data 装饰器中提供不同的测试数据,我们可以在不同情景下执行登录测试,并验证登录功能的正确性。

ddt四种模式

ddt要与unittest单元测试框架一起结合使用
@ddt 引入ddt模块
@data 导入数据
@unpack 拆分数据
@file_data导入外部数据

ddt处理各种类型数据

需注意以下几点:
1.使用ddt模块要在测试类前用@ddt进行修饰
2.要导入测试数据需在测试用例(以test_开头的方法)前用@data修饰
3.若需对测试数据进行拆分需用@unpack修饰
4.若需导入外部数据需用@file_data修饰

自动化框架的登录页面的搭建

常量如何存储

  • test_001_login.py

在这里插入图片描述

  • conf.py(常量的统一封装)
    在这里插入图片描述

登录页面定位

  • 登录页面的元素定位
    在这里插入图片描述

  • 统一进行元素定位,进行封装操作
    在这里插入图片描述

  • 如果含有button的页面 要添加点击的操作
    在这里插入图片描述

在case进行登录页面的调用

1.test_001_login.py

from pages.index_page.index import zhuifeng_index_page

2.调用
在这里插入图片描述
在这里插入图片描述

3.定义一个实体化对象
在这里插入图片描述

验证码识别

  • 设置验证码的部分

1.封装在这里插入图片描述

2.导包

from common.image_identify import image_identify

3.使用

# zhufeng.log_in_button.click()zhufeng.image_code = image_identify(drivers, zhufeng.image,  '简单验证码.png', 'crop_pic.png')

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Lesson 9 Transformer

听课(李宏毅老师的)笔记,方便梳理框架,以作复习之用。本节课主要讲了seq2seq model简介,以及应用,架构(包括encoder和decoder,encoder和decoder之间如何协作)&#xff0c…

设计模式——组合模式08

组合模式:把类似对象或方法组合成结构为树状的设计思路。 例如部门之间的关系。 设计模式,一定要敲代码理解 抽象组件 /*** author ggbond* date 2024年04月06日 08:54* 部门有:二级部门(下面管三级部门) 三级部门 &a…

【Spring】AOP——使用@around实现面向切面的方法增强

工作业务中,有大量分布式加锁的重复代码,存在两个问题,一是代码重复率高,二是容易产生霰弹式修改,使用注解和AOP可以实现代码复用,简化分布式锁加锁和解锁流程。 around注解是AspectJ框架提供的&#xff0c…

uniapp方法二 激活微信小程序自带的分享功能

1、配置 onLoad(){wx.showShareMenu({withShareTicket:true,//设置下方的Menus菜单,才能够让发送给朋友与分享到朋友圈两个按钮可以点击menus:["shareAppMessage","shareTimeline"]}) },2、事件 onShareAppMessage(res) {if (res.from butto…

1、认识MySQL存储引擎吗?

目录 1、MySQL存储引擎有哪些? 2、默认的存储引擎是哪个? 3、InnoDB和MyISAM有什么区别吗? 3.1、关于事务 3.2、关于行级锁 3.3、关于外键支持 3.4、关于是否支持MVCC 3.5、关于数据安全恢复 3.6、关于索引 3.7、关于性能 4、如何…

运放知识点总结

目录 一、运放基础知识 (operational amplifier) 1.由来 2.用途 3.符号 4.内部结构​编辑 5.虚短虚断 二、同相放大电路 (Non-inverting Amplifier) 三、反相放大电路 (Inverting Amplifier) 四、差分放大电路 (Difference Amplifier) 五、加法…

移动端-2(媒体查询+Less基础+rem适配方案+响应式布局+Bookstrap前端开发构架)

目录 1.rem布局 2.媒体查询 什么是媒体查询 语法规范 mediatype查询类型 关键字 媒体特性 3.Less基础 维护css的弊端 less介绍 less变量 less嵌套 less运算 4.rem适配方案 rem实际开发适配方案1 设计稿常见尺寸宽度 动态设置html标签font-size大小 元素大小取…

网络协议——STP(生成树协议)

1. 什么是环路? 信息经过一系列的转化或传递,然后再返回到起始点,形成一个闭合的循环。 2. 环路的危害 广播风暴(广播报文充斥着整个网络) MAC地址漂移,从而导致MAC地址表震荡。 使用 display mac…

Rust 基础语法和数据类型

数据类型 Rust提供了一系列的基本数据类型,包括整型(如i32、u32)、浮点型(如f32、f64)、布尔类型(bool)和字符类型(char)。此外,Rust还提供了原生数组、元组…

医学图像处理 利用pytorch实现的可用于反传的Radon变换和逆变换

医学图像处理 利用pytorch实现的可用于反传的Radon变换和逆变换 前言代码实现思路实验结果 前言 Computed Tomography(CT,计算机断层成像)技术作为如今医学中重要的辅助诊断手段,也是医学图像研究的重要主题。如今,随…

Mac安装配置Appium

一、安装 nodejs 与 npm 安装方式与 windows 类似 ,官网下载对应的 mac 版本的安装包,双击即可安装,无须配置环境变量。官方下载地址:https://nodejs.org/en/download/ 二、安装 appium Appium 分为两个版本,一个是…

yolov9训练自己的数据—vehicle 4类

yolov9训练自己的数据 1 conda环境安装指定版本torch 2 预训练模型测试3 训练自己的数据集3.1 制作数据3.2 创建模型配置文件3.3 创建数据加载配置文件3.4 使用ClearML跟踪训练日志3.5 训练3.6 模型测试3.7 转换成TensorRT模型 4 参考文档 1 conda环境 下载yolov9代码&#xf…

C语言:顺序表专题

目录 一、数据结构之顺序表/链表1.数据结构相关概念1.1什么是数据结构1.2为什么需要数据结构 二、顺序表1.顺序表的概念及结构2.顺序表分类3.动态顺序表的实现 一、数据结构之顺序表/链表 1.数据结构相关概念 1.1什么是数据结构 数据结构是由“数据”和“结构”两词组合而来…

解锁ETLCloud中Kettle的用法

随着大数据时代的到来,数据的处理和管理成为各行各业不可或缺的一环。ETL(Extract-Transform-Load)工具作为数据处理的重要环节,扮演着将数据从源端抽取出来、经过转换处理,最终加载至目标端的关键角色。在众多ETL工具…

【Python】数据挖掘与机器学习(一)

【Python】数据挖掘与机器学习(一) 大家好 我是寸铁👊 总结了一篇【Python】数据挖掘与机器学习(一)sparkles: 喜欢的小伙伴可以点点关注 💝 【实验1】预测鲍鱼年龄 问题描述 请从一份数据中预测鲍鱼的年龄,数据集在abalone.cvs中&#xff…

【Qt】:常用控件(二:QWidget核心属性)

常用控件(二) 一.cursor(光标形状)二.font(字体信息)三.toolTip(提示显示)四.focusPolicy(焦点)五.styleSheet(文本样式) 一.cursor&a…

Java BigDecimal类

原因 为什么要有BigDecimal类因为二进制的缘故&#xff0c;直接对浮点数进行运算&#xff0c;会导致精度丢失的问题下例&#xff1a;出现了0.1 0.2 <> 0.3 常见的API 这些API中&#xff0c;并不推荐由double类型转换的BigDecimal,因为底层还是double推荐使用由string 类…

QT5-qmediaplayer播放视频及进度条控制实例

qmediaplayer是QT5的播放视频的一个模块。它在很多时候还是要基于第三方的解码器。这里以Ubuntu系统为例&#xff0c;记录其用法及进度条qslider的控制。 首先&#xff0c;制作一个简单的界面文件mainwindow.ui&#xff1a; 然后&#xff0c;下载一个mp4或其他格式视频&#x…

【算法集训】基础算法:二分查找 | 概念篇

二分枚举&#xff0c;也叫二分查找&#xff0c;指的就是给定一个区间&#xff0c;每次选择区间的中点&#xff0c;并且判断区间中点是否满足某个条件&#xff0c;从而选择左区间继续求解还是右区间继续求解&#xff0c;直到区间长度不能再切分为止。 由于每次都是把区间折半&am…

小程序实现订阅功能和测试发送订阅信息

现在一次性订阅是只能用户点一次才能发送一次&#xff0c;而针对长期模板只有规定的几种类目政务、民生、交通等等的才可以&#xff0c;所以说感觉这功能其实已经不是很适合使用了&#xff0c;只适合一些特别的场景才可以使用。 地址&#xff1a;https://developers.weixin.qq…