抖音软件测试面试题(含答案)
题目
1…selenium 中 hidden 或者是 display = none 的元素是否可以定位到?
2…如何提高 selenium 脚本的执行速度?
3.webdriver 的协议是什么?
4.自动化测试的时候是不是需要连接数据库做数据校验?
5.点击链接以后,selenium 是否会自动等待该页面加载完毕?
6.自动化测试产出比你觉得怎么样?
7.selenium 中如何判断元素一定存在?
8.http 接口和 webservice 接口的区别?
9.Pytest 和 unittest 区别?
10.简历上写熟悉 linux 命令的必问,如何搭建测试环境?!!!!!!!!!!!
11.你的测试系统有和其他系统对接吗?你 web 自动化输出的 allure 测试报告,有没有将
12.简述一下内连接和外连接?
13.性能测试的数据是谁准备的?
14.APP 自动化做过吗?简述一下你是怎么做功能测试、性能测试、安全性测试?
15.Web 自动化测试发现了一个 BUG,开发认为不是代码的问题,是你脚本的问题,怎么去排查说服他?(这个问题被不同的面试官问了三次)
16.你们公司的业务流程是怎么样的?你觉得你到我们公司做测试有什么优势?你比较擅长
什么?说出你的优势?和你的劣势?
17.如果你来到我们公司,你会怎么开展测试工作?
18.你封装了 requests 请求库,发送请求后如何获取相应报文?
- 接口发生异常你如何去分析定位问题
- 测试流程如何改进?(因为简历写了,所以这个问题你们应该问不到)
- 你是专职做自动化吗?自动化和功能测试时并行进行吗?占比多少?
答案
- selenium 中 hidden 或者是 display=none 的元素可以定位到,但无法进行交互操作。可以通过 JavaScript 修改样式或者属性来使这些元素显示在页面上,然后再进行操作。
- 提高selenium脚本的执行速度需要从以下几个方面入手:
- 合理使用等待时间:设置合适的等待时间,以及避免使用不必要的硬等待;
- 减少页面元素定位次数:尽可能地复用已经定位到的元素,避免重复进行定位;
- 选择快速的定位方式:根据应用场景选择合适的元素查找方法(如 ID、class name 等),避免使用诸如 Xpath 的较慢的定位方式。
- webdriver 是一个开放协议,它定义了浏览器控制和自动化测试的 Web API,包括通过 HTTP 请求管理不同的会话、获取指定会话的当前状态和特性,以及通过命令执行 DOM 操作等。
- 不一定需要连接数据库做数据校验。在许多情况下,可以基于前后端接口的概念来完成数据验证的工作,无需直接连接数据库。即使要验证数据库中的数据,也可以使用类似 JDBC 或 ORM 等技术将验证操作封装到代码中实现,而不是直接操作数据库。
- selenium 可以通过 ExpectedConditions 来等待页面加载完毕或特定的元素加载完成,例如使用 presence_of_element_located 来等待要点击的链接元素存在。此外,也可以使用 time.sleep() 等方式进行手动等待,但这种方式无法区分页面是否真正加载完成,不建议使用。
- 自动化测试产出很大程度上取决于自己的测试执行质量和系统复杂度等因素。如果能充分考虑到多种应用场景,针对各种情况不断优化方案,那么它可以大幅减少人为测试成本和时间,并且输出可重复、可持续的高质量测试结果。但是,在没有良好测试计划、测试用例设计和选择合适测试工具价值链的情况下这些因素可能就无效了。
- selenium 可以通过 WebDriverWait 类中的 ExpectedConditions 来封装等待条件,例如使用 presence_of_element_located 或 visibility_of_element_located 等方法判断元素是否存在。
- HTTP 接口 采用 HTTP 协议通信,而 Web Service 接口 使用 SOAP 协议进行通信,通常需要使用 WSDL 文件描述接口定义。另外,Web Service 接口功能较多、协议开销较大,而 HTTP 接口则更简单,通常用于轻量级业务和数据传输等场景。
- Pytest 是一个更加灵活简洁的 Python 测试框架,它支持模块化、参数化、夹具(fixture)注入、插件机制等多项高级特性。unittest 是 Python 标准库中内置的测试框架,支持诸如断言、测试套件等功能。相比之下,Pytest 易于学习和使用,并且具有更加丰富的插件生态。
- 要搭建测试环境,需要根据具体需求选择合适的硬件和软件资源并进行配置。一般情况下,可以采用物理机或虚拟机来模拟测试环境,安装必要的操作系统、开发环境和数据库等组件、应用程序本身,并根据测试追溯方案配置所需的备份、恢复、负载均衡和性能监控工具等。
- 测试系统通常需要与其他系统进行对接,包括产品管理系统、变更管理系统、缺陷管理系统等。针对对接需求和接口规范,需要开发和维护特定的对接逻辑和接口协议,以实现数据交换和流程协同。
- 内连接(INNER JOIN) 是 SQL 中最简单的连接类型,它只返回两个表中键值匹配的行。而 外连接 则可以返回在至少一个表中没有对应值的行,
- 性能测试的数据集是由测试人员根据系统业务场景编写的测试脚本,并通过运行这些脚本,在不同的负载场景下采集到的系统性能数据。性能测试需要覆盖各种实际应用场景,生成合理的负载和并发,以反映出系统在不同压力下的性能指标和瓶颈。
- 做过 APP 自动化功能测试、性能测试和安全性测试。其中性能测试主要针对 APP 功能模块进行测试,例如登录功能和支付功能等;性能测试主要关注 APP 的响应速度、内存占用率和电量消耗等,并通过工具采集和分析运行指标;而安全性测试则主要关注针对 APP 的攻击,如跨站脚本 (XSS) 和 SQL 注入等,并测试加固程度和漏洞修复是否有效果。
- 若开发人员认为 BUG 是由自身代码之外的环节引起的,这时候可以通过以下方法排查说服开发人员:
- 重新运行脚本,检查是否具有一致性的错误;
- 检查测试环境的配置和设置,并确保它与生产环境类似;
- 对影响代码执行过程的所有中间件组件进行排查,尝试去除其中任何一个或调整其配置以确定解决方法;
- 在同样场景下,使用不同测试框架或使用非自动化测试手段来验证 BUG 是否仅与脚本相关;
- 仔细分析业务和代码逻辑并与开发团队及产品讨论,以便快速定位 root cause。
- 公司业务流程是和行业相关的,而我到贵公司做测试的优势主要在于有一定的经验和技能来应对各种软件测试问题,包括编写测试计划、设计测试用例、执行测试工作,并且熟练掌握了一些常见的测试工具和技术。我比较擅长自动化测试、性能测试和接口测试等领域,同时也努力提升其他技能来满足需要。
我的优势是高度责任感和学习能力,善于与各种人员合作。我的劣势则是缺乏项目管理经验,在承担一些复杂项目时可能需要更多的训练和支持。
- 在新公司开展测试工作时,首先需要了解公司的软件开发流程、项目规划和测试标准等方面的信息,并与开发、产品团队和其他相关人员建立联系和沟通。在此基础上,可以启动测试计划,编写测试用例和脚本,并进行测试环境的调试和搭建。针对不同项目的需要,可以采取自动化测试、手动测试或混合测试方式来进行测试工作,并及时跟踪缺陷汇报并参与相关会议。
- 当封装 requests 请求库后,发送请求后可以通过 requests.Response 对象的 text 属性获取响应报文字符串。也可以通过 content、json() 等属性或方法来获取对相应报文进行处理和解析后的数据。
- 当接口发生异常,可以根据实际情况采取以下分析方式:
- 分析异常信息,如 HTTP 状态码、错误提示信息等;
- 根据网络环境和测试场景选择适当的测试工具;
- 在测试代码中加入详细 log 来记录关键步骤和触发操作;
- 可以调用其他 API 或监控程序进行全链路方面的追踪和分析。
- 为改进测试流程,可以从以下几个角度入手:
- 审查并更新测试计划和测试用例,并尝试使用自动化软件和测试框架,提高测试效率;
- 设定特定的质量指标,包括代码覆盖率、缺陷密度等,并通过持续集成和持续交付来确保最终产品具有想要的质量要求;
- 与开发人员合作,并通常参与到开发过程中,以便在早期阶段捕获问题;
- 使用敏捷开发方式,以便能够快速响应变更需求和快速进行反馈和修复。
- 目前我做的是全职自动化测试,不过我会根据项目和团队的实际情况选择测试类型、进行测试用例设计和执行工作。同时,我深信自动化测试和手动测试并行进行,并且具有各自的优势。在我的测试工作中,自动化占比很大且效果显著,但是它不能完全替代人工测试,例如对 GUI 和边角用例的测试等场景依然需要人员的参与和检查。