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

news2024/12/26 1:05:05

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.coloradmin.cn/o/1574275.html

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

相关文章

完成产品兼容互认,用KubeBlocks可实现OceanBase集群管理

本文转载自云猿生聊技术(CloudNativeDataTech) 前言 KubeBlocks(简称 KB)在最新发布的0.7版本中,通过组件扩展(Addon)的形式新增了对OceanBase的支持功能。这一更新为企业级和非企业级用户提供…

摄影杂记一

摄影小白,最近买了一台微单,型号是佳能R10,加上18-150套机镜头和佳能RF 50 F1.8定焦镜头。开始学习摄影。 PS:摄影穷三代,单反毁一生。嘿嘿。 一、分镜头拍摄四步提升法 B站:六斤 拍视频三件事&#xff1…

线程池CompletableFuture异步编排复习笔记

一、线程回顾 1.1 初始化线程的 4 种方式 1)、继承 Thread public static class Thread01 extends Thread {Overridepublic void run() {System.out.println("当前线程:" Thread.currentThread().getId());int i 10 / 2;System.out.print…

十分钟搞定TCP三次握手面试

三次握手过程 1.客户端与客户端都处于close状态,服务器主动对某端口进行监听后处于LISTEN状态 2.客户端将SYN标志位置为1,向服务器发,SYN和初始序列号seq后处于SYN_SENT状态 2.服务器处于LISTEN状态,收到客户端发来的请求后将SYN和ACK的标志…

基于DCT和扩频的音频水印嵌入提取算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ......................................................................... N 10; %嵌入一…

ubuntu安装编程字体DejaVu Sans Mono

DejaVu Sans Mono 安装命令: sudo apt-get install ttf-dejavu

唐刘:关于产品质量的思考 - 如何评估质量

在上一篇文章《 关于产品质量的思考 - 我的基本认知 》中,作者通过亲身经历分享了对产品质量的思考和认知:高质量的产品不仅仅是通过测试来保证的,更是通过在真实场景中不断打磨和改进得来的。本文为“关于产品质量的思考”系列的第二篇&…

2024.4.2-day07-CSS 盒子模型(显示模式、盒子模型)

个人主页:学习前端的小z 个人专栏:HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结,欢迎大家在评论区交流讨论! 文章目录 作业 2024.4.2 学习笔记CSS标签元素显示模式1 块元素2 行内元素3 行内块元素4…

每日OJ题_优先级队列_堆③_力扣692. 前K个高频单词

目录 力扣692. 前K个高频单词 解析代码 力扣692. 前K个高频单词 692. 前K个高频单词 难度 中等 给定一个单词列表 words 和一个整数 k ,返回前 k 个出现次数最多的单词。 返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率&#xff0c…

技术再度取得优势,人工智能兴起推动需求,美芯涨价收割市场,收割中国制造?...

独家首发 ------------- 分析机构指出一季度全球存储芯片涨价了15%左右,而近期三星半导体预测全球存储芯片的价格还将继续上涨,预计二季度至少上涨两成,显示出美系芯片在忍受了一年多的亏损之后再度联手涨价。 2022年中国存储芯片取得了重大进…

数据流图

数据字典 数据流图平衡原则 父图与子图之间的平衡子图内平衡

IP地址到底有什么用

IP地址在计算机网络中的作用至关重要,它不仅是设备在网络中的唯一标识,更是实现网络通信、网络管理和安全的关键要素。下面,我们将从多个方面详细阐述IP地址的作用。 首先,IP地址作为设备的唯一标识,为网络通信提供了…

Leetcode 17.电话号码的字母组合

题目 思路 输入的digits有几个数就有几层。 一层中有几个数则取决于输入的数字对应的字母有几个。 1.确定递归函数的返回值及参数: 其实参数不是一开始就确定好的,而是你在写递归函数的时候缺啥,就往进去传啥。 这里我就直接全部写出来。…

什么是物联网云平台

在信息化和智能化浪潮的推动下,物联网云平台作为连接物理世界与数字世界的桥梁,正日益成为企业数字化转型的关键支撑。物联网云平台通过集成先进的云计算、大数据分析和人工智能等技术,为企业提供了高效、安全、智能的数据处理和应用服务&…

爬虫实战一、Scrapy开发环境(Win10+Anaconda3)搭建

#前言 在这儿推荐使用Anaconda进行安装,并不推荐大家用pythonpip安装,因为pythonpip的坑实在是太多了。 #一、环境中准备: Win10(企业版)Anaconda3-5.0.1-Windows-x86_64,下载地址,如果打不开…

Linux 著名的sudo、su是什么?怎么用?

一、su 什么是su? su命令(简称是:substitute 或者 switch user )用于切换到另一个用户,没有指定用户名,则默认情况下将以root用户登录。 为了向后兼容,su默认不改变当前目录,只设…

记录Ubuntu安装yum报错解决方法

安装问题分析 首先:分析一下,你按照别的博客安装yum出现的的大部分问题,都是说是在软件包里面无法定位yum,如下图一样,想必应该是这样的!!如果不是这个问题,放心这篇博客也可以帮你解…

可视化场景(9):智慧看板,可能是最直观的数据展示

10年经验的大数据可视化和数字孪生老司机,该领域的专家,是您可信赖的技术合伙人,分享该领域的项目和作品,欢迎互动交流。 hello,我是贝格前端工场,本期分享可视化大屏在安全生产与设备运维场景的应用&#…

【Web】纯萌新的BUUCTF刷题日记Day1

目录 [RoarCTF 2019]Easy Java [网鼎杯 2018]Fakebook [CISCN2019 华北赛区 Day2 Web1]Hack World [BJDCTF2020]The mystery of ip [网鼎杯 2020 朱雀组]phpweb [BSidesCF 2020]Had a bad day [BJDCTF2020]ZJCTF,不过如此 [BUUCTF 2018]Online Tool [GXYCTF…

pringboot2集成swagger2出现guava的FluentIterable方法不存在

错误信息 Description: An attempt was made to call a method that does not exist. The attempt was made from the following location: springfox.documentation.spring.web.scanners.ApiListingScanner.scan(ApiListingScanner.java:117) The following method did not ex…