软件测试面试题分享,刷完这套八股文,你的offer就稳了

2023-11-30 05:28

本文主要是介绍软件测试面试题分享,刷完这套八股文,你的offer就稳了,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

把最近朋友及自己遇到的面试题记录下来,并写上自己的答案仅供大家参考,看不懂的可以【点击文末小卡片】,大家一起交流学习。

另外,面试官的问题,大部分都是看你的简历提问,所以大家不用纠结为什么自己没有被问到这些问题,分享这些面试题,只是让大家对照下,自己简历当中是否提到类似的技术,做到有备无患。

在这我为大家准备了一份软件测试视频教程(含面试、接口、自动化、性能测试等),就在下方,需要的可以直接去观看,也可以直接【点击文末小卡片免费领取资料文档】

软件测试视频教程观看处:

2023最新【软件测试面试300问】面试八股文教程,涵盖自动化测试/接口测试/性能测试/测试开发等内容

面试题列表

1.liunx查询日志有哪些命令,筛选关键字怎么筛选?

答:cat、tail 、head、less等等  筛选关键字可以用grep,譬如cat 日志文件 | grep "关键字"。 

2.sql删除有两种,知道有什么区别吗?

答:truncat、delete。

truncate和delete的主要区别:

delete是DML,执行delete操作时,每次从表中删除一行,并且同时将该行的的删除操作记录在redo和undo表空间中以便进行回滚(rollback)和重做操作,但要注意表空间要足够大,需要手动提交(commit)操作才能生效,可以通过rollback撤消操作。delete可根据条件删除表中满足条件的数据,如果不指定where子句,那么删除表中所有记录。delete语句不影响表所占用的extent,高水线(high watermark)保持原位置不变。truncate是DDL,会隐式提交,所以,不能回滚,不会触发触发器。truncate会删除表中所有记录,并且将重新设置高水线和所有的索引,缺省情况下将空间释放到minextents个extent,除非使用reuse storage。不会记录日志,所以执行速度很快,但不能通过rollback撤消操作(如果一不小心把一个表truncate掉,也是可以恢复的,只是不能通过rollback来恢复)。对于外键(foreignkey )约束引用的表,不能使用 truncate table,而应使用不带 where 子句的 delete 语句。truncatetable不能用于参与了索引视图的表。

3.sql里 having  和where条件有了解过吗?

having和where 区别

1)一般情况下,WHERE 用于过滤数据行,而 HAVING 用于过滤分组。

2)WHERE 查询条件中不可以使用聚合函数,而 HAVING 查询条件中可以使用聚合函数。

3)WHERE 在数据分组前进行过滤,而 HAVING 在数据分组后进行过滤 。

4)WHERE 针对数据库文件进行过滤,而 HAVING 针对查询结果进行过滤。也就是说,WHERE 根据数据表中的字段直接进行过滤,而 HAVING 是根据前面已经查询出的字段进行过滤。

5)WHERE 查询条件中不可以使用字段别名,而 HAVING 查询条件中可以使用字段别名

4.连表查询知道怎么做吗,左右表连接有什么区别?

左连接和右连接区别为:语法公式不同、基础表不同、结果集不同。

一、语法公式不同

1、左连接:左连接的关键字是left join,语法公式为select *from dave a left join bl b on a .id=b .id。

2、右连接:右连接的关键字是right join,语法公式为select *from dave a right join bl b on a .id=b .id。

二、基础表不同

1、左连接:左连接的基础表为left join左侧数据表。

2、右连接:右连接的基础表为right join右侧数据表。

三、结果集不同

1、左连接:左连接的结果集为left join左侧数据表中的数据,再加上left join左侧与右侧数据表之间匹配的数据。

2、右连接:右连接的结果集为rightjoin右侧数据表中的数据,再加上rightjoin左侧与右侧数据表之间匹配的数据。

5.python定位有哪几种方式?


