自动化测试和性能测试面试题精选

自动化测试相关

包含 Selenium、Appium 和接口测试。

1. 自动化代码中,用到了哪些设计模式?
  • 单例模式
  • 工厂模式
  • PO模式
  • 数据驱动模式
2. 什么是断言?
  • 检查一个条件,如果它为真,就不做任何事,用例通过。如果它为假,则会抛出 AssertError 并且包含错误信息。
3. UI 自动化测试中,如何做集群?
  • Selenium Grid,分布式执行用例
  • Appium 使用 STF 管理多设备
  • Docker+K8S 管理集群
4. 怎么对含有验证码的功能进行自动化测试?
  • 万能验证码
  • 测试环境屏蔽验证
  • 其他操作不推荐
5. 如何优化和提高 Selenium 脚本的执行速度?
  • 尽量使用 by_css_selector() 方法
  • by_css_selector() 方法的执行速度比 by_id() 方法的更快,因为源码中 by_id() 方法会被自动转成 by_css_selector() 方法处理;
  • 使用等待时,尽量使用显示等待,少用 sleep(),尽量不用隐式等待;
  • 尽量减少不必要的操作:可以直接访问页面的,不要通过点击操作访问;
  • 并发执行测试用例:同时执行多条测试用例,降低用例间的耦合;
  • 有些页面加载时间长,可以中断加载;
6. 接口测试能发现哪些问题?
  • 可以发现很多在页面上操作发现不了的 bug;
  • 检查系统的异常处理能力;
  • 检查系统的安全性、稳定性;
  • 前端随便变,接口测好了,后端不用变;
  • 可以测试并发情况,一个账号,同时(大于 2 个请求)对最后一个商品下单,或不同账号,对最后一个商品下单;
  • 可以修改请求参数,突破前端页面输入限制(如金额);
 7. Selenium 中隐藏元素如何定位?
  • 如果单纯的定位的话,隐藏元素和普通不隐藏元素定位没啥区别,用正常定位方法就行了(这个很多面试官也搞不清楚);
  • 元素的属性隐藏和显示,主要是 type=“hidden” 和 style=“display: none;” 属性来控制的,接下来在元素属性里面让它隐藏,隐藏元素可以正常定位到,只是不能操作(定位元素和操作元素是两码事,很多初学者傻傻分不清楚),操作元素是 click,clear,send_keys 这些方法;
  • JS 操作隐藏元素;
8. 如何判断一个页面上元素是否存在?
  • 方法一:用 try…except…
  • 方法二:用 elements 定义一组元素方法,判断元素是否存在,存在返回 True,不存返回 False
  • 方法三:结合 WebDriverWait 和 expected_conditions 判断(推荐)
9. 如何提高脚本的稳定性?
  • 不要右键复制 xpath(十万八千里那种路径,肯定不稳定),自己写相对路径,多用 id 为节点查找;
  • 定位没问题,第二个影响因素那就是等待了,sleep 等待尽量少用(影响执行时间);
  • 定位元素方法重新封装,结合 WebDriverWait 和 expected_conditions 判断元素方法,自己封装一套定位元素方法;
10. 如何定位动态元素?
  • 动态元素有 2 种情况,一个是属性动态,比如 id 是动态的,定位时候,那就不要用 id 定位就是了;
  • 还有一种情况动态的,那就是这个元素一会在页面上方,一会在下方,飘忽不定的动态元素,定位方法也是一样,按 f12,根据元素属性定位(元素的 tag、name的步伐属性是不会变的,动的只是 class 属性和 styles 属性);
11. 如何通过子元素定位父元素
  • 使用element.parent方法
12. 平常遇到过哪些问题? ?如何解决的
  • 可以把平常遇到的元素定位的一些坑说下,然后说下为什么没定位到,比如动态 id、有 iframe、没加等待等因素;
13. 一个元素明明定位到了,点击无效(也没报错),如果解决?
  • 使用 JS 点击,Selenium 有时候点击元素是会失效;
14. 测试的数据你放在哪?
  • 对于账号密码,这种管全局的参数,可以用命令行参数,单独抽出来,写的配置文件里(如 ini);
  • 对于一些一次性消耗的数据,比如注册,每次注册不一样的数,可以用随机函数生成;
  • 对于一个接口有多组测试的参数,可以参数化,数据放 YAML,Text,JSON,Excel 都可以;
  • 对于可以反复使用的数据,比如订单的各种状态需要造数据的情况,可以放到数据库,每次数据初始化,用完后再清理;
  • 对于邮箱配置的一些参数,可以用 ini 配置文件;
  • 对于全部是独立的接口项目,可以用数据驱动方式,用 excel/csv 管理测试的接口数据;
  • 对于少量的静态数据,比如一个接口的测试数据,也就 2-3 组,可以写到 py脚本的开头,十年八年都不会变更的;
     
15. 什么是数据驱动,如何参数化?
  • 参数化的思想是代码用例写好了后,不需要改代码,只需维护测试数据就可以了,并且根据不同的测试数据生成多个用例;
