「 自动化测试 」面试题..

news2024/11/16 3:26:20

1.你会封装自动化测试框架吗?

自动化框架主要的核心框架就是分层+PO模式:分别为:基础封装层BasePage,PO页面对象层,TestCase测试用例层。然后再加上日志处理模块,ini配置文件读取模块,unittest+ddt数据驱动模块,jenkins持续集成模式组成。

2.自动化测试的使用场景?

需求稳定,不会频繁变更。

研发和测试周期长,需要频繁执行回归测试。

需要在多种平台上重复运行相同测试的场景。

某些测试项目,通过手工测试无法实现,或者手工成本太高。

被测软件的开发较为规范,能够保证系统的可测试行

3.请描述一下自动化测试流程?

编写自动化测试计划

设计自动化测试用例

编写自动化测试框架和脚本

调试并维护脚本

无人值守测试

后期脚本维护(添加用例、开发更新版本)

4.自动化测试发现BUG多吗?

在开发的时候就已经将大部分的bug解决了,所以使用中并不多

不多,因为之前项目组是把已经测试通过的基本功能再进行自动化脚本编写和在后续版本执行自动化测试,它主要是保证已经测试通过的功能在新版本更新后没有问题。

5.你觉得自动化测试的价值在哪里?你们公司为什么要做自动化测试?

引用自动化测试之后,能代替大量繁琐的回归测试工作

把业务测试人员解放出来,让业务测试人员把精力集中在复杂的业务功能模块上

自动化测试一般是对稳定下来的功能进行自动化,保证不会因为产品的更新导致之前稳定下来的功能出现BUG

6.自动化测试有误报过bug吗?产生误报怎么办?

有误报过,有时候自动化测试报告中显示发现了bug,实际去通过手工测试去确认又不存在该bug。

误报原因一般是:

元素定位不稳定,需要尽量提高脚本的稳定性;

开发更新了页面但是测试没有及时更新维护!

7.自动化测试过程中,你遇到了哪些问题,是如何解决的

频繁地变更页面,经常要修改页面对象类里面的代码

自动化测试偶尔出现过误报

自动化测试结果出现覆盖的情况:Jenkins根据时间建立文件夹

自动化测试代码维护比较麻烦

自动化测试进行数据库对比数据

8.在上一家公司做自动化测试用的什么框架?

可以说出以下自己擅长的一种:

python+selenium+unittest

python+selenium+pytest

9.在selenium自动化测试中,你一般完成什么类型的测试?自动化覆盖率?

主要是冒烟测试和回归测试。回归测试主要写一些功能稳定的场景,通过自动化手段去实现,节约测试时间。

因为自动化测试用例也是在不断的更新和迭代,没有刻意去统计,大概在30%-40%左右

10.在执行脚本过程,如何实现当前元素高亮显示?

主要是用selenium driver.execute_script()方法,来修改js的元素

利用javaScript去修改当前元素的边框样式来到达高亮显示的效果,

11.如果一个元素无法定位,你一般会考虑哪些方面的原因?

页面加载元素过慢,添加等待时间

页面有frame框架页,需要先跳转入frame框架再定位

driver.switch_to.frame()

可能该元素是动态元素,定位方式要优化,可以使用部分元素定位或通过父节点或兄弟节点定位。

可能识别了元素,但是不能操作,比如元素不可用,不可写等。需要使用js先把前置的操作完成,

12.元素定位方法你熟悉的有哪些?

ID,Name,Class_name,Tag_name.Link_text,Xpath,CSS

13.遇到frame框架页面怎么处理?

先用driver.switch_to.frame()跳转进去frame,然后再操作页面元素,操作完后使用driver.swith_to.default_content()跳转出来

14.遇到alert弹出窗如何处理?

###需要先定位到alert元素,点击之后

使用driver.switch_to.alert方法先跳转到alert弹出窗口

然后再通过accept点击确定按钮,通过dismiss点击取消难,通过text()获得弹出窗口的文本。

我们常见的alert弹窗有两种:基于windows弹窗和基于web页面弹窗

webdriver是能够处理alert弹窗的,Selenium提供了Alert这个接口。

相关操作代码如下:

Alert alert = driver.switchTo().alert() // 切换到Alert

alert.accept() // 点击弹窗上确定按钮

alert.dismiss() // 点击弹窗的取消按钮

alert.getText() // 获取弹窗上的文本文字内容

alert.sendkeys() // 有些弹窗还支持文本输入,这个可以把要输入字符通过sendkeys方法输入

15.如何处理多窗口?

多窗口之间跳转处理,我们在项目中也经常遇到。就是,当你点击一个链接,这个链接会在一个新的tab打开,然后你接下来要在新tab打开的页面查找元素,

