自动化测试面试题(含答案)

news2024/11/15 7:10:12

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

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

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

需求稳定,不会频繁变更。
研发和测试周期长,需要频繁执行回归测试。
需要在多种平台上重复运行相同测试的场景。
某些测试项目,通过手工测试无法实现,或者手工成本太高。
被测软件的开发较为规范,能够保证系统的可测试行

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

1.编写自动化测试计划
2.设计自动化测试用例
3.编写自动化测试框架和脚本
4.调试并维护脚本
5.无人值守测试
6.后期脚本维护(添加用例、开发更新版本)

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

在开发的时候就已经将大部分的bug解决了,所以使用中并不多。
不多,因为之前项目组是把已经测试通过的基本功能再进行自动化脚本编写和在后续版本执行自动化测试,它主要是保证已经测试通过的功能在新版本更新后没有问题。

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

1.引用自动化测试之后,能代替大量繁琐的回归测试工作
2.把业务测试人员解放出来,让业务测试人员把精力集中在复杂的业务功能模块上
3.自动化测试一般是对稳定下来的功能进行自动化,保证不会因为产品的更新导致之前稳定下来的功能出现BUG

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

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

误报原因一般是:

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

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

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

1.频繁地变更页面,经常要修改页面对象类里面的代码
2.自动化测试偶尔出现过误报
3.自动化测试结果出现覆盖的情况:Jenkins根据时间建立文件夹
4.自动化测试代码维护比较麻烦
5.自动化测试进行数据库对比数据

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

可以说出以下自己擅长的一种:
1.python+selenium+unittest
2.python+selenium+pytest

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

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

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

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

主要是用selenium driver.execute_script()方法,来修改js的元素
利用javaScript去修改当前元素的边框样式来到达高亮显示的效果,

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

1.页面加载元素过慢,添加等待时间
2.页面有frame框架页,需要先跳转入frame框架再定位

driver.switch_to.frame()
3.可能该元素是动态元素,定位方式要优化,可以使用部分元素定位或通过父节点或兄弟节点定位。
4.可能识别了元素,但是不能操作,比如元素不可用,不可写等。需要使用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打开的页面查找元素,
1.我们在点击链接前使用driver.current_window_handle获得当前窗口句柄。
2.再点击链接。点击后通过driver.window_handles获得所有窗口的句柄,
3.然后再循环找到新窗口的句柄,然后再通过driver.switch_to.window()方法跳转到新的窗口。

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

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

17.如何处理下拉菜单?

在Selenium中有一个叫Select的类,这个类支持对下拉菜单进行操作。使用方法如下:
1.定位元素
2.把定位的元素转化成Select对象。
sel = Select(定位的元素对象)
3.通过下标或者值或者文本选中下拉框。
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、自动化中有哪三类等待?他们有什么特点?

1.线程等待(强制等待)如time.sleep(2):线程强制休眠2秒钟,2秒过后,再执行后续的代码。建议少用。
2.imlicitlyWait(隐式等待)会在指定的时间范围内不断的查找元素,直到找到元素或超时,特点是必须等待整个页面加载完成。
3.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不同点

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

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

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

4、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)

38.如果需要造假数据你会怎么做

使用faker库

from faker import Faker
#创建对象,默认生成的数据为为英文,使用zh_CN指定为中文
fake = Faker('zh_CN')
print(fake.name())#随机生成姓名
print(fake.address())#随机生成地址
print(fake.phone_number())#随机生成电话号码
print(fake.pystr())#随机生成字符串
print(fake.email())#随机生成邮箱地址
for i in range(10):
    print(fake.name())#随机生成10个姓名

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

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

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

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

相关文章

SprinBoot+Vue校园部门资料管理系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质…

高反差保留DetailTransfer测评

inpainting中的生成链路优化. ComfyUI中IC-Light节点的Detail Transfer节点参数测试_iclight detailtransfer-CSDN博客文章浏览阅读1k次,点赞16次,收藏23次。ic-light是一个能重绘画面光影的节点,但是在重绘的过程中,难免会将图像本身的细节进行重绘,尤其是在电商的场景中…

Python自动化测试学习-PO设计模式

PO模式:Page Object,是一种页面对象设计模式,算是一种比较好的设计模式。在该设计模式中,功能类(PageObjects)所代表的是每个页面之间的逻辑关系。 PO设计模式 一、PO设计模式的优点 PO模式有以下优点&a…

【Python报错已解决】No Python at ‘C:Users…Python Python39python.exe’

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一:检查Python安装路径2.2 …

Linux网络编程---传输层

一、重谈端口号 1、在 TCP/IP 协议中 , 用 " 源 IP", " 源端口号 ", " 目的 IP", " 目的端口号 ", " 协议号 " 这样一个五元组来标识一个通信 ( 可以通过netstat -n查看 ); 2、端口号的划分 0 - 1023: 知名端口号 , HTTP…

树莓派通过串口驱动LD3320语音模块

