1、你的自动化测试是怎么实现的?(必问)根据自己的情况说吧,有些会设计的框架细分目录后,分别实现了什么功能?
接口自动化 python+unittest+ddt+HtmlRunnerNew
web自动化python+selenium+pytest+Allure
2、你对 selenium 二次封装的关键字,是怎么封装的?挑了一个等待元素的关键字问设计了哪些参数?
3、简述一下三大等待吧?
①显性等待:WebDriverWait,针对元素设置的等待时间,并只针对该元素有效,用来等待某个条件满足,默认会每隔 0.5 秒去找元素,检查是否满足条件,超时报异常。(面试官问的很细这个间隔时间是通过什么参数去控制的,当时记不住没答出来,回来看了,才知道是poll_frequency=POLL_FREQUENCY)
②隐形等待:implicity_wait,通过 driver 对象给所有元素设置的全局等待,在设置的时间范围内一直不断找元素,超时报异常。
③强制等待:sleep,不管什么情况都需要等
4、Web 自动化编写了多少用例?执行一次需要多长时间?遇到过什么问题?针对这些问题你是如何解决?
编写了 xxx 多条(因为我的项目时间比较长,有的面试官会说这么多,我说系统的功能较多, 而且用例的颗粒度涉及的比较细较细),用例和时间根据自己实际写吧,切记 web 自动化需要等待时间,时间不要说的太短?遇到问题,一般是
1.元素难以定位,比如一些动态的元素,改用 CSS 定位;
2.脚本不是很稳定,有些用例经常失败,但实际并不是 BUG,增加等待、改用相对定位、加入失败重运行、减少用例的依赖保证独立性、创建环境和清理环境走接 口.....
5、你做自动化的时候有没有遇到什么比较难解决的问题?(问题和上面的差不多)
①元素难以定位,比如一些动态的元素,改用 CSS 定位;②脚本不是很稳定,有些用例经常失败,但实际并不是 BUG,增加等待、改用相对定位、加入失败重运行、减少用例的依赖保证独立性、创建环境和清理环境走接口.....
6、如果你做接口测试,接口返回成功,但是实际数据库却没有相对应的数据?你觉得有可能是什么问题?如何定位?
① 如果此接口未对数据库数据进行操作,那个就可以忽略
② 如果此接口是修改数据数据,接口返回成功,而数据库中数据却未变更,那么说明此为 bug
定位:与接口文档进行对照,如果数据库校验的内容与接口文档不一致,这可以定位问题
7、性能测试?(性能测试必问,每一个都问!不会的话可以看一些文章,说有了解过能聊一下就行了)简述一下你做过的性能测试项目如何开展的?重点关注哪些性能指标?会性能调优吗?
性能测试包含:负载测试、压力测试、并发测试.....
定义:在被测系统上不断增加压力,直到性能指标(如响应时间)超过预期指标或者某种资
开源工具 jmeter:开源免费,自由,操作较简单,能辅助完成日常的一些测试工作
8、如何需要模拟死锁的情况?你是如何模拟的?(这个没聊到性能测试一般不会问)
我的回答仅供参考:服务器在真正的压力下,慢慢增加并发用户数、和请求次,CPU 和内存资源的利用率会提高,达到峰值后,超过并发极限值后,CPU 或者内存资源会出现死锁的情况。
9、你除了使用过 unittest 和 pytest 之外有了解过其他的自动化测试框架吗?又运用到自己的项目当中吗?和你现在的框架对比?有什么优点?
Httprunnner 或者 RB,后面的问题大家根据自己实际情况去想吧
10、你会设计测试策略和测试方案?你是如何设计的?
测试策略:数据和数据库完整性测试、功能测试、用户界面测试、性能测试、安全性和访问控制测试、配置测试、安装测试;其实测试策略和测试方案是差不多的意思
11、测试计划你是如何设计的?主要包含哪些内容?
测试计划主要根据项目版本计划去设计;主要包含:测试的范围、质量目标(用例覆盖率、和缺陷发现密度)、测试提交的文档、测试进度(测试开始时间、实际开始时间、结束时间)、测试的准则(启动条件、结束条件)、测试阶段资源(人力资源、测试环境准备、测试工具)、系统风险、优先级(测试资源所需不足、测试业务及技能不足)、项目的控制、详细测试方法、测试规程设计
12、安全性测试做过吗?
这个绝大部分面试官都会问,目的是看你的测试的广度,不会不要紧,了解一下漏洞扫描和SQL 注入、xss、css、php 代码注入 cookie 篡改,能聊天即可,实在不会就说不会吧
13、Webdriver 的原理(被问了两次)
由于客户端脚本(java, python, ruby) 不能直接与浏览器通信, 这时候可以把Webdriver 当做一个翻译器,它可以把客户端代码翻译成浏览器可以识别的代码(比如js).客户端(也就是测试脚本)创建 1 个 session,在该 session 中通过 http 请求向Webdriver 发送请求,Webdriver 翻译成浏览器懂得脚本传给浏览器,浏览器把执行的结果返回给 Webdriver,Webdriver 把返回的结果做了一些封装(一般都是 json 格式),然后返回给客户端,根据返回值就能判断对浏览器的操作是不是执行成功。
14、接口发生异常你如何去分析定位问题
发生异常了,查看是数据返回有问题,还是数据库数据未变更,多种情况去分析
15、你是专职做自动化吗?自动化和功能测试时并行进行吗?占比多少?
不是,功能和自动化都做,串行,先功能测试后自动化测试,占比 80%功能,20%自动化(二八定律),自动化测试比例高于功能测试,面试官会很怀疑。
16、黑盒用例设计技术,及在你工作中的应用场景?
等价类、边界值、错误推测法、场景法、因果图、判定表、正交分解。我举例我工作中设计缴费模块为例,用比较多是等价类、边界值设计技术。
17、你们公司用什么前端框架,后端技术?前端人员、后端开发、和测试的比例是多少?
前端用的 VUE,后端用的 java;人员比例 2:3:1
18、在数据库中插入一条重复的数据 100 次(这个问题没回答上)
使用jmeter轮询100次数据插入请求
19、现在有个部门表,需要你查询出入职最早,排名前 10 的员工,你怎么查?
Select 员工名 from 部门表 order by 时间 limit 0,10 (MySQL 数据库用这种)
select 员 工名 from 部门表 order by 时间 and rownum <=10 (oracle 用这种)
20、Pytest 的参数化如何实现?接口自动化的参数你是如何实现的?说说你的想法
Re 模块+sub 方法去替换
21、如果测并发测试的时候,并发 100 次,前面 99 个通过了,其中有一个失败了,状态码返回 500?你觉得会是什么问题?你怎么分析定位问题?
大佬的回答:1.可能是服务器的问题,并发到第 100 个,把服务器弄崩了,服务器内存,性能需要提升;并发 90 个试下。
22、你说说你在功能测试这块比较擅长什么?举个例子这个各取所长吧
23、如何使你的接口自动化测试用例直接跳过前面几条,直接执行第 7 条?
1、可以在 Excel 创建一列,指定是否跳过,然后在用例时,过滤掉这些用例
2、使用条件判断,通过 case_id==7 来决定是否执行
3、使用 pytest 中的 skip 也可以跳用例,具体看官网
24、如何使你的接口自动化脚本,对于同一个请求让同一个用户请求多次?
也可以在 Excel 中设置相关执行次数的字段,在 ddt 数据驱动时,使用代码来控制执行次数。或者使用 pytest 来代替 unittest
25、如果你遇到了这种情况,原迭代版本计划的测试时间是2 周,测试时间是7 天,后来开发开发了12 天,留给你测试的时间是 2 天,这种情况你会怎么办?
我的回答仅供参考:①对整个项目流程和测试流程提出改进,需要对测试的项目进行风险评估和风险应对,如果此方法不行;②可以将整个项目的功能划分为模块,开发开发完后,单元测试通过后,告知我们测试重点,和最可能出现问题的功能,我们针对这个功能重点测试,单个模块测试完成后,开发完成了整个版本的开发,提测时就可以重点测涉及业务流的模块,减少测试的时间;③如果还不行,那只能提前和领导反馈沟通,增加测试人员的投入,去弥补时间的不足;
大佬的回答:1.测试进度变慢,无法保证在预订时间内上线。
如果需要在预订的时间上线,必须需要测试任务或者测试版本的达到某某要求或者某某标准。
如果无法在预订时间内上,给相关人员评估无法上线的原因和风险,输出测试结果。
26、selenium 中 hidden 或者是 display = none 的元素是否可以定位到?
不能
27、如何提高 selenium 脚本的执行速度?
我和 web 自动化测试关注的并不是脚本的执行速度,而是脚本的稳定性,要以稳定性为主的情况下提升执行速度;首先分析脚本的执行速度受到多方面的影响,比如脚本等待时间、页面加载的速度、网速、设备性能,还有自动化测试用例的繁琐程度,这对这些情况:
①减少操作步骤,减少脚本用例不必要的步骤
②设置等待时间的时候,可以 sleep 固定的时间,也可以检测某个元素出现后中断等待也可以提高速度
③实现多线程。在编写测试用例的时候,一定要实现松耦合,然后在服务器允许的情况下, 尽量设置多线程运行,提高执行速度。注意说了这个很容易被面试官反问,怎么实现多线程的?
28、webdriver 的协议是什么?
JsonWire Protocol
29、自动化测试的时候是不是需要连接数据库做数据校验?
当然不需要啦,接口自动化的时候已经做了
30、点击链接以后,selenium 是否会自动等待该页面加载完毕?
会的
31、自动化测试产出比你觉得怎么样?
自己思考吧
32、你封装了 requests 请求库,发送请求后如何获取相应报文?
封装后返回的是一个response 对象。res.json()转换为字典
本文为51Testing经授权转载,转载文章所包含的文字来源于作者:seak海。如因内容或版权等问题,请联系51Testing进行删除。原文链接:https://blog.csdn.net/qq_38224014/article/details/104922362。