Selenium自动化测试面试题

目录

1、什么是自动化测试、自动化测试的优势是什么?

通过工具或脚本代替手工测试执行过程的测试都叫自动化测试。

自动化测试的优势:

1、减少回归测试的成本

2、减少兼容性测试成本

3、提高测试反馈速度

4、提高测试覆盖率

5、让测试工程师做更有意义的测试

2、什么样的项目比较适合做自动化测试,什么样的不适合做自动化测试?

1、适合做的项目:

a.项目周期长且相对稳定

b.需要做频繁的冒烟测试

c.需要经常做回归测试

d.需要进行大数据量的数据驱动测试

2、不适合做的项目:

a.项目周期短用例不会多次重复执行

b.被测项目不稳定变化太频繁

3、说一下开展自动化工作的主要流程是怎样的?

1、选择合适的测试工具

2、定义自动化测试覆盖的范围

3、制定测试计划

4、自动化测试环境搭建

5、脚本开发

6、测试执行

7、测试脚本维护

4、在制定自动化测试计划的时候一般要考虑哪些点?

1、选择适合的测试工具或分析当前的工具是否适合新项目

2、选择合适的自动化测试框架

3、确定要做自动化测试的范围和不做自动化测试的范围

4、测试环境的准备与搭建

5、制定一个粗略的脚本开发的时间表

6、制定脚本执行的一些策略,如冒烟测试的频率,回归测试的时间点及频率等

7、定义自动化测试的输出,比如脚本,测试数据,发现的缺陷,测试报告等

5、编写自动化脚本时的一些规范?

1、统一的命名约定,如用例名,方法名等

2、良好的脚本注释

3、遵循代码规范,使用适当的缩进

4、对异常进行处理

6、你一般一天能编写多少个自动化脚本?

这个取决于测试用例场景的复杂度,一般一天能写2~5个左右,复杂的话一天只能写一个

7、做自动化测试时关注的一些指标?

1、自动化测试用例的覆盖率=自动化测试用例数/所用用例总数,这个比例越高测试反馈越快,成本节约越多

2、节省的时间成本=手工测试所花的时间-自动化测试所花的时间

3、自动化测试的投入=开发脚本的投入 脚本维护的投入 工具价格

4、自动化测试发现的缺陷数,每次回归测试时自动化测试发现的缺陷数及漏测数,反应了自动化用例的有效性

5、自动化测试投入产出比

ROI=(手工测试的成本-自动化测试成本)/自动化测试成本

ROI如果是负值说明自动化测试的成本未收回,ROI为正值说明自动化测试成本已回收,且值越大说明回报越好

8、自动化测试可以达到100%的覆盖率吗?

比较难,因为有些用例场景无法被自动化,一些验证易用性友好性的用例不适合做自动化,有些边缘的用例很少被重复执行,从投入产出比来说也不适合做自动化

9、你们公司开展自动化测试遇到一些什么问题?

1、项目流程不规范,项目变动频繁导致自动化用例维护成本高,解决:深入理解用户需求,规范开发流程,自动化用例先覆盖已经稳定的功能

2、对自动化期望太高,自动化也是一个逐步完善的过程,不可能一下子完全代替手工

3、有些自动化工程师的技术能力偏弱,提升编程能力,提升自动化工具使用能力,对新人进行培训等

10、Selenium驱动浏览器使用的协议是什么?

JsonWireProtocol 是通过使用 webdriver 与 remote server 进行通信的 web service 协议。通过 http 请求,完成和 remote server 的交互。

11、Selenium工具都包含哪些组件?

Selenium WebDriver

selenium自动化测试自学(Selenium自动化测试面试题)(1)

Selenium IDE

selenium自动化测试自学(Selenium自动化测试面试题)(2)

Selenium Grid

selenium自动化测试自学(Selenium自动化测试面试题)(3)

12、Selenium中定位网页元素的八种方式?

selenium自动化测试自学(Selenium自动化测试面试题)(4)

13、webdriver启动常见的浏览器语句?

