本帖最后由 chelang 于 2020-2-22 15:42 编辑
许多同学在找工作面试时经常被问到关于自动化方面的基础,这时候即使自己之前做过自动化,要完整准确的回答面试官的问题却不是易事,那么请看下面!!!
问题一:说一下你们公司自动化测试流程?
在项目成型基本稳定,不会出现大规模的需求变动之后,就可以考虑自动化的启动;
首先要考虑的就是自动化工具的选择,像常用的自动化工具就有QTP、selenium IDE、RobotFramework等,但是这样的工具使用起来不够灵活,一般为了与项目贴合,最好自己写一套框架,像之前我们公司用的框架就是结合了Python+selenium和Python的unittest;
然后在手工用例转化自动化用例之前,我们需要进行评审和决策,将能实现自动化或难度低的模块、用例优先进行自动化,不能实现自动化的用例给出具体原因,在回归时指派手工覆盖,防止漏测;
自动化用例我们要有一定的规范和要求,便于脚本的调用和后期的维护,比如一个功能的用例写在一个目录下,每一条用例写一个脚本,命名要统一格式;
我们用python的unittest框架加载测试用例,用HTMLTestRunner运行测试套并生成测试报告,报告出来后我们要第一时间去分析测试结果,对失败的用例要详细定位失败的原因,到底是脚本错误呢还是这就是bug?再进行处理,修改用例或者就是提交bug问题单;
自动化用例执行全部完成后,对测试结果进行汇总并给出测试结论。
问题二:介绍下你们公司的自动化测试框架?
我们公司的自动化框架基于python+Selenium,我们会有一个测试用例目录用于存放测试用例;一个公共的第三方lib库,因为我们实现自动化的过程中会有很多经常用到的方法,做成公共模块放在lib库里面,可以提高代码的复用率,便于代码的维护;还会有一个data数据目录,存放自动化测试中的数据,在进行数据驱动时,数据与代码分离,便于自动化用例数据的准备和脚本的维护;还会有一个执行和报告目录,执行的策略和报告的生成在这个目录下进行,可以调整自动化测试中的下发策略,查看运行的结果。
问题三:你们用的测试框架是自己写的吗?
我们用的是Python自带的单元测试框架unittest
问题四:定位元素的方法有哪些?
八大定位元素:
属性定位:id、name、clas_sname
路径定位:xpath 、css_selector
链接定位:partial_link_text、link_text
标签定位:tag_name
问题五:如果有个元素总是定位不到,怎么办?
一般出现这种问题的话要先分析脚本中的代码是否与html源文件中元素的属性值一致,经常会因为空格、特殊字符、编码格式等问题导致脚本中代码与html源文件不一致;再查看HTML源文件中是否使用了frame,如果有了则需要特殊处理(使用switch_to_frame跳到frame再定位元素);如果都不是以上的情况,则要检查浏览器的配置,是不是拦截了一部分功能,导致需要定位的html页面的元素不能正常加载;还有一种情况是系统使用的协议不是标准的http协议,而是用了自定义的协议,那就没办法了。
问题六:你们公司自动化测试的流程是什么样的?
我们的项目是比较稳定的项目,做了好久了,现在主要是运维修改一些BUG和做一些新需求,所以我们公司的自动化测试是用于本次新版本上线前做回归测试用的。脚本是前两年就已经做好了的,每次新版本上线前一周会花两三天的时间进行脚本更新与维护,脚本调试通过再使用测试框架执行测试,测试完成会生成报告,我们再对测试结果进行分析,如果发现了BUG,进行BUG的跟进,关于BUG的跟进就跟手工测试试试跟进BUG是一样的了。
问题七:定位一组元素和定位单个元素有什么区别?
定位单个元素返回的是一个元素对象,可以直接进行操作;而定位多个元素返回的是一个元素对象列表,需要做二次定位后才可以进行操作,如下拉框中的元素,需先定位到下拉框,再用Select方法进行二次定位
问题八:你们公司自动化用例大概多少条?会对那些进行自动化测试?
占总系统测试用例的30%-50%左右,根据自己总用例数来估算吧!一般跳窗口,调第三方接口以及一些业务场景比较复杂的用例不适合实现自动化。
问题九:介绍一下Selenium的原理(webdriver的原理)?
以firefox为例,当测试脚本启动firefox的时候,selenium-webdriver 会首先在新线程中启动firefox浏览器,启动后selenium-webdriver会将firefox绑定到特定的端口,绑定完成后该firefox就相当于webdriver的remote server存在;客户端(也就是测试脚本)创建1个session,在该session中向remote server发送http请求(实际是restful,但不明白的话,直接说http就好了),remote server解析请求,完成相应操作并返回response;客户端接受response,并分析其返回值来决定是接着执行下面的代码,还是停止操作。简单的说webdriver就是在自动化脚本与浏览器之间建立一种沟通(交互),脚本中的代码以请求的形式发给浏览器,浏览器执行后返回结果。
问题十:你觉得Selenium的缺陷是什么?
首先Selenium是一种自动化测试框架,它就存在自动化测试的缺陷:不稳定、可靠性、不易维护、成本与收益;而且它只支持B/S架构的自动化。
问题十一:那Selenium的优点?
开源、轻量级、支持多种语言、提供的SeleniumIDE工具录制脚本易于上手,支持多种浏览器,可以很好的测试兼容性。
问题十二:如何去定位属性动态变化的元素?
- xpath或者css通过同级、父级、子级进行定位
问题十三:selenium中如何保证操作元素的成功率?
- 添加元素等待时间time。sleep(5)/driver.implicitly_wait(30)
- try 方式进行 id,name,clas,xpath, css selector 不同方式进行定位,如果第一种失败可以自动尝试第二种
问题十四:如何提高selenium脚本的执行速度?
1. 减少操作步骤,如经过三四步才能打开我们要测试的页面的话,我们可以直接通过网址来打开,减少不必要的操作
2. 中断页面加载,如果页面加载的内容过多,而加载的内容不影响我们测试,就设置超时时间,中断页面加载
3. 在设置等待时间的时候,可以sleep固定的时间,也可以检测某个元素出现后中断等待也可以提高速度(可以用try + isElementPresent,或者try + find_element_by)
4. 多线程执行脚本,在编写测试用例的时候,要尽量实现松耦合,然后在服务器允许的情况下,设置多线程运行,提高执行速度(remote起多节点做分布式,需要先设置hub和node,threading做多线程)
问题十五:怎么提高脚本执行的稳定性?
- 设置等待时间:time.sleep( )、driver.implicitly_wait(30)
- 多用 try 捕捉,处理异常
- 多线程的时候,用例之间相互影响,所以设计用例的时候,尽量降低用例的耦合度;
- 多线程的时候,如果用例执行的先后数序有要求,那么在用例命名的时候要加0-9或a-z排序,因为用例的执行顺序是按照ASCII码表排列的(数字--》大写字母--》小写字母)
问题十六:自动化测试的时候需要连接数据库做数据校验?
- UI自动化不需要
- 接口测试会需要(修改了数据库中的数据就需要,也就是对数据库中的数据进行了增、删、改)
注:连接数据库需要导入pymysql、pyoracle模块
问题十七:你有写过自动化测试脚本吗?
有写,因为一方面我们的系统每个版本都会有新功能上线,等这些新功能运行三四个月基本稳定后,这些功能会就会加入到自动化测试的范围内,所以我们几乎每个版本都会有新自动化脚本要写。另一方面,原有的功能总会有一些新的调整,所以每个版本都需要对原有的自动化脚本进行更新与维护。
我们一般是先使用seleniumIDE进行录制后生成脚本,再对工具自动生成的脚本进行修改、优化。
问题十八:Python常用的模块、函数有哪些?
模块:os、time、system、unittest
函数:time.sleep()、assertIn、assertequal等等(回忆下课堂都用了什么方法)
问题十九:你所测试的核心模块是怎么用自动化实现的,对于验证码的情况如何处理?
自动化实现原理 把自动化测试流程说了,对于验证码,验证码,我们用的是万能验证码,开发后台代码写死的。
|