我们在点击链接前使用driver.current_window_handle获得当前窗口句柄。

再点击链接。点击后通过driver.window_handles获得所有窗口的句柄, 然后再循环找到新窗口的句柄,然后再通过driver.switch_to.window()方法跳转到新的窗口。

16.怎么验证元素是enable/disabled/checked状态?

定位元素后:分别通过isEnabled(),isSelected(),isDisplayed()三个方法进行判断。

17.如何处理下拉菜单?

在Selenium中有一个叫Select的类,这个类支持对下拉菜单进行操作。使用方法如下:

定位元素

把定位的元素转化成Select对象。

sel = Select(定位的元素对象)

通过下标或者值或者文本选中下拉框。

sel.select_by_index(index);

sel.select_by_value(value);

sel.select_by_visible_text(text);

18.在日历这种web 表单你是如何处理的?

首先要分析当前网页使用日历插件的前端代码,看看能不能通过元素定位,点击日期实现,如果不能,可能需要借助javascript。

还有些日历控件一个文本输入框,可以直接sendKeys()方法来实现传入一个时间的数据。

19.举例一下说明一下你遇到过哪些异常

常见的selenium异常有这些:

NoSuchElementException:没有该元素异常

TimeoutException :超时异常

ElementNotVisibleException :元素不可见异常

NoSuchAttributeException :没有这样属性异常

NoSuchFrameException :没有该frame异常

20.关闭浏览器中quit和close的区别

简单来说,两个都可以实现退出浏览器session功能,close是关闭你当前聚焦的tab页面,而quit是关闭全部浏览器tab页面,并退出浏览器session。

quit一般用在结束测试之前的操作,close用在执行用例过程中关闭某一个页面的操作

21.在Selenium中如何实现截图,如何实现用例执行失败才截图

在Selenium中提供了一个get_screenshot_as_file()的方法来截图的,一般结合try/except捕获异常时使用,进行错误截图

#官网的最新方法

driver.save_screenshot(’./image.png’)

22.如何实现文件上传?

定位元素后,直接使用send_keys()方法设置就行,参数为需要上传的文件的路径。

23.自动化中有哪三类等待?他们有什么特点?

线程等待(强制等待)如time.sleep(2):线程强制休眠2秒钟,2秒过后,再执行后续的代码。建议少用。

imlicitlyWait(隐式等待)会在指定的时间范围内不断的查找元素,直到找到元素或超时,特点是必须等待整个页面加载完成。

WebDriverWait(显式等待)通常是我们自定义的一个函数代码,这段代码用来等待某个元素加载完成,再继续执行后续的代码

24.如何实现鼠标悬停,键盘事件和拖拽动作?

在Webdriver中,处理键盘事件和鼠标事件,一般使用Actions类提供的方法,包括鼠标悬停,拖拽和组合键输入。

这里介绍几个方法

方法:clickAndHold()

使用场景:找到一个元素,点击鼠标左键,不放手。自己可以点击鼠标不松开试试这个场景。

方法:contentClick()

使用场景:模拟鼠标右键点击,一般右键会带出菜单来。

方法:doubelClick()

使用场景:模拟鼠标双击

方法:dragAndDrop(source,target)

使用场景:模拟从source这个位置,拖拽一个元素到target位置

键盘事件方法:keyDown(keys.ALT), keyUp(keys.SHIFT)

使用场景:点击键盘事件,分为两个动作,一个点击键盘,第二个动作是释放点击(松开)

25.什么是断言

断言assert 用于代码中验证实际结果符合预期结果,如果测试用例失败,则抛出异常并且提供断言日志

26.自动化测试分为哪几类

UI自动化:又分为web和和app自动化 (web自动化(selenium)app自动化(appium))

接口自动化

27.一个接口的响应在下一个接口中怎么用?(一个请求依赖另一个请求的返回结果)

cookie 全局变量 反射

存储到excel表,需要时再取

框架里边的期望结果:查库依赖用户成功之后

28.unitest和pytest框架讲解以及使用的是哪个一个为什么不用另一个?

较unittest,pytest有以下优点

自动发现测试模块、测试方法

断言使用asert+表达式

可以设置会话级、模块级、类级、函数级的fixtures、数据准备+清理工作

有丰富的插件库,目前在300个以上。

29. get和post不同点

GET - 从指定的资源请求数据。请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接

POST - 向指定的资源提交要被处理的数据。POST请求会把请求的数据放置在HTTP请求包的包体中

post对数据进行加密更加安全,且可以包含更大的数据

30.http和https不同点