一,python 常用的8种定位方法1,使用 ID定位           driver.find_element_by _id('ID 值')driver.find_element(by ='id',value ='ID值')2,使用 name定位单个元素    driver.find_element_by_name('name值')driver.find_element(by='name',value='name值')定位多个元素     driver.find_elements_by_name('name值')driver.find_elements(by='name',value='name值')3,使用 class name定位单个元素   driver.find_element_by_class_name('class 属性值')driver.find_element(by='class name',value='class 属性值')定位多个元素         driver.find_elements_by_class_name('class 属性值')driver.find_elements(by='class name',value='class 属性值')4,使用 标签名称定位单个元素    driver.find_element_by_tag_name('标签名称')driver.find_element(by='tag name',value ='标签名称')定位多个元素       driver.find_elements_by_tag_name('标签名称')driver.find_elements(by='tag name',value ='标签名称')5,使用 链接的全部文字定位    driver.find_element_by_link_text('链接全部文字内容')driver.find_element(by='link text',value='链接全部文字内容')定位多个元素      driver.find_elements_by_link_text('链接全部文字内容')driver.find_elements(by='link text',value='链接全部文字内容')6,使用 部分链接文字定位    driver.find_element_by_partial_link_text('链接的部分文字')driver.find_element(by='partial link text',value ='链接的部分文字')定位多个元素    driver.find_elements_by_partial_link_text('链接的部分文字')driver.find_elements(by='partial link text',value ='链接的部分文字')7,使用 XPath 定位       driver.find_element_by_xpath('xpath 定位表达式')driver.find_element(by='xpath',value ='xpath定位表达式')定位多个元素   driver.find_elements_by_xpath('xpath 定位表达式')driver.find_elements(by='xpath',value ='xpath定位表达式')8,使用 CSS方式定位     driver.find_element_by_css_selector('CSS定位表达式')driver.find_elements(by='css selector',value='CSS定位表达式')定位多个元素   driver.find_elements_by_css_selector('CSS定位表达式')driver.find_elements_by_css_selector('CSS定位表达式')二,XPath 定位的必杀技 定位表达式1, 使用绝对路径定位元素    /html/body/div/input[@value = '查询']    不建议使用2, 使用相对路径定位元素   //input[@value = '查询']3, 使用索引号定位元素     //input[2]    //div[last()]/a   最后一个div元素下的a标签       //div[last()-1]/a                倒数第二个div元素下的a标签//div/input[position()<2]        div元素下input的位置序列号小于2的input标签4, 使用页面元素多个属性值定位元素   //div[@name='div1' and @value = 'div2']/input[@name='div1input']5, 使用模糊属性值定位元素         //img[starts-with(@alt,'div1')]   查找属性alt的属性值以div1开始的页面元素//img[contains(@alt,'img')]     查找属性alt的属性值包含img 的页面元素6, 使用XPath轴定位元素     //div[@name='div1']/parent::input 查找name属性值为div1的div元素的父级input元素//div[@name='div1']/child::img    查找name属性值为div1的div元素的子级img元素//div[@name='div1']/following::img   查找name属性值为div1的div元素后面的所有img元素  //div[@name='div1']/following-sibling::img  查找name属性值为div1的div元素后面所有兄弟img元素//div[@name='div1']/preceding::img          查找name属性值为div1的div元素前面的所有img元素 //div[@name='div1']/preceding-sibling::img[1]   查找name属性值为div1的div元素前面的所有兄弟中的第一个img元素//div[@name='div1']/ancestor::img       查找name属性值为div1的div元素的所有上级的img元素//div[@name='div1']/descendant::img       查找name属性值为div1的div元素的所有下层的img元素7, 使用页面元素的文本定位元素         //a[contains(text(),'百度')]     //a[text()='搜狐']8, 使用XPath 运算符定位元素          //div[a>9] 子元素中有a元素,文本值>9的div元素//div[a<10 and span =13]  子元素中有a元素,文本值>9 同时子元素span文本值=13的div元素

6.python_UI自动化,有三个等待方式,知道有什么区别吗?

  • sleep():强制等待,设置固定休眠时间。后脚本的执行过程中执行 sleep()后线程休眠,而另外两种线程不休眠。

  • implicitly_wait():隐式等待,是设置的全局等待。设置等待时间,是对页面中的所有元素设置加载时间,如果超出了设置时间的则抛出异常。隐式等待可以理解成在规定的时间范围内,浏览器在不停的刷新页面,直到找到相关元素或者时间结束。

  • WebDriverWait():显示等待,是针对于某个特定的元素设置的等待时间,在设置时间内,默认每隔一段时间检测一次当前页面某个元素是否存在,如果在规定的时间内找到了元素,则直接执行,即找到元素就执行相关操作,如果超过设置时间检测不到则抛出异常。默认检测频率为0.5s,默认抛出异常为:NoSuchElementException。

7.python里的鼠标悬浮,知道怎么做吗?

定位到要悬停的元素
move = driver.find_element_by_id("xx")
对定位到的元素执行悬停操作
ActionChains(driver).move_to_element(move).perform()

8.之前的接口自动化是用什么做的?

9.给你一个普通接口,你会怎么测?

如图: 

10.第二个项目,说说一下你在里面的工作内容?

基本的功能测试必须说,如果做过自动化、性能或开发提效工具的工作,那就详细说下细节,这是你区别其他应聘者的闪光点,也是你征服面试官,谈薪的资本,即使没有,编也要编一个。

11.你python和java哪个个熟悉一点?

看自己对哪个熟悉吧,建议大家在学习语言的同时,多看看相关的八股文

12.你觉得你有什么优势?

因人而异,特别说明一点,很多人说到自己的优势,无非就是,细心、负责、有耐心,沟通能力好,巴拉巴拉一大堆,我是面试官,我都觉得很假,很恶心。