#!/usr/bin/env python# -*- coding:utf-8 -*-# 公众号:AllTests软件测试from selenium import webdriverdriver = webdriver.Chrome()driver = webdriver.Firefox()driver = webdriver.Ie()

14、如何选中下拉列表中的下拉选项?

#!/usr/bin/env python# -*- coding:utf-8 -*-# 公众号:AllTests软件测试# 通过选项的顺序,第一个为0select_by_index(index)# 通过value属性select_by_value(value)# 通过选项可见文本select_by_visible_text(text)

15、如何取消选中下拉列表中的下拉选项?

#!/usr/bin/env python# -*- coding:utf-8 -*-# 公众号:AllTests软件测试deselect_by_index(index)deselect_by_value(value)deselect_by_visible_text(text)deselect_all()

16、Selenium如何处理弹窗?

#!/usr/bin/env python# -*- coding:utf-8 -*-# 公众号:AllTests软件测试# 确认driver.switch_to.alert.accept()# 取消driver.switch_to.alert.dismiss()# 在弹出框输入内容driver.switch_to.alert.send_keys("输入数据")

17、Selenium可以处理Windows弹窗吗?

Selenium本身是不可以处理Windows弹窗的,但是Selenium可以借助Autolt小工具来完成对Windows弹窗的操作。

18、如何判断一个元素在页面上是显示出来的?

webelement类中的is_displayed()方法

本身这个函数用于判断某个元素是否存在页面上(这里的存在不是肉眼看到的存在,而是html代码的存在。某些情况元素的visibility为hidden或者display属性为none,我们在页面看不到但是实际是存在页面的一些元素。)

19、Selenium中如何判断元素是否存在?

#!/usr/bin/env python# -*- coding:utf-8 -*-# 公众号:AllTests软件测试from selenium.common.exceptions import NoSuchElementException# 判断元素是否存在def isElementPresent(self, by, value):try:element =self.driver.find_element(by=by, value=value)except NoSuchElementException as e:# 发生了NoSuchElementException异常,说明页面中未找到该元素,返回Falsereturn Falseelse:# 没有发生异常,表示在页面中找到了该元素,返回Truereturn True

20、driver.quit()和driver.close()的区别?

driver.close()仅关闭当前用户正在操作的页面

driver.quit()关闭整个浏览器,关闭所有的页面

21、自动化测试用例从哪里来?

1、手工用例中抽取

2、参考自动化用例的执行策略

22、常见的自动化测试框架有哪些?

线性脚本框架、基于模块化的框架、库结构框架、数据驱动框架、关键字驱动框架、混合框架等

23、什么是POM?

POM,中文字母意思是,页面对象模型,POM是一种最近几年非常流行的自动化测试模型,或者思想,POM不是一个框架,是一个解决问题的思想。采用POM的目的是为了解决前端中UI变化频繁,从而造成测试自动化脚本维护的成本越来越大。

POM主要有以下优点:

1、把web ui对象仓库从测试脚本分离,业务代码和测试脚本分离。

2、每一个页面对应一个页面类,页面的元素写到这个页面类中。

3、页面类主要包括该页面的元素定位,和这些元素相关的业务操作代码封装的方法。

4、代码复用,从而减少测试脚本代码量。

5、层次清晰,同时支持多个编写自动化脚本开发,例如每个人写哪几个页面,不影响他人。

6、建议页面类和业务逻辑方法都给一个有意义的名称,方便他人快速编写脚本和维护脚本。

24、Selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元素一定是可以点击的?

1、添加元素智能等待时间driver.implicitly_wait(30)

2、try 方式进行 id,name,class,xPath,css selector 不同方式进行定位,如果第一种失败可以自动尝试第二种

3、Selenium 保证元素成功率是通过元素的定位,当然它的定位方法很多,一定能有合适的。但是在自动化工程的实施过程中,高质量的自动化测试不是只有测试人员保证的,需要开发人员规范开发习惯,如给页面元素加上唯一的 name,id 等,这样就能大大地提高元素定位的准确性。当然如果开发人员开发不规范,我们在定位元素的时候尽量使用相对地址定位,这样能减少元素定位受页面变化的影响。只要我们元素定位准确,就能保证每一个操作符合预期结果。

