软件测试面试题---自动化(三)
面试
1、接口自动化和web自动化有多少case ?覆盖率是多少?全部执行完需要多久?
2、接口自动化测试怎么做? web自动化测试怎么做?
3、什么是POM模式?为什么要使用它?
4、说说你对数据驱动和关键字驱动的理解?
5、web自动化测试用例如何设计?如何提高web自动化用例脚本的稳定性?
6、举例说明一下你在自动化测试过程中碰到过哪些异常?用到了哪些Python库?
7、自动化测试过程中,你遇到了哪些问题,是如何解决的?
8、在上一家公司做自动化测试用的什么框架?
9、自动化中有哪三类等待?他们有什么特点?
10、在执行脚本过程,如何实现当前元素高亮显示?
11、在现有基础上给你一个新的业务线你是怎么做接口自动化的?
12、接口自动化测试框架中接口关联你们是怎么处理的?
13、Requests中的Session会话管理的作用是什么?
14、接口自动化测试中断言是如何实现的?
15、接口自动化测试框架中动态参数接口,加密接口,签名接口你们是怎么处理的?
面试题汇总:https://www.nowcoder.com/discuss/165276?type=0&order=0&pos=21&page=1
python基础面试题:https://gitee.com/tu240302975/python-interview.git
一、接口自动化和Web自动化有多少case?覆盖率是多少?全部执行完需要多久?
——先执行接口自动化,在执行web自动化,在同一个自动化框架下实施
- 接口自动化测试的case数是根据接口数而定,100个接口,接口自动化case大概在2000-3000之间。
- 接口自动化的覆盖率可以达到100%,有特殊情况下,难以做的,最少可达到95%以上;
- web自动化测试case是根据业务用例而定,1000个功能测试用例,那么web自动化测试用例,大概在200-300左右。覆盖率在30%左右。
- 所有的用例全部执行完成在:30-60分钟左右,如做分布式,时间会更短
二、接口自动化测试怎么做?web自动化测试怎么做?
——面试官是想要听具体的细节:
-
可行性分析
- 项目组做自动化的可行性分析,自动化率能够实施到什么样的程度,项目时间够不够长,至少的是1年以上的项目。
- 需求会不会频繁的变更
- 自动化的脚本是不是可以持续反复的使用
- 自动化的投入产出比是不是符合预期
-
做调研
- 调研测试团队对于自动化技术的程度,他们的技术有没这个能力去做,如果有,一般会伴随着demo演示【seleium、rf(纯关键字驱动)、request】
-
计划制定
- 自动化框架的搭建,逐步实施,发现框架的问题进行改善
制定计划:功能测试中提取或编写测试用例,由leader编写自动化框架,组员编写和调试自动化测试脚本,无人值守(Jenkins持续集成),脚本的维护。
- 把自动化流程化,框架出使用文档和规范文档
- 持续不断的完善框架
- 把自动化测试标准推广到其他的项目
三、什么是POM模式,为什么要使用它?
- POM模式:全称page object model,简称PO,页面对象模型。意思是把一个页面当成一个对象,页面的元素就是对象的属性,页面的操作就是对象的行为(方法),一般情况下PO分为三层架构:
- 基础封装层---BasePage
- PO页面对象层
- 测试用例层---TestCase
- 为什么使用?
- 使测试用例更简单、更清晰、不冗余,把很多的业务操作封装到PO页面对象层,用例只需要调用即可
- 如果页面有变动,只需要修改PO页面对象层的属性即可,增加代码的可维护性
四、说说你对数据驱动和关键字驱动的理解?
- 数据驱动:是从数据文件(Excel、CSV、Yaml、数据库 等)读取后输入、输出的数据,然后通过变量传入自动化测试用例中,在整个过程中:数据的读取、测试状态、测试信息全部在测试用例里面,测试数据都是数据文件中,通过修改数据达到驱动自动化用例的方式叫做数据驱动。
- 关键字驱动:是从面向对象的思维出发,同样的业务逻辑会封装一个函数,这个函数名就叫关键字,不同的关键字实现不同的业务逻辑,当所有的业务逻辑都可以通过调用关键字来实现的时候,就是关键字驱动框架。(如:业务分类为ABCD 4个关键字,所有的业务都可以通过这4个来完成,就可以成为关键字驱动框架;在比如我们的POM,每个操作行为会定义一个函数,每个函数名就属于是关键字)
一般情况下企业里面都是:数据驱动 + 关键字驱动 一起来使用
五、Web自动化测试用例如何设计?如何提供Web自动化用例脚本的稳定性?
- 用例设计:
自动化用例是从功能测试用例里面提取出来的,主要提取的是冒烟用例和回归测试的用例,提取需要遵循以下原则:
(1)优先覆盖核心功能用例——核心流程用例
(2)尽量不要选复杂的用例(不是主流程的可以不选,核心流程还是需要写的)
(3)选择一些重复执行的用例
(4)一般选取正向用例(核心流程中反向用例会选取)
2. 如何提高稳定性:
(1)尽量使用相对路径定位元素
(2)定位元素需要封装显示等待(保证元素可正常加载出来)
(3)用例和用例之间尽量避免相互依赖
(4)加入用例失败重跑机制(pytest)
(5)自动化测试的环境分开其他的环境(是单独起来,不与开发等环境有参杂)
六、举例说明一下你在自动化测试过程中碰到过哪些异常?用到了哪些Python库?
-
异常
——前端
-
ElementNotSelectableException :元素不能选择异常
-
ElementNotVisibleException :元素不可见异常
-
NoSuchAttributeException :没有这样属性异常
-
NoSuchElementException:没有该元素异常
-
NoSuchFrameException :没有该frame异常
-
TimeoutException : 超时异常
-
Element not visible at this point :在当前点元素不可见
——接口
- IndexError ---下标越界
- TypeException ---类型异常(如:应该传入字典,传入的是字符串)
-
Python库
1、web
webdriver、webdriverWait、os、xlrd、xlwt、time、unittest、logging、sys、htmltestrunner
2、接口
json、jsonpath、yaml、requests、re(正则表达式)、pytest、allure、pymysql
七、自动化测试过程中你遇到可哪些问题,是如何解决的?
- 元素定位不到——【更换工具、百度搜索、请教他人】
- 自动化测试用例出现误报(元素频繁的变更、环境的不一样等导致误报)——【参考五:如何提高稳定性】
- 每一次自动化测试的结果会被覆盖(只会显示最后一次执行的结果,之前的会被覆盖)——【更改测试报告名称,使用time模块加上当前时间】
- 数据库校验(对数据库结构非常清晰)
八、在上一家公司做的自动化用的什么框架?
- web:
- python + selenium + unnittest/pytest + ddt/parameters + htmltestrunner/allure + Jenkins
- rf +selenium2library
- 接口: python + requests + pytest + parameters + allure +jenkins + yaml
九、自动化中有哪三类等待?他们有什么特点?
-
线程等待:强制等待,建议少用(属于线程休眠,必须等待所定义时间完成后才会继续执行后边的脚本)
-
隐式等待:全局的等待,必用(必须等待所有的元素加载完成之后才不会继续等待,才会继续执行后边的代码)
- 显示等待:智能等待,必用(一般会和匿名函数一起使用,一般用于结合元素定位的封装);可以指定到某一个元素,等待某一个元素,只要这个元素加载完了,就会执行下一个脚本。
通常是【隐式等待】、【显示等待】结合使用,而【线程等待】使用多了,就会是代码执行的很慢。
十、在执行脚本过程,如何实现当前元素高亮显示?
- 必做,利用 JavaScript 去修改你当前定位到的元素的 style(样式),在style里面加入:border: 3px red solid(3像素 红色 实线) 这个边框样式,其实就是利用javaScript去修改当前元素的背景颜色来到达高亮显示的效果。——编写在定位元素的封装的函数中
十一、在现有基础上给你一个新的业务线,你是怎么做接口自动化的?
-
熟悉新的业务线接口业务
-
熟悉已经搭建好的接口自动化测试框架
-
在当前的框架里面加入符合框架的接口自动化用例
-
根据实际情况可以提出一些对框架改进的建议
十二、接口自动化测试框架中接口关联你们是怎么处理的?
-
通过一个yaml文件来独立的保存所有的中间提取的变量,这个变量在执行用例之前清空(使用pytest中预置函数模块conftest)。
-
在测试用例的yaml文件里面通过一个关键字extract提取变量:json提取和正则表达式提取,
-
在下一个接口通过 {{}} 或 ${} 或是 热加载 的方式取值。【热加载的作用就是可以让yaml文件直接调python方法】
十三、Requests中的Session会话管理的作用是什么?
- 因为很多接口都需要使用 cookie 或 session 来记录登录状态,而很多的接口必须要有这个登录才可以请求成功,Requests中的Session会话管理的作用就是自动的记录cookie和session的登录状态。(会把一个接口产生的cookie自动的传给第二个、第三个接口等,就是它的作用)
十四、接口自动化测试中断言是如何实现的?
- 把断言封装成一个方法,这个方法会读取yaml文件里面的validate字段,包括断言的方式和断言的数据,然后在后台实现了断言。并且体现在测试报告里面。
- 框架封装完成之后,不需要写任何Python代码就可以实现断言
功能测试需要写任何Python脚本,只需要写yaml格式的测试用例即可实现接口自动化。
十五、接口自动化测试框架中动态参数接口,加密接口,签名接口你们是怎么处理的?
- 热加载(httprunner)
十六、你还有什么需要了解的嘛?
- 我想了解下咱们公司目前正在做的一些项目?
- 我想了解下咱们公司开发团队和测试团队的人员架构?
本文来自博客园,作者:他还在坚持嘛,转载请注明原文链接:他还在坚持嘛 https://www.cnblogs.com/brf-test/p/15795632.html