深信服面试问题:

  1. 你的自动化测试是怎么实现的?(必问)

根据自己的情况说吧,有些会设计的框架细分目录后,分别实现了什么功能?

接口自动化 python+unittest+ddt+HtmlRunnerNew

web自动化python+selenium+pytest+Allure

 

  1. 你对 selenium 二次封装的关键字,是怎么封装的?挑了一个等待元素的关键字问设计了哪些参数?

 

  1. 简述一下三大等待吧?

①显性等待:WebDriverWait,针对元素设置的等待时间,并只针对该元素有效,用来等待某个条件满足,默认会每隔 0.5 秒去找元素,检查是否满足条件,超时报异常。(面试官问的很细这个间隔时间是通过什么参数去控制的,当时记不住没答出来,回来看了,才知道是poll_frequency=POLL_FREQUENCY)

②隐形等待:implicity_wait,通过 driver 对象给所有元素设置的全局等待,在设置的时间范围内一直不断找元素,超时报异常。

③强制等待:sleep,不管什么情况都需要等

 

 

  1. Web 自动化编写了多少用例?执行一次需要多长时间?遇到过什么问题?针对这些问题你是如何解                                    答:编写了 xxx 多条(因为我的项目时间比较长,有的面试官会说这么多,我说系统的功能较多, 而且用例的颗粒度涉及的比较细较细),用例和时间根据自己实际写吧,切记 web  自动化需要等待时间,时间不要说的太短?遇到问题,一般是 1.元素难以定位,比如一些动态的元素,改用 CSS 定位;2.脚本不是很稳定,有些用例经常失败,但实际并不是 BUG,增加等待、改用相对定位、加入失败重运行、减少用例的依赖保证独立性、创建环境和清理环境走接 口.....

 

  1. 你做自动化的时候有没有遇到什么比较难解决的问题?(问题和上面的差不多)

①元素难以定位,比如一些动态的元素,改用 CSS 定位;②脚本不是很稳定,有些用例经常失败,但实际并不是 BUG,增加等待、改用相对定位、加入失败重运行、减少用例的依赖保证独立性、创建环境和清理环境走接口.....

 

  1. 如果你做接口测试,接口返回成功,但是实际数据库却没有相对应的数据?你觉得有可能是什么问题?如何定位?

① 如果此接口未对数据库数据进行操作,那个就可以忽略

② 如果此接口是修改数据数据,接口返回成功,而数据库中数据却未变更,那么说明此为 bug

定位:与接口文档进行对照,如果数据库校验的内容与接口文档不一致,这可以定位问题

 

  1. 性能测试?(性能测试必问,每一个都问!不会的话可以看一些文章,说有了解过能聊一下就行了)简述一下你做过的性能测试项目如何开展的?重点关注哪些性能指标?会性能调优吗?

性能测试包含:负载测试、压力测试、并发测试.....

看我写的关于性能的篇章

定义:在被测系统上不断增加压力,直到性能指标(如响应时间)超过预期指标或者某种资


开源工具 jmeter:开源免费,自由,操作较简单,能辅助完成日常的一些测试工作

 

  1. 如何需要模拟死锁的情况?你是如何模拟的?(这个没聊到性能测试一般不会问)

我的回答仅供参考:服务器在真正的压力下,慢慢增加并发用户数、和请求次,CPU 和内存资源的利用率会提高,达到峰值后,超过并发极限值后,CPU 或者内存资源会出现死锁的情况。

 

 

  1. 你除了使用过 unittest 和 pytest 之外有了解过其他的自动化测试框架吗?又运用到自己的项目当中吗?和你现在的框架对比?有什么优点?

Httprunnner 或者 RB,后面的问题大家根据自己实际情况去想吧


 


  1. 你会设计测试策略和测试方案?你是如何设计的?

测试策略:数据和数据库完整性测试、功能测试、用户界面测试、性能测试、安全性和访问控制测试、配置测试、安装测试;其实测试策略和测试方案是差不多的意思

 

  1. 测试计划你是如何设计的?主要包含哪些内容?

测试计划主要根据项目版本计划去设计;主要包含:测试的范围、质量目标(用例覆盖率、和缺陷发现密度)、测试提交的文档、测试进度(测试开始时间、实际开始时间、结束时间)、测试的准则(启动条件、结束条件)、测试阶段资源(人力资源、测试环境准备、测试工具)、系统风险、优先级(测试资源所需不足、测试业务及技能不足)、项目的控制、详细测试方法、测试规程设计

 

 

  1. 安全性测试做过吗?

这个绝大部分面试官都会问,目的是看你的测试的广度,不会不要紧,了解一下漏洞扫描和

SQL 注入、xss、css、php 代码注入 cookie 篡改,能聊天即可,实在不会就说不会吧


 

  1. Webdriver 的原理(被问了两次)
    由于客户端脚本(java, python, ruby) 不能直接与浏览器通信, 这时候可以把Webdriver 当做一个翻译器,它可以把客户端代码翻译成浏览器可以识别的代码(比如js).客户端(也就是测试脚本)创建 1 session,在该 session 中通过 http 请求向Webdriver 发送请求,Webdriver 翻译成浏览器懂得脚本传给浏览器,浏览器把执行的结果返回给 Webdriver,Webdriver 把返回的结果做了一些封装(一般都是 json 格式),然后返回给客户端,根据返回值就能判断对浏览器的操作是不是执行成功。

 

  1. 接口发生异常你如何去分析定位问题