25、如何提高Selenium脚本的执行速度?

Selenium脚本的执行速度受多方面因素的影响,如网速,操作步骤的繁琐程度,页面加载的速度,以及我们在脚本中设置的等待时间,运行脚本的线程数等。所以不能单方面追求运行速度的,要确保稳定性,能稳定地实现回归测试才是关键。

我们可以从以下几个方面来提高速度:

1、减少操作步骤,如经过三四步才能打开我们要测试的页面的话,我们就可以直接通过网址来打开,减少不必要的操作。

2、中断页面加载,如果页面加载的内容过多,我们可以查看一下加载慢的原因,如果加载的内容不影响我们测试,就设置超时时间,中断页面加载。

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

4、配置实现多线程,在编写测试用例的时候,一定要实现松耦合,然后在服务器允许的情况下,尽量设置多线程运行,提高执行速度。

26、你的自动化用例的执行策略是什么?

自动化测试用例的执行策略是要看自动化测试的目的,通常有如下几种策略:

1、自动化测试用例是用来监控的,在此目的下,我们就把自动化测试用例设置成定时执行的,比如每五分钟或是一个小时执行一次,在 Jenkins 上创建一个定时任务即可。

2、必须回归的用例,有些测试用例在产品变动上线之前都需要回归执行,那我们就把测试用例设置成触发式执行,在 Jenkins 上将我们的自动化测试任务绑定到开发的build任务上,当开发人员在测试环境上部署代码的时候,我们的自动化测试用例就会被触发执行。

3、不需要经常执行的测试用例,像全量测试用例,我们没有必要一直回归执行,必竟还是有时间消耗的,有些非主要业务线也不需要时时回归,这类测试用例我们就采用人工执行,在 Jenkins 上创建一个任务,需要执行的时候人工去构建即可。

27、什么是持续集成?

持续集成源于极限编程(XP),是一种软件实践,软件开发过程中集成步骤是一个漫长并且无法预测的过程。集成过程中可能会爆发大量的问题,因此集成过程需要尽可能小而多,实际上持续集成讲的是不断的去做软件的集成工作。持续集成,最简单的形式是包括一个监控版本控制(SVN、Git等)变化的工具,当变化被发觉时,这个工具可以自动的编译并测试你的应用。

接口自动化面试题

1.请问你是如何做接口测试的?

大体来说,经历以下过程:接口需求调研、接口测试工具选择、接口测试用例编写、接口测试执行、接口测试回归、接口测试自动化持续集成。

具体来说,接口测试流程分成以下九步:

第一步:分析出测试需求,并请开发提供接口说明文档;

第二步:从接口说明文档中整理出接口测试用例,里面要包括详细的入参(正常情况,异常情况包括输入参数个数,类型,可选/必选,考虑参数有互斥或关联的情况)和出参数据(符合接口文档需求)以及明确的格式和检查点;

第三步:与开发一起对接口测试用例进行评审;

第四步:结合开发库,准备接口测试用例中的入参数据和出参数据,并整理成Excel格式的文件;

第五步:结合接口测试用例文档和Excel格式的数据文档,编写接口自动化测试的业务逻辑代码;

第六步:开始执行接口自动化测试用例;第七步:执行如有bug,提交至缺陷管理平台;第八步:开发修改完成后,回归bug,跟踪状态;第九步:完成后进行自动化持续集成;

2.接口测试如何设计测试用例?

主要从四个方面来设计接口用例:功能,业务逻辑,异常,安全。

功能:是否符合需求

1)从用户角度出发看接口能否实现业务需求,功能是否正常;

2)功能是否按照接口文档实现;