16. 其他接口都需要登录接口的信息,怎么去让这个登录的接口只在其他接口调用一次?
  • 使用单例模式
  • 使用自定义缓存机制
  • 使用测试框架中的 setup 机制
  • pytest 中 fixture 机制
17. 接口产生的垃圾数据如何清理?
  • 造数据和数据清理,需用 python 连数据库了,做增删改查的操作测试用例前置操作,setUp 做数据准备后置操作,tearDown 做数据清理
18. 怎么用接口案例去覆盖业务逻辑?
  • 考虑不同的业务场景,一个接口走过的流程是什么样的,流程的逻辑是什么样的,什么样的参数会有什么样的结果,多场景覆盖;

性能篇

1. 性能测试指标包括哪些
  • 最大并发用户数,HPS(点击率)、事务响应时间、每秒事务数、每秒点击量、吞吐量、CPU 使用率、物理内存使用、网络流量使用等。
  • 前端需主要关注的点是:
    • 响应时间:用户从客户端发出请求,并得到响应,以及展示出来的整个过程的时间。
    • 加载速度:通俗的理解为页面内容显示的快慢。 流量:所消耗的网络流量。
  • 后端需主要关注的是:
  • 响应时间:接口从请求到响应、返回的时间。
  • 并发用户数:同一时间点请求服务器的用户数,支持的最大并发数。
  • 内存占用:也就是内存开销。
  • 吞吐量(TPS):Transaction Per Second, 每秒事务数。在没有遇到性能瓶颈时:TPS=并发用户数*事务数/响应时间。
  • 错误率:失败的事务数/事务总数。
  • 资源使用率:CPU占用率、内存使用率、磁盘I/O、网络I/O。
  • 从性能测试分析度量的度角来看,主要可以从如下几个大的维度来收集考察性能指标:
  • 系统性能指标、资源性能指标、稳定性指标

 

2. 如果一个需求没有明确的性能指标,要如何开始进行性能测试?
  • 先输出业务数据,如 pv、pu、时间段等,计算出大概的值,然后不断加压测到峰值

 

3. 介绍 JMeter 聚合报告包括哪些内容?
  • 请求名、线程数、响应时间(50 95 99 最小 最大)错误率、吞吐量

 

4. 如果有一个页面特别卡顿,设想一下可能的原因?
  • 后台:接口返回数据慢,查询性能等各种问题
  • 前端:使用 Chrome 工具调试,判断 JS 执行久或是其他问题
  • 网络问题

 

5. 说一说项目中的实际测试内容
  • 根据自己项目中的经验实话实说,有没有经验很容易露馅。
6. 介绍一下 JMeter 进行性能测试的过程
  • 结合自己的项目经验聊。大家也可以自行搜索。
 7. 介绍一下 JMeter 和 LoadRunner 的区别
  • 详细的不展开了,最重要的是相对来说 LoadRunner 的笨重、昂贵、闭源,理念和生态都落后,而 JMeter 是开源、可定制化开发,功能强大易用,并且在互联网大厂都已经有非常成熟的落地方案(主流的互联网公司基本都在使用 JMeter+ELK+Grafana+Influxdb 这套架构),可以说是进 BAT 大厂必备技能。还不会 JMeter 的同学建议抓紧补起来。

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

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

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

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

相关文章

uniapp写一个计算器用于记账(微信小程序,APP)

提要:自己用uniapp写了一个记账小程序(目前是小程序),写到计算器部分,在网上找了别人写的计算器,大多数逻辑都是最简单的,都不能满足一个记账计算器的基本逻辑。与其在网上找来找去,…

K8S运维 解决openjdk:8-jdk-alpine镜像时区和字体问题

目录 一、问题 二、解决 三、完整代码 一、问题 由于项目的Dockerfile中使用openjdk:8-jdk-alpine作为基础镜像来部署服务,此镜像存在一定问题,例如时差8小时问题,或是由于字体问题导致导出excel文件,图片处理内容为空等。 二…

【扩散模型】不同组件搭积木,获得新模型

学习地址: https://github.com/huggingface/diffusion-models-class/tree/main/unit3 VAE The Tokenizer and Text Encoder UNet In-Painting 例如:基于contrlnet做的校徽转图片

视频会议系统方案报价

视频会议系统 报价方案是咨询视频会议系统价格用户所关注的,但是报价是一个比较细致的工作,需要从多维度进行对比。 1. 视频会议终端设备费用:根据所需设备的数量和所选设备价格确定。视频会议终端类型各异,摄像头、麦克风、显示设…

QT5.15.2搭建Android编译环境及使用模拟器调试(全)

