首页 > 技术文章 > 软件测试面试题---自动化(三)

brf-test 2022-01-12 22:21 原文

面试

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/souyunku/NewDevBooks/blob/master/docs/Python/Python%E4%B8%AD%E7%BA%A7%E9%9D%A2%E8%AF%95%E9%A2%98%E5%A4%A7%E5%85%A8%E5%B8%A6%E7%AD%94%E6%A1%88%EF%BC%882021%E5%B9%B4Python%E9%9D%A2%E8%AF%95%E9%A2%98%E5%8F%8A%E7%AD%94%E6%A1%88%E6%95%B4%E7%90%86%EF%BC%89.md#2tcp%E5%92%8Cudp%E7%9A%84%E5%8C%BA%E5%88%AB

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. 项目组做自动化的可行性分析,自动化率能够实施到什么样的程度,项目时间够不够长,至少的是1年以上的项目。
  2. 需求会不会频繁的变更
  3. 自动化的脚本是不是可以持续反复的使用
  4. 自动化的投入产出比是不是符合预期
  • 做调研

  1. 调研测试团队对于自动化技术的程度,他们的技术有没这个能力去做,如果有,一般会伴随着demo演示【seleium、rf(纯关键字驱动)、request】
  • 计划制定

  1. 自动化框架的搭建,逐步实施,发现框架的问题进行改善

制定计划:功能测试中提取或编写测试用例,由leader编写自动化框架,组员编写和调试自动化测试脚本,无人值守(Jenkins持续集成),脚本的维护。

  • 把自动化流程化,框架出使用文档和规范文档
  • 持续不断的完善框架
  • 把自动化测试标准推广到其他的项目

三、什么是POM模式,为什么要使用它?

  • POM模式:全称page object model,简称PO,页面对象模型。意思是把一个页面当成一个对象,页面的元素就是对象的属性,页面的操作就是对象的行为(方法),一般情况下PO分为三层架构:
  1. 基础封装层---BasePage
  2. PO页面对象层
  3. 测试用例层---TestCase
  • 为什么使用?
  1. 使测试用例更简单、更清晰、不冗余,把很多的业务操作封装到PO页面对象层,用例只需要调用即可
  2. 如果页面有变动,只需要修改PO页面对象层的属性即可,增加代码的可维护性

四、说说你对数据驱动和关键字驱动的理解?

  • 数据驱动:是从数据文件(Excel、CSV、Yaml、数据库 等)读取后输入、输出的数据,然后通过变量传入自动化测试用例中,在整个过程中:数据的读取、测试状态、测试信息全部在测试用例里面,测试数据都是数据文件中,通过修改数据达到驱动自动化用例的方式叫做数据驱动。

 

  • 关键字驱动:是从面向对象的思维出发,同样的业务逻辑会封装一个函数,这个函数名就叫关键字,不同的关键字实现不同的业务逻辑,当所有的业务逻辑都可以通过调用关键字来实现的时候,就是关键字驱动框架。(如:业务分类为ABCD 4个关键字,所有的业务都可以通过这4个来完成,就可以成为关键字驱动框架;在比如我们的POM,每个操作行为会定义一个函数,每个函数名就属于是关键字)

一般情况下企业里面都是:数据驱动 + 关键字驱动 一起来使用

五、Web自动化测试用例如何设计?如何提供Web自动化用例脚本的稳定性?

  1.  用例设计: 

   自动化用例是从功能测试用例里面提取出来的,主要提取的是冒烟用例和回归测试的用例,提取需要遵循以下原则:

(1)优先覆盖核心功能用例——核心流程用例

(2)尽量不要选复杂的用例(不是主流程的可以不选,核心流程还是需要写的)

(3)选择一些重复执行的用例

(4)一般选取正向用例(核心流程中反向用例会选取)

2. 如何提高稳定性:

(1)尽量使用相对路径定位元素

(2)定位元素需要封装显示等待(保证元素可正常加载出来)

(3)用例和用例之间尽量避免相互依赖

(4)加入用例失败重跑机制(pytest)

(5)自动化测试的环境分开其他的环境(是单独起来,不与开发等环境有参杂)

六、举例说明一下你在自动化测试过程中碰到过哪些异常?用到了哪些Python库?

  • 异常