举例:比如博客园添加随笔,需要登录才能添加。也就是业务要求不支持游客添加随笔功能,如果设计一个没有登录的用户,然后去测试添加随笔接口,结果接口能添加到随笔,说明功能不正常,不符合需求和接口文档描述。

业务逻辑:是否依赖业务

1)接口实现逻辑;

2)业务逻辑覆盖(语句/条件/分支/判定/…);

举例:该接口调用之前,需要调用登录接口,如果不登录也能请求数据,不符合业务逻辑。

异常:参数异常和数据异常

1)参数异常:关键字参数,参数为空,多,少参数,错误参数;

2)数据异常:关键字数据,数据为空,长度不一致,错误数据;

举例:不管数据异常还是参数异常,测试点差不多,一个参数有key和value,key表示参数,value表示数据。

第一,看看参数和数据能不能支持关键字,例如Java中的保留关键字等等;

第二就是参数和数据都为空,看看是否做了判断;第三,参数多和少,例如有两个参数的接口,需要设计一个包含三个参数的用例,一个只有一个参数的用例。

数据长度不一致,例如设计很长的字符串是否支持,因为数据库创建表过程都设置好了每个字段的长度。输入错误的参数和数据,如故意输错单词等等。

安全测试用例设计:

1.cookie:有cookie才能获取数据,如果不带cookie还有信息返回,说明有问题;

2.header:正常接口带header信息,删除header看是否能够返回数据;3.唯一识别码:app手机识别码,一般是唯一的;

4.文本输入框sql注入和xss攻击。

3.接口测试执行中需要比对数据库吗?

接口的返回关键字段和字段值是需要校验的,不然接口测试就没有意义了,一般有两种方式:

1.数据库预置数据,接口校验返回;

2.接口调用,比对数据库查询结果。

4.接口测试质量评估标准是什么?

一般来说,从以下八个方面评估:

1.业务功能覆盖是否完整;2.业务规则覆盖是否完整;3.参数验证是否达到要求(边界、业务规则);4.接口异常场景覆盖是否完整;5.接口覆盖率是否达到要求;6.代码覆盖率是否达到要求;7.性能指标是否满足要求;8.安全指标是否满足要求;

5.接口产生的垃圾数据如何清理

造数据和数据清理,需用Python连数据库了,做增删改查的操作测试用例前置操作。

1.setUp做数据准备后置操作;

2.tearDown做数据清理;

6.其他接口要先获取接口信息,如何让登录的接口只在其他接口调用一次?

解决方法如下:

1.使用单例模式;

2.使用自定义缓存机制;

3.使用测试框架中的 setup 机制;

4.pytest 中 fixture 机制;

7.接口测试断言从哪些方面去设计?

接口测试断言可以从以下五个方面进行设计:

selenium自动化测试自学(Selenium自动化测试面试题)(5)

1.响应码:检查响应码是否符合预期,用来判断测试用例是否执行成功(针对http接口)

2.关键字:验证关键字是否符合预期,用来判断测试用例是否执行成功;

3.正则匹配:当一个接口返回的内容较多,并且有一定规律时,可通过正则表达式来校验接口返回的信息来判定测试用例是否执行成功;

4.数据库匹配核对:比如对查询一个接口返回的数据进行验证时,可通过编写sql语句查询结果,然后将sql语句执行后数据库返回的结果与接口返回的结果进行核对,以此来判定测试用例是否执行成功;

5.通过相关接口进行辅助验证:比如,当测试一个删除接口时,删除一条记录后,想验证这条记录真的被删除,可调用查询接口,若删除的记录没被查询到,则说明删除这条记录成功。

8.依赖于第三方数据的接口如何进行测试?

可以利用一些Mock工具(如:JSON Server、Easy Mock)来模拟第三方的数据返回,最大限度的降低对第三方数据接口的依赖。

Mock服务是指在测试过程中对于某些复杂(或者不太好构造)的对象,用一个虚拟的对象替代它。

如现在有A和B两个接口, A需要调用接口B才能完成业务需求。这个时候B接口有如下三种情况:

