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

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

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

相关文章

软考--软件设计师(软件工程总结3)

目录 1.面向对象技术 2。面向对象分析 3.面向对象程序设计(选用一种面向对象的程序语言) 4.面向对象测试 5.UML ​编辑6.UML的图 ​编辑7.设计模式 1.面向对象技术 面向对象对象继承类消息通信 对象:是基本运行时的实体,包…

使用Android完成案例教学

目录 题目:完成在Android平台下2个玩家分别利用2个手机连接在同一局域网下通过滑动摇杆分别使红飞机和黄飞机移动的开发。(全代码解析) 题目:完成在Android平台下2个玩家分别利用2个手机连接在同一局域网下通过滑动摇杆分别使红飞…

Open CASCADE学习|旋转变换

物体在三维空间中的旋转变换操作通常可以通过三种不同的方式来表示:矩阵(Matrix)、欧拉角(Euler Angles)和四元数(Quaternion)。下面详细解释这三种表示方法。 矩阵(Matrix&#xf…

【51单片机入门记录】RTC(实时时钟)-DS1302应用

目录 一、DS1302相关写函数 (1)Write_Ds1302 (2)Write_Ds1302_Byte 二、DS130相关数据操作流程及相关代码 (1)DS1302初始化数据操作流程及相关代码 (shijian[i]/10&…

【学习分享】小白写算法之插入排序篇

【学习分享】小白写算法之插入排序篇 前言一、什么是插入排序算法二、插入排序算法如何实现三、C语言实现算法四、复杂度计算五、算法稳定性六、小结 前言 要学好每个算法,我觉得需要先总结出规律,然后自己去推演一遍,加深记忆,否…

阿里云8核32G云服务器租用优惠价格表,包括腾讯云和京东云

8核32G云服务器租用优惠价格表,云服务器吧yunfuwuqiba.com整理阿里云8核32G服务器、腾讯云8核32G和京东云8C32G云主机配置报价,腾讯云和京东云是轻量应用服务器,阿里云是云服务器ECS: 阿里云8核32G服务器 阿里云8核32G服务器价格…

【记录】LangChain|llama 2速通版

官方教程非常长,我看了很认可,但是看完了之后呢就需要一些整理得当的笔记让我自己能更快地找到需求。所以有了这篇文章。【写给自己看的,里面半句废话的解释都没有,如果看不懂的话直接看官方教程再看我的】 我是不打算一开始就用…

Jenkins (四) - 搭建 Docker SonarQube

Jenkins (四) - 搭建 Docker SonarQube 拉取 SonarQube $ docker pull sonarqube拉取 postgres $ $ docker pull postgres运行 postgres $ docker run -itd \ -e TZAsia/Shanghai -e POSTGRES_USERtester \ -e POSTGRES_PASSWORD123456 \ -p 5432:5432 \ -v /home/tester/d…

京东云服务器4核8G主机租用价格418元一年,1899元3年

京东云轻量云主机4核8G服务器租用价格418元一年,1899元3年,配置为:轻量云主机4C8G-180G SSD系统盘-5M带宽-500G月流量,京东云主机优惠活动 yunfuwuqiba.com/go/jd 可以查看京东云服务器详细配置和精准报价单,活动打开如…

【mac操作】brew指令集

brew指令集记录 1. brew search 【软件名称】2. rm -rf $(brew --cache)3. brew install 【软件名】4. brew uninstall 【软件名】5. 未完待续,,,, 官网路径: Homebrew官网 最上面就来一个homebrew安装指令吧&#xf…

win10上一个详细的Django开发入门例子

1.Django概述 Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。 Django 框架的核心组件有: 用于创建模型的对象关系映射; 为最终用户设计较好的管理界面&#xff1b…

阿里云倚天云服务器详解_CPU采用倚天710处理器

阿里云倚天云服务器CPU采用倚天710处理器,租用倚天服务器c8y、g8y和r8y可以享受优惠价格,阿里云服务器网aliyunfuwuqi.com整理倚天云服务器详细介绍、倚天710处理器性能测评、CIPU架构优势、倚天服务器使用场景及生态支持: 阿里云倚天云服务…

c# wpf LiveCharts MVVM绑定 简单试验

1.概要 c# wpf LiveCharts MVVM绑定 简单试验 2.代码 <Window x:Class"WpfApp3.Window3"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://s…

gitea简单介绍

Gitea是一个轻量级的开源自托管Git服务&#xff0c;提供了类似GitHub的功能和界面。它是一个简单、易于安装和使用的Git代码托管解决方案&#xff0c;适用于个人、小型团队和企业。 Gitea的主要特点如下&#xff1a; 自托管&#xff1a;Gitea允许在自己的服务器上搭建和管理…

web安全学习笔记(6)

记一下第十节课的内容。 一.PHP语言中的if else判断 语法和c语言中非常类似&#xff0c;不再赘述&#xff0c;也可以使用if...elseif...elseif...else 1.True和False 2.&#xff0c;和 一个等号是赋值 两个等号是比较 三个等号是全等&#xff08;内容相等&#xff0c;数…

调用阿里云API接口实现电商领域命名实体识别NER

文章目录 阿里云简介命名实体识别NER阿里云API注册调用代码阿里云简介 阿里云是全球领先的云计算及人工智能科技公司,成立于2009年,为200多个国家和地区的企业、开发者和政府机构提供服务。阿里云提供了一系列的云计算服务,包括服务器租赁、云数据库、云存储、人工智能等,…

pytest的时候输出一个F后面跟很多绿色的点解读

使用pytest来测试pyramid和kotti项目&#xff0c;在kotti项目测试的时候&#xff0c;输出一个F后面跟很多绿色的点&#xff0c;是什么意思呢&#xff1f; 原来在使用pytest进行测试时&#xff0c;输出中的“F”代表一个失败的测试&#xff08;Failed&#xff09;&#xff0c;而…

自动驾驶中的交通标志识别原理及应用

自动驾驶中的交通标志识别原理及应用 附赠自动驾驶学习资料和量产经验&#xff1a;链接 概述 道路交通标志和标线时引导道路使用者有秩序使用道路&#xff0c;以促进道路行车安全&#xff0c;而在驾驶辅助系统中对交通标志的识别则可以不间断的为整车控制提供相应的帮助。比如…

Yalmip使用教程(7)-求解器的参数设置

博客中所有内容均来源于自己学习过程中积累的经验以及对yalmip官方文档的翻译&#xff1a;https://yalmip.github.io/tutorials/ 这篇博客将详细介绍yalmip工具箱中常用的求解器设置选项。 1.求解器的基本设置 使用sdpsettings函数可以对求解的相关参数进行设置。最常用的设置…

【操作系统】STM32-操作系统——持续更新

【操作系统】STM32-操作系统——持续更新 文章目录 前言一、ucosii二、freertos1.介绍2.移植 总结 前言 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、ucosii UCOSII移植到STM32F103C8T6上之移植记录&#xff08;一&#xff09; UCOSII移植到ST…