——前端

  1. ElementNotSelectableException :元素不能选择异常

  2. ElementNotVisibleException :元素不可见异常

  3. NoSuchAttributeException :没有这样属性异常

  4. NoSuchElementException:没有该元素异常

  5. NoSuchFrameException :没有该frame异常

  6. TimeoutException : 超时异常

  7. Element not visible at this point :在当前点元素不可见

——接口

  1. IndexError            ---下标越界
  2. TypeException     ---类型异常(如:应该传入字典,传入的是字符串)
  • Python库

1、web

webdriver、webdriverWait、os、xlrd、xlwt、time、unittest、logging、sys、htmltestrunner

2、接口

json、jsonpath、yaml、requests、re(正则表达式)、pytest、allure、pymysql

七、自动化测试过程中你遇到可哪些问题,是如何解决的?

  1. 元素定位不到——【更换工具、百度搜索、请教他人】
  2. 自动化测试用例出现误报(元素频繁的变更、环境的不一样等导致误报)——【参考五:如何提高稳定性】
  3. 每一次自动化测试的结果会被覆盖(只会显示最后一次执行的结果,之前的会被覆盖)——【更改测试报告名称,使用time模块加上当前时间】
  4. 数据库校验(对数据库结构非常清晰)

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

  • web:
  1. python + selenium + unnittest/pytest + ddt/parameters + htmltestrunner/allure + Jenkins
  2. rf +selenium2library
  • 接口: python + requests + pytest + parameters + allure +jenkins + yaml

九、自动化中有哪三类等待?他们有什么特点?

  1. 线程等待:强制等待,建议少用(属于线程休眠,必须等待所定义时间完成后才会继续执行后边的脚本)

  2. 隐式等待:全局的等待,必用(必须等待所有的元素加载完成之后才不会继续等待,才会继续执行后边的代码)

  3. 显示等待:智能等待,必用(一般会和匿名函数一起使用,一般用于结合元素定位的封装);可以指定到某一个元素,等待某一个元素,只要这个元素加载完了,就会执行下一个脚本。

通常是【隐式等待】、【显示等待】结合使用,而【线程等待】使用多了,就会是代码执行的很慢。

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

  • 必做,利用 JavaScript 去修改你当前定位到的元素的 style(样式),在style里面加入:border: 3px red solid(3像素 红色 实线) 这个边框样式,其实就是利用javaScript去修改当前元素的背景颜色来到达高亮显示的效果。——编写在定位元素的封装的函数中

十一、在现有基础上给你一个新的业务线,你是怎么做接口自动化的?

  1. 熟悉新的业务线接口业务

  2. 熟悉已经搭建好的接口自动化测试框架

  3. 在当前的框架里面加入符合框架的接口自动化用例

  4. 根据实际情况可以提出一些对框架改进的建议

十二、接口自动化测试框架中接口关联你们是怎么处理的?

  •  通过一个yaml文件来独立的保存所有的中间提取的变量,这个变量在执行用例之前清空(使用pytest中预置函数模块conftest)。

  • 在测试用例的yaml文件里面通过一个关键字extract提取变量:json提取和正则表达式提取,

  • 在下一个接口通过 {{}}${} 或是 热加载 的方式取值。【热加载的作用就是可以让yaml文件直接调python方法】

 

十三、Requests中的Session会话管理的作用是什么?

  • 因为很多接口都需要使用 cookie 或 session 来记录登录状态,而很多的接口必须要有这个登录才可以请求成功,Requests中的Session会话管理的作用就是自动的记录cookie和session的登录状态。(会把一个接口产生的cookie自动的传给第二个、第三个接口等,就是它的作用)

十四、接口自动化测试中断言是如何实现的?

  • 把断言封装成一个方法,这个方法会读取yaml文件里面的validate字段,包括断言的方式和断言的数据,然后在后台实现了断言。并且体现在测试报告里面。
  • 框架封装完成之后,不需要写任何Python代码就可以实现断言

功能测试需要写任何Python脚本,只需要写yaml格式的测试用例即可实现接口自动化。

十五、接口自动化测试框架中动态参数接口,加密接口,签名接口你们是怎么处理的?

  • 热加载(httprunner)

十六、你还有什么需要了解的嘛?

  1. 我想了解下咱们公司目前正在做的一些项目?
  2. 我想了解下咱们公司开发团队和测试团队的人员架构?

 

推荐阅读