1.B接口还没有开发完成:需要等待接口的数据来进行开发,这时候完善的接口Mock服务能大大缩短开发联调等待时间。

2.B的某些场景很难去模拟:比如超时、未知错误或者不稳定的第三方接口。

3.性能测试中隔离B接口(第三方接口):在进行压测的时候就会遇到问题。

9.API测试有哪些优势?

API是(Application Programming Interface),即应用程序编程接口。API是一组用于构建软件应用程序的规程,协议和工具。

API充当软件应用程序之间的接口,并允许两个软件应用程序相互通信。API是一组软件功能,可以由其他软件执行。API测试具备如下优势:

1.更快及更高的测试覆盖率。

2.API测试有助于我们降低测试成本。通过API测试,我们可以在GUI测试之前找到小错误。在GUI测试期间,这些小错误将变得更大。因此,在API测试中发现这些错误将对公司具有成本效益。

3.API测试与语言无关。

4.API测试在测试核心功能方面非常有用。我们可以在没有用户界面的情况下测试API。在GUI测试中,我们需要等到应用程序可用于测试核心功能。

5.API测试有助于我们降低风险。

10.接口调不通,如何去排查?

接口调不通的原因:

selenium自动化测试自学(Selenium自动化测试面试题)(6)

问题1.接口没有任何响应

很多时候在做接口测试时,会发现接口没有任何返回,比如浏览器一直在转圈,或者返回一个空白页面。用接口测试工具时,工具报错,提示“no response”。

排查思路:

1.先检查接口ip是否正确,可以通过在本机ping 接口的ip,检查网络是否通畅;

2. 检查接口的端口号是否正确,可以通过在本机telnet接口的ip和端口号,检查端口是否能连通;

3.检查项目是否启动或者部署成功,可以找研发确认,或者自己登录到服务器上,通过ps命令检查项目的进程是否存在,然后用tail命令查看部署日志;

4.检查服务器防火墙是否关闭,如果因为安全或者权限问题不能关闭,需要找运维进行策略配置,开放对应的ip和端口号;

5.检查你的客户端(浏览器/测试工具),是否设置了网络代理,网络代理可能会造成请求失败;

6.检查操作系统的host文件,是否绑定了一个错误的ip映射;

问题2:接口有响应但是返回了错误的状态码

有些时候接口会返回一些错误的HTTP状态码,需要根据不同的状态码来确定具体的原因。

排查思路:

400:客户端请求错误,比如请求参数格式错误(如json字符串不合法);

401:未授权,比如在请求header里,缺乏必要的信息头(如token、auth等字段);

403:禁止,常见的原因是用户的账号没有对应的url权限,还有就是项目所用的中间件,不允许远程访问(比如Apache);

404:资源未找到,导致这种情况的原因很多,比如:

1.url拼写错误;

2.url后有空格;

3.项目没有启动成功;

4.请求协议不对,如http/https;

405:方法不允许,常见的原因是请求方式不正确,比如GET类型接口,使用POST方式去请求;

415:不支持的媒体类型,常见原因是请求数据的类型和服务端支持的类型不匹配,比如json接口,需要添加一个信息头Content-type:application/json;

500:服务器内部错误,出现这种情况,说明服务端内部报错了,需要登录到服务器上,检查错误日志,根据具体的提示信息再进行排查;

502/503/504(Bad Gateway/错误的网关、Service Unavailable/服务无法获得、Gateway Timeout/网关超时)。从以下两种情况分析:

1.如果单次调用接口就报该错误,说明是后端服务器配置有问题,或者服务不可用,挂掉了;

2.如果并发压测时出现此错误,说明是后端压力太大,出现异常,此问题一般是后端出现响应时间过长或者无响应造成。

希望本文对你有所帮助~~如果对软件测试、接口测试、自动化测试、性能测试、面试经验交流感兴趣可以私聊我或关注公众号“特斯汀软件测试”。免费领取最新软件测试大厂面试资料和Python自动化、接口、框架搭建学习资料!技术大牛解惑答疑,同行一起交流。

,