所以个人建议,大家在说自己的优势的同时,尽量举例说明,而不是干巴巴的猛夸自己。

例如:我个人具备一定的开发水平,特别善于总结项目痛点,运用自己的代码知识,开发过几款提效工具,比如在某某项目中,某某某业务前置流程较长,只能通过模拟用户页面操作,走完前置流程需要10分钟左右,效率比较低。为此,我通过抓包的方式,梳理了这条业务线涉及到的接口、接口之间关联关系、数据流转和相应的数据库、表。通过py或java开发出一款可以自动造数据的工具,测试小伙伴只要调用我的测试工具接口,传入相关的参数,在1分钟左右,就可以造出符合条件的测试数据,大大提高了测试人员造数据的效率。

你看夸自己的同时,还能举例说明,这样才有说服力,才能征服面试官。

最后

PS:这里分享一套软件测试的自学教程合集。对于在测试行业发展的小伙伴们来说应该会很有帮助。除了基础入门的资源,博主也收集不少进阶自动化的资源,从理论到实战,知行合一才能真正的掌握。全套内容已经打包到网盘,内容总量接近500个G。【点击文末小卡片免费领取】

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

这篇关于软件测试面试题分享,刷完这套八股文,你的offer就稳了的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/435790

相关文章

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.

Python解析器安装指南分享(Mac/Windows/Linux)

《Python解析器安装指南分享(Mac/Windows/Linux)》:本文主要介绍Python解析器安装指南(Mac/Windows/Linux),具有很好的参考价值,希望对大家有所帮助,如有... 目NMNkN录1js. 安装包下载1.1 python 下载官网2.核心安装方式3. MACOS 系统安

Java嵌套for循环优化方案分享

《Java嵌套for循环优化方案分享》介绍了Java中嵌套for循环的优化方法,包括减少循环次数、合并循环、使用更高效的数据结构、并行处理、预处理和缓存、算法优化、尽量减少对象创建以及本地变量优化,通... 目录Java 嵌套 for 循环优化方案1. 减少循环次数2. 合并循环3. 使用更高效的数据结构4

Python中常用的四种取整方式分享

《Python中常用的四种取整方式分享》在数据处理和数值计算中,取整操作是非常常见的需求,Python提供了多种取整方式,本文为大家整理了四种常用的方法,希望对大家有所帮助... 目录引言向零取整(Truncate)向下取整(Floor)向上取整(Ceil)四舍五入(Round)四种取整方式的对比综合示例应

linux进程D状态的解决思路分享

《linux进程D状态的解决思路分享》在Linux系统中,进程在内核模式下等待I/O完成时会进入不间断睡眠状态(D状态),这种状态下,进程无法通过普通方式被杀死,本文通过实验模拟了这种状态,并分析了如... 目录1. 问题描述2. 问题分析3. 实验模拟3.1 使用losetup创建一个卷作为pv的磁盘3.

MySQL8.2.0安装教程分享

《MySQL8.2.0安装教程分享》这篇文章详细介绍了如何在Windows系统上安装MySQL数据库软件,包括下载、安装、配置和设置环境变量的步骤... 目录mysql的安装图文1.python访问网址2javascript.点击3.进入Downloads向下滑动4.选择Community Server5.

CentOS系统Maven安装教程分享

《CentOS系统Maven安装教程分享》本文介绍了如何在CentOS系统中安装Maven,并提供了一个简单的实际应用案例,安装Maven需要先安装Java和设置环境变量,Maven可以自动管理项目的... 目录准备工作下载并安装Maven常见问题及解决方法实际应用案例总结Maven是一个流行的项目管理工具

10个Python自动化办公的脚本分享

《10个Python自动化办公的脚本分享》在日常办公中,我们常常会被繁琐、重复的任务占据大量时间,本文为大家分享了10个实用的Python自动化办公案例及源码,希望对大家有所帮助... 目录1. 批量处理 Excel 文件2. 自动发送邮件3. 批量重命名文件4. 数据清洗5. 生成 PPT6. 自动化测试

10个Python Excel自动化脚本分享

《10个PythonExcel自动化脚本分享》在数据处理和分析的过程中,Excel文件是我们日常工作中常见的格式,本文将分享10个实用的Excel自动化脚本,希望可以帮助大家更轻松地掌握这些技能... 目录1. Excel单元格批量填充2. 设置行高与列宽3. 根据条件删除行4. 创建新的Excel工作表5

Redis多种内存淘汰策略及配置技巧分享

《Redis多种内存淘汰策略及配置技巧分享》本文介绍了Redis内存满时的淘汰机制,包括内存淘汰机制的概念,Redis提供的8种淘汰策略(如noeviction、volatile-lru等)及其适用场... 目录前言一、什么是 Redis 的内存淘汰机制?二、Redis 内存淘汰策略1. pythonnoe