发生异常了,查看是数据返回有问题,还是数据库数据未变更,多种情况去分析

 

  1. 你是专职做自动化吗?自动化和功能测试时并行进行吗?占比多少?

不是,功能和自动化都做,串行,先功能测试后自动化测试,占比 80%功能,20%自动化(二八定律),自动化测试比例高于功能测试,面试官会很怀疑。

 

  1. 黑盒用例设计技术,及在你工作中的应用场景?

等价类、边界值、错误推测法、场景法、因果图、判定表、正交分解

我举例我工作中设计缴费模块为例,用比较多是等价类、边界值设计技术

 

  1. 你们公司用什么前端框架,后端技术?前端人员、后端开发、和测试的比例是多少?


 


前端用的 VUE,后端用的 java;人员比例 2:3:1

 

  1. 在数据库中插入一条重复的数据 100 次(这个问题没回答上)

答:使用jmeter轮询100次数据插入请求

  1. 现在有个部门表,需要你查询出入职最早,排名前 10 的员工,你怎么查?

Select  员工名 from  部门表 order by  时间 limit 0,10 (MySQL 数据库用这种)

select 员 工名 from 部门表 order by  时间 and rownum <=10 (oracle 用这种)

 

  1. Pytest 的参数化如何实现?
  2. 接口自动化的参数你是如何实现的?说说你的想法

         Re 模块+sub 方法去替换

 

  1. 如果测并发测试的时候,并发 100 次,前面 99 个通过了,其中有一个失败了,状态码返回 500?你觉得会是什么问题?你怎么分析定位问题?

大佬的回答:1.可能是服务器的问题,并发到第 100 个,把服务器弄崩了,服务器内存,

性能需要提升;并发 90 个试下

 

  1. 你说说你在功能测试这块比较擅长什么?举个例子这个各取所长吧
  2. 如何使你的接口自动化测试用例直接跳过前面几条,直接执行第 7 条?

1、可以在 Excel 创建一列,指定是否跳过,然后在用例时,过滤掉这些用例

 

2.使用条件判断,通过 case_id==7 来决定是否执行

3.使用 pytest 中的 skip 也可以跳用例,具体看官网​https://docs.pytest.org/en/latest/skipping.html#skipping-test-functio​​ ns

 

  1. 如何使你的接口自动化脚本,对于同一个请求让同一个用户请求多次?

也可以在 Excel 中设置相关执行次数的字段,在 ddt 数据驱动时,使用代码来控制执行次数。或者使用 pytest 来代替 unittest


 

 

  1. 如果你遇到了这种情况,原迭代版本计划的测试时间是 2 周,测试时间是 7 天,后来开发开发了 12 天,留给你测试的时间是 2 天,这种情况你会怎么办? 我的回答仅供参考:①对整个项目流程和测试流程提出改进,需要对测试的项目进行风险评估和风险应对,如果此方法不行;②可以将整个项目的功能划分为模块,开发开发完后,单元测试通过后,告知我们测试重点,和最可能出现问题的功能,我们针对这个功能重点测试,单个模块测试完成后,开发完成了整个版本的开发,提测时就可以重点测涉及业务流的模块,减少测试的时间;③如果还不行,那只能提前和领导反馈沟通,增加测试人员的投入,去弥补时间的不足;

 

大佬的回答:1.测试进度变慢,无法保证在预订时间内上线。

  1. 如果需要在预订的时间上线,必须需要测试任务或者测试版本的达到某某要求或者某某标准。
  2. 如果无法在预订时间内上,给相关人员评估无法上线的原因和风险,输出测试结果。

 

  1. selenium 中 hidden 或者是 display = none 的元素是否可以定位到? 不能

 

  1. 如何提高 selenium 脚本的执行速度?

我和 web 自动化测试关注的并不是脚本的执行速度,而是脚本的稳定性,要以稳定性为主的情况下提升执行速度;首先分析脚本的执行速度受到多方面的影响,比如脚本等待时间、页面加载的速度、网速、设备性能,还有自动化测试用例的繁琐程度,这对这些情况:

①减少操作步骤,减少脚本用例不必要的步骤

②设置等待时间的时候,可以 sleep 固定的时间,也可以检测某个元素出现后中断等待也可以提高速度

③实现多线程。在编写测试用例的时候,一定要实现松耦合,然后在服务器允许的情况下, 尽量设置多线程运行,提高执行速度。注意说了这个很容易被面试官反问,怎么实现多线程的?

 

  1. webdriver 的协议是什么?

JsonWire Protocol

 

  1. 自动化测试的时候是不是需要连接数据库做数据校验?
    当然不需要啦,接口自动化的时候已经做了

 

  1. 点击链接以后,selenium 是否会自动等待该页面加载完毕?
    会的

 

  1. 自动化测试产出比你觉得怎么样?
    自己思考吧
  2. 你封装了 requests 请求库,发送请求后如何获取相应报文?
    封装后返回的是一个response 对象。res.json()转换为字典