树莓派通过串口驱动LD3320语音模块 文章目录 树莓派通过串口驱动LD3320语音模块一、LD3320语音模块的认知1.1 模块参数:1.2 模块结构介绍:1.3 模块的串口连接:1.4 验货测试方法:1.5 配套程序识别语句修改方法: 二、树莓…

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等) 公众号:老苏畅谈运维 欢迎关注本人公众号,更多精彩与您分享…

Stream 流式编程

优质博文:IT-BLOG-CN 大家都知道可以将Collection类转化成流Stream进行操作(Map并不能创建流),代码变得简约流畅。我们先看下流的几个特点: 1、流并不存储元素。这些元素可能存储在底层的集合中,或者是按需…

信号与槽,QMainWindow中常用类的使用

QMainWindow菜单栏和工具栏 菜单栏,工具栏,状态栏,中心部件,铆接部件(浮动窗口) 菜单栏 //创建菜单栏QMenuBar *bar menuBar();//指定父组件this->setMenuBar(bar);this->resize(600,400);this-&g…

老师发布月考成绩的必备小程序

随着新学期的到来,教师们面临着诸多挑战,从课程规划到班级管理,再到学生的个别指导,每一项任务都至关重要。是否有工具能够帮助教师们在这些繁忙的事务中找到一丝轻松呢? “易查分”小程序正是为了解决这一问题而设计…

云原生学习交流

欢迎加入技术交流群&#xff0c;与阿里、腾讯、字节、华为等运维大佬面对面交流和互相学习。 请扫码备注 加群&#xff0c;<城市>-<公司/自由职业>-<昵称>&#xff0c;如“加群&#xff0c;广州-阿里-行则”&#xff1a;

基于SpringBoot的教师人事档案管理系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBootMyBatis 工具&#xff1a;IDEA/Eclipse、Navicat、Maven 系统展示 首页 教师管理 奖惩…

本地服务器部署Text generation并添加code llama实现远程多人协作

文章目录 前言1. 本地部署Text generation Web UI2. 安装CodeLlama大模型3. 实现公网远程使用Code Llama4. 固定Text generation Web UI公网地址 前言 本篇文章介绍如何在本地部署Text generation Web UI并搭建Code Llama大模型运行,并且搭建Code Llama大语言模型&#xff0c;…

关于HashMap的put方法

前言&#xff1a; HashMap的底层是数组加链表的形式实现&#xff0c;是线程不安全的&#xff0c;在jdk1.7之前put都是采用的头插法&#xff0c;但是使用头插法在多线程的环境下是有可能导致死循环&#xff0c;所以在jdk1.8就将put方法改成了尾插法。 1.产生死循环的原因&…

mfc140u.dll错误是什么情况?如何将mfc140u.dll丢失的解决方法详细分析

mfc140u.dll是 Microsoft Foundation Class (MFC) 库的一部分&#xff0c;通常与 Visual Studio 2015 及其后续版本相关联。如果系统中缺少 mfc140u.dll&#xff0c;可能会导致依赖该库的应用程序无法启动&#xff0c;并显示错误消息&#xff0c;如“程序无法启动&#xff0c;因…

AI预测福彩3D采取888=3策略+和值012路或胆码测试9月9日新模型预测第82弹

经过80多期的测试&#xff0c;当然有很多彩友也一直在观察我每天发的预测结果&#xff0c;得到了一个非常有价值的信息&#xff0c;那就是9码定位的命中率非常高&#xff0c;70多期一共只错了8次&#xff0c;这给喜欢打私房菜的朋友提供了极高价值的预测结果~当然了&#xff0c…

CCF推荐A类会议和期刊总结(计算机网络领域)- 2022

CCF推荐A类会议和期刊总结&#xff08;计算机网络领域&#xff09;- 2022 在中国计算机学会&#xff08;CCF&#xff09;的推荐体系中&#xff0c;A类会议和期刊代表着计算机网络领域的顶尖水平。这些会议和期刊不仅汇集了全球顶尖的研究成果&#xff0c;还引领着该领域的前沿发…

梨花声音研修院退费普通话学习对国际交流的影响

随着中国在国际舞台上的影响力不断增强&#xff0c;普通话在国际交流中的作用日益显著。普通话不仅是中国的国家通用语言&#xff0c;也是全球范围内越来越重要的一种交流工具。通过学习普通话&#xff0c;不仅可以促进国际合作、增强留学和旅游体验&#xff0c;还能拓展全球就…

哈希表,算法

哈希存储(散列存储) 为了快速定位数据 哈希表 哈希冲突 / 哈希矛盾 关键字不一样&#xff0c;但是映射之后结果一样 如何避免 哈希矛盾&#xff1f; 1、重新设计哈希函数&#xff0c;尽可能均匀散列分布在哈希表 2、开放定址法&#xff1a;向下寻找未存储的位置进行存放数…

【简历】 25届广州某二本JAVA简历:包装的实习经历是不能作为工龄的

注&#xff1a;为保证用户信息安全&#xff0c;姓名和学校等信息已经进行同层次变更&#xff0c;内容部分细节也进行了部分隐藏 简历说明 这是一份25届广州某二本学校的Java简历。校招备战上来第一任务就是要定校招层次&#xff0c;因为大中小公司的校招时间点要求、面试官的…