面经 | 自动化测试问题

一、概念问题

(一)什么是自动化测试

自动测试就是把以人为驱动的测试转化为机器执行的一种过程,它是一种以程序测试程序的过程。

(二)请描述一下自动化测试流程?

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

(三)编写自动化测试脚本的大概流程

  1. 线上缺陷分析得出前后端缺陷比率,哪些缺陷可以通过回归测试发现,哪些可以通过UI测试发现,哪些测试可以通过接口测试发现,用数据支持决策。
  2. 确定自动化测试目标,例如冒烟测试解决hotfx回归测试,场景自动化测试解决迭代周期的自动化回归测试。
  3. 选择自动化测试框架
  4. 框架功能设计以首先实现必要的功能为主,无需纠结于辅助功能。框架详细设计用主流设计思想,基于页面对象模型POM,接口和UI自动化脚本混合提升测试执行效率。
  5. 分期实现自动化测试用例,从已有回归测试用例库选取自动化测试用例集合,有计划的实现和发布自动化测试用例脚本。

(四)自动化测试用例如何设计?

功能用例和自动化用例想要共享同一套是有点困难的。
自动化用例需要标准化的输入和输出,而功能用例因为人员素质或者团队管理方面的原因很难做到这一点。并且,方便给机器识别的自动化用例往往很难做到像功能用例那样方便让人来阅读。 只能尽量取双方的一个平衡点。也可以由你们的自动化团队开发一个功能->自动化的转化工具,这样相对来说对于功能组来说会容易接受一点。毕竟如果你强行要求功能组来编写自动化用例的话,对团队管理水平以及人员的技术素质是有一定的要求的。
用例存在哪里都可以,是你们的实际需求而定。常见的还是excel或yaml比较多。sql和json的可读性差一些。
测试脚本也需要遵循高内聚,低耦合的原则,颗粒度尽量细,用例之间尽量极少依赖,可以独立运行也可以随意组合运行。

(五)自动化测试用例如何编写?

用例是自动化测试工程师自己设计的,一般刚开始已基本业务流程为主(登录--完成一个业务--退出)
从系统测试用例中进行筛选或由业务工程师提供

(六)什么时候需要用到自动化测试和什么时候用手工测试?

自动化测试适合增量式开发,持续集成项目,主要用来保障项目那些没有改动过的功能。
手动测试适合定制型项目,项目周期短,测试周期短,业务规则复杂的对象,有很多的逻辑关系、运算关系、工具不好测试,需要人工验证。

(七)如何把自动化测试在公司中实施并推广起来的?

  1. 项目组调研选择自动化工具并开会演示demo案例,我们主要是演示selenium和robotframework两种。
  2. 搭建自动化测试框架,在项目中逐步开展自动化。
  3. 把该项目的自动化流程、框架固化成文档
  4. 推广到公司的其它项目组应用

(八)自如何把自动化测试在公司中实施并推广起来的?动化测试发现BUG多吗?

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

(九)在上一家公司做自动化测试用的什么框架?

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

  1. python+selenium+unittest+htmltestrunner
  2. python+selenium+pytest+allure
  3. robotframework+Selenium2Library

(十)自动化测试工具了解哪些?

Airtest、Selenium、robotframework、Locust、Macaca、cypress

(十一)上一个项目中自动化测试的执行策略?

上一个项目中是定时执行的,设置的执行时间是晚上12点,执行完毕后会自动发送邮件通知

(十二)你觉得自动化测试的价值在哪里?你们公司为什么要做自动化测试?

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

(十三)自动化测试有误报过bug吗?产生误报怎么办?

有误报过,有时候自动化测试报告中显示发现了bug,实际去通过手工测试去确认又不存在该bug。
误报原因一般是:
元素定位不稳定,需要尽量提高脚本的稳定性;
开发更新了页面但是测试没有及时更新维护!

(十四)自动化测试过程中,你遇到了哪些问题,是如何解决的?

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

(十五)自动化测试框架设计中的分层如何实现,有哪几类分层?