HTTPS 协议需要到 CA (Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用。(以前的网易官网是http,而网易邮箱是 https)

HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 SSL 加密传输协议。

HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

HTTP 的连接很简单,是无状态的。HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。(无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息)

31.cookie、session、token各自区别

cookie:在客户端存储在客户端用于存储会话信息的

session:在服务器端,记录用户的请求状态,一般默认时间30min

session_id会存在cookie中,每次请求cookie中所有信息都会传递给服务器,服务器通过 session_id来识别是否是同一个用户请求,不是同一个用户的话,就会要求重新登录

token:访问权限

鉴权:访问的接口是否正常,是否非法访问绕过前端。防止跳过页面直接访问接口。token授权:是否具有访问接口的权限。唯一全局动态的 key

32.你觉得自动化测试最大的缺陷是什么?

不稳定

可靠性

不易维护

成本与收益

33.Selenium是否支持桌面应用软件的自动化测试

Selenium不支持桌面软件的自动化测试,Selenium是根据网页元素的属性才定位元素,而其他桌面软件自动化测试工具是根据桌面元素的位置来定位元素,当然现在也有根据桌面元素的属性来定位的。

#可以使用pyautogui来实现桌面自动化

34.UI自动化能发现多少Bug

UI自动化的目的不是为了发现多少Bug,主要是为了减轻重复的基础操作和线上监控的作用

35.Selenium 中如何保证操作元素的成功率?也就是说如何保证我点击的元素一 定是可以点击的?

1.添加元素智能等待时间 driver.implicitly_wait(30)

2.添加强制等待时间 time.sleep()

3.try 方式进行id,name,clas,x path, css selector不同方式进行定位,如 果第一种失败可以自动尝试第二种

36.鼠标操作常用函数

‍context_click() 右击 --> 此方法模拟鼠标右键点击效果

double_click() 双击 --> 此方法模拟双标双击效果

drag_and_drop() 拖动 --> 此方法模拟双标拖动效果

move_to_element() 悬停 --> 此方法模拟鼠标悬停效果

perform() 执行 --> 此方法用来执行以上所有鼠标方法

37. 键盘操作常用函数

send_keys(Keys.BACK_SPACE) 删除键(BackSpace)

send_keys(Keys.SPACE) 空格键(Space)

send_keys(Keys.TAB) 制表键(Tab)

send_keys(Keys.ESCAPE) 回退键(Esc)

send_keys(Keys.ENTER) 回车键(Enter)

send_keys(Keys.CONTROL,‘a’) 全选(Ctrl+A)

send_keys(Keys.CONTROL,‘c’) 复制(Ctrl+C)

send_keys(Keys.CONTROL,‘v’) 全选(Ctrl+V)

send_keys(Keys.CONTROL,‘x’) 复制(Ctrl+X)

提问:最近有在面试,市场怎么样?

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:【文末小卡片领取】

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

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

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

相关文章

MybatisX-Generator自动代码生成插件

一、概述 MybatisX-Generator是mybatis-plus的代码自动生成插件,用在idea的开发工具上,我们可以idea上安装这个插件,然后通过idea自带的数据库进行使用,打开idea的数据库database,链接一个数据库,然后对你…

MLP 多层感知机

为了拟合更特殊的函数,在网络中加入多个隐藏层,克服线性的限制。最后一层可以看作线性predictor。 一、 1.最简单流程 输入x矩阵,含有n个样本,每个样本有d个特征。经过隐藏层H将维度转化为h,在经过最后的输出层O将维…

浙江搞一场知识竞赛活动要多少钱

浙江省属于国内比较富裕地方,消费相比其他地方较高,在那里举办一场知识竞赛活动根据规模划分:小型知识竞赛的预算大致在2-3万;中型知识竞赛活动3-10万之间,高端知识竞赛10至30万元之间或更高。以上费用均未考虑场地和选…

十年电商经验分享:从0-1打单品保姆级教程(下)

接着上一篇《十年电商经验分享:从0-1打单品保姆级教程(上)》,各位觉得有参考意义的商家朋友们可以点赞收藏一下。 5、制作 sku 图片以及 sku 名称卖点 这里很多商家可能不太注意,这个也是优化转化率最好的一块内容&a…

【数据结构与算法 | 灵神题单 | 删除链表篇】力扣2487, 237

1. 力扣2487:从链表中删除节点 1.1 题目: 给你一个链表的头节点 head 。 移除每个右侧有一个更大数值的节点。 返回修改后链表的头节点 head 。 示例 1: 输入:head [5,2,13,3,8] 输出:[13,8] 解释:需…

数字影像产业基地:绿色、智能、创新,如何并存发展?

在当今快速发展的时代,数字影像产业基地正以独特的魅力展现着绿色、智能、创新并存发展的崭新风貌。 绿色,是数字影像产业基地的底色。随着环保意识的不断提高,基地积极践行绿色发展理念。 智能,是数字影像产业基地的核心竞争力。…

4 个步骤带你快速上手 Einstein Copilot for Tableau

如果你的企业仍未部署或希望迁移至 Tableau Cloud,可考虑订阅 Tableau 高级套件。 自 Einstein Copilot for Tableau 发布以来,相信部分用户已经尝试过在 Tableau Cloud 中借助 AI 对话助理,快速解决数据分析中的问题,获得更准确的…

儿童护眼灯哪个牌子好?五款眼科医生推荐的台灯分享

随着年级的升高和学习内容的增加,学生的休闲娱乐时间逐渐减少,相反,他们在书桌前度过的时间却越来越多。近年来,由于电子产品的广泛使用,我国青少年的用眼负担显著增加。据权威机构预测,到2050年&#xff0…

隧道裂缝混泥土裂缝裂痕检测数据集 5000张 带标注 voc

隧道裂缝混凝土裂缝裂痕检测数据集 数据集规模: 图像数量:5000张标注类型:裂缝检测(包括隧道内壁、桥梁、建筑结构中的裂缝)格式兼容性:支持VOC标注格式 数据集内容: 该数据集专门用于训练和…

鸿蒙HarmonyOS应用开发者高级认证重点知识详解

✍️作者简介:小北编程(专注于HarmonyOS、Android、Java、Web、TCP/IP等技术方向) 🐳博客主页: 开源中国、稀土掘金、51cto博客、博客园、知乎、简书、慕课网、CSDN 🔔如果文章对您有一定的帮助请&#x1f…

springboot(IDEA)开发pom配置文件引用本地jar包

pom配置信息 <dependency><groupId>com.huawei.gauss200</groupId><artifactId>gsjdbc200</artifactId><version>8.1.3.6</version></dependency>将jar包引入本地maven仓库 mvn install:install-file -DfileD:/iso/gsjdbc200…

C++(进阶 ) ---模板

1. 非类型模板参数 模板参数分为类型形参与非类型形参。 类型形参&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之类的参数类型名称。 非类型形参&#xff0c;就是用一个常量作为类(函数)模板的一个参数&#xff0c;在类(函数)模板中可将该参数当成常量…

实现绑定UDP端口的Server程序

实现绑定UDP端口的Server程序 1. UDP Server的工作原理2. 伪代码3. C代码实现4. 代码解释5. 编译与运行在网络编程中,UDP(User Datagram Protocol)是一种无连接、不可靠的协议,相比于TCP,它提供了更简单的通信机制,适用于某些不要求可靠传输的应用场景。本文将介绍如何使…

<C++> set、map模拟实现

目录 一、适配器红黑树 二、红黑树再设计 1. 重新设计 RBTree 的模板参数 2. 仿函数模板参数 3. 正向迭代器 构造 operator*() operator->() operator!() operator() operator--() 正向迭代器代码 4. 反向迭代器 构造 operator* operator-> operator operator-- operat…

机械厂如何做好企业级数据治理系统落地

生产制造企业的数据治理面临着诸多难点与挑战&#xff0c;今天以某国营机械厂为例&#xff0c;分享机械制造企业数据治理经验。某机械厂是国家投资的国有大型企业&#xff0c;业务范围覆盖到零部件的研发、测试、生产制造&#xff0c;属于典型的离散制造企业。 鉴于近年来国家…

设计友好型相亲交友应用的关键要素揭秘

在设计一款友好型的相亲交友应用时&#xff0c;关键在于创造一个安全、舒适且高效的用户体验。以下是几个核心要素&#xff0c;它们共同构成了一个成功的相亲交友应用的基础&#xff08;编辑h17711347205&#xff09;。 1. 简洁直观的用户界面&#xff08;UI&#xff09; 用户…

【Java数据结构】泛型的进阶部分(泛型通配符)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…

protobuf使用

我下载的是 protobuf-27.4 以下使用vs2022 根据readme&#xff0c;执行如下命令 "C:\Program Files\CMake\bin\cmake.exe" -G "Visual Studio 17 2022" -DCMAKE_INSTALL_PREFIXC:\Users\x\Downloads\install C:\Users\x\Downloads\protobuf-27.4 -D…

【动态规划】子序列问题(数组中不连续的一段)

子序列问题 1.最长递增子序列2.摆动序列3.最长递增子序列的个数4.最长数对链 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; 1.最长递增子序列…

Java+Swing学生信息管理系统

JavaSwing学生信息管理系统 一、系统介绍二、功能展示1.管理员登陆2.学生信息查询3.学生信息添加4.学生信息修改5.删除 三、系统实现1.StudentFrame .java 四、其它1.其他系统实现 一、系统介绍 该系统实现了管理员系统登陆、学生信息查询、学生信息添加、学生信息修改、学生信…