一、安装QT5.15.2 地址:下载 我电脑的windows的,所以选windows 由于官方安装过程非常非常慢,一定要跟着步骤来安装,不然慢到怀疑人生 1)打开"命令提示符"(开始 -> Windows 系统 -> 命令…

清华大学利用可解释机器学习,优化光阳极催化剂,助力光解水制氢

水的太阳能光电化学 (PEC) 分解是将太阳能高效转换为氢能的方法,是一种很有前景的可再生能源生产方式。然而,受电极性质及电极缺陷的影响,PEC 反应的效率较低,需要合适的助催化剂辅助。而电解池、光电极和助催化剂组成的 PEC 系统…

windows server 2016调优

1. 增加TCP连接的最大数量: 在您当前的注册表路径(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters)中的右侧窗格,右击空白处,选择“新建” -> “DWORD (32位) 值”。为新的值命名为TcpNu…

【深度学习】【pytorch】对卷积层置零卷积核进行真实剪枝

最近需要对深度学习模型进行部署,因此需要对模型进行压缩,博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 前言卷积层剪枝总结 前言 深度学习剪枝(Pruning)是一种用于减少神经网络模型大小、减少计算量和提高推理效率的技术,通过去除神经…

thinkphp的路径参数(RESTFul风格),把参数写在路径里

thinkphp官方文档 https://www.kancloud.cn/manual/thinkphp5_1/353969 有一个Blog控制器,里面的read方法是固定的,不能该 route.php里添加如下代码,访问 blog对应的就是 android/blog Route::resource(blog,android/blog);然后访问路径

设计模式——模板方法模式(Template Pattern)+ Spring相关源码

文章目录 一、模板方法模式定义二、例子2.1 菜鸟教程例子2.1.1 抽象类Game 定义了play方法的执行步骤。2.1.2 继承Game类并实现initialize、startPlay、endPlay方法。2.1.3 使用 2.2 JDK源码 —— Map 2.3 Spring源码 —— JdbcTemplate2.4 Spring源码 —— RestTemplate三、其…

NLP之Bert实现文本分类

文章目录 1. 代码展示2. 整体流程介绍3. 代码解读4. 报错解决4.1 解决思路4.2 解决方法 5. Bert介绍5.1 什么是BertBERT简介:BERT的核心思想:BERT的预训练策略:BERT的应用:为什么BERT如此受欢迎?总结: 1. 代…

windows使用YOLOv8训练自己的模型(0基础保姆级教学)

目录 前言 一、使用labelimg制作数据集 1.1、下载labelimg 1.2、安装库并启动labelimg 1.4、制作YOLO数据集 二、使用YOLOv8训练模型 2.1、下载库——ultralytics (记得换源) 2.2、数据模板下载 2.3、开始训练 1、启动train.py,进行…

QT+SQLite数据库配置和使用

一、简介 1.1 SQLite(sql)是一款开源轻量级的数据库软件,不需要server,可以集成在其他软件中,非常适合嵌入式系统。Qt5以上版本可以直接使用SQLite(Qt自带驱动)。 二、下载和配置 2.1 SQLite下载…

GitLab(2)——Docker方式安装Gitlab

目录 一、前言 二、安装Gitlab 1. 搜索gitlab-ce镜像 2. 下载镜像 3. 查看镜像 4. 提前创建挂载数据卷 5. 运行镜像 三、配置Gitlab文件 1. 配置容器中的/etc/gitlab/gitlab.rb文件 2. 重启容器 3. 登录Gitalb ① 查看初始root用户的密码 ② 访问gitlab地址&#…

微信小程序-form表单-获取用户输入文本框的值

微信小程序-form表单-获取用户输入文本框的值 data: {userName: ,userPwd:""},//获取用户输入的用户名 userNameInput:function(e) {this.setData({userName: e.detail.value}) }, passWdInput:function(e) {this.setData({userPwd: e.detail.value}) }, //获取用户输…

Pycharm出现的一些问题和解决办法

1.每次启动打开多个项目,速度很慢。改为每次启动询问打开哪个单一项目 Setting -> Appearance & Behavior -> System Settings -> Project -> 关闭Reopen projects on startop 2.一直显示《正在关闭项目closing project》,关不上 pycha…

Java后端开发——JDBC组件

JDBC(Java Database Connectivity)是Java SE平台的一种标准API,它提供了一种标准的方法来访问关系型数据库,使得Java程序能够与各种不同的数据库进行交互,这篇文章我们来进行实验体验一下。 自定义JDBC连接工具类 1.编…

【IDEA使用maven package时,出现依赖不存在以及无法从仓库获取本地依赖的问题】

Install Parent project C:\Users\lxh\.jdks\corretto-1.8.0_362\bin\java.exe -Dmaven.multiModuleProjectDirectoryD:\学习\projectFile\study\study_example_service "-Dmaven.homeD:\Program Files\JetBrains\IntelliJ IDEA2021\plugins\maven\lib\maven3" "…

devops

git/jenkins 版本控制系统 gitlab 代码开发完成> 运维部署上线> 监控性能> cicd流水线部署, git和版本控制系统 git rootserver02:~/1103# git log --oneline 07f230c (HEAD -> main) first commit rootserver02:~/1103# git log -p 07f230c co…

LLC讲解

【精选】开关电源-LLC基本原理_llc 开关电源-CSDN博客