测试自动化代码会被分为三层:

  1. 测试用例层,表达应用程序的测试逻辑。
  2. 领域层,用业务领域术语来给系统建模,封装HTTP请求、浏览器、结果解析逻辑,给测试用例层提供一个接口
  3. 待测系统层,第二层构建在这一层之上。

(十六)什么是PO模式,为什么要使用它?

PO是Page Object 模式的简称,它是一种设计思想,意思是,把一个页面,当做一个对象,页面的元素和元素之间操作方法就是页面对象的属性和行为,PO模式一般使用三层架构,分别为:

  1. 基础封装层BasePage
  2. PO页面对象层
  3. TestCase测试用例层

(十七)如何封装自动化测试框架?

二、使用问题

(一)自动化业务:视频业务播放流程,UI自动化查找控件的一些方法, 问了push消息机制(极光推送)

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

(三)自动化测试执行前后,分别需要进行何种操作,以确保自动化不会影响系统运行?-数据分流,

(四)如何处理下拉菜单?

在Selenium中有一个叫Select的类,这个类支持对下拉菜单进行操作。使用方法如下:
1、定位元素
2、把定位的元素转化成Select对象。
sel = Select(定位的元素对象)
3、通过下标或者值或者文本选中下拉框。
sel.select_by_index(index);
sel.select_by_value(value);
sel.select_by_visible_text(text)

(五)如何基于Mock实现数据结果的返回,实现外部接口的测试?

https://www.jianshu.com/p/01fa741e1712 postman/jmeter

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

  1. 页面加载元素过慢,加等待时间
  2. 页面有frame框架页,需要先跳转入frame框架再定位
  3. 可能该元素是动态元素,定位方式要优化,可以使用部分元素定位或通过父节点或兄弟节点定位。
  4. 可能识别了元素,但是不能操作,比如元素不可用,不可写等。需要使用js先把前置的操作完成,

(七)如何处理多窗口?

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

  1. 我们在点击链接前使用driver.current_window_handle获得当前窗口句柄。
  2. 再点击链接。点击后通过driver.window_handles获得所有窗口的句柄,
  3. 然后再循环找到新窗口的句柄,然后再通过driver.switch_to.window()方法跳转到新的窗口。
  4. 怎么验证元素是enable/disabled/checked状态?
  5. 定位元素后:分别通过isEnabled(),isSelected(),isDisplayed()三个方法进行判断。

(八)元素定位方法你熟悉的有哪些?

id name classname link_text css xpath

(九)遇到frame框架页面怎么处理?

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

(十)遇到alert弹出窗如何处理?

  1. 使用driver.switch_to.alert方法先跳转到alert弹出窗口
  2. 然后再通过accept点击确定按钮,通过dismiss点击取消难,通过text()获得弹出窗口的文本。

(十一)自动化测试执行中,如何对多个用例进行并发运行?

https://www.jianshu.com/p/ef4beb24c735 TESTNG 提供的并发方法

(十三)在较大自动化用例运行压力下,如何实现自动化测试框架的分布式集群?

selenium grid/jmeter分布式

(十四)在selenium自动化测试中,你一般完成什么类型的测试?自动化覆盖率?

主要是冒烟测试和回归测试。回归测试主要写一些功能稳定的场景,通过自动化手段去实现,节约测试时间。因为自动化测试用例也是在不断的更新和迭代,没有刻意去统计,大概在30%-40%左右!

(十五)Selenium原理?Selenium原理中的JS注入了解吗?selenium找到元素的方法,selenium的优缺

(十六)Selenium的架构原理是什么(应该是server–client的经典设计模式)

(十七)Selenium访问控件的方法有几种

(十八)Selenium定位不到页面与控件的时候,这些异常怎么处理

(十九)Selenlum有哪几种元素定位方式?

(二十)Selenlum隐式等待和显示等待有什么不同?

posted @ 2020-12-21 16:55  KnowKnow~  阅读(313)  评论(0)    收藏  举报