当前位置: 首页 > news >正文

测试过程涉及python自动化及其他相关面试问题汇总

Python 基础及自动化框架

  1. 问题: 在 Python 中,__init__.py 文件的作用是什么?当我们在 Pytest 中组织测试用例时,这个文件还必要吗?

    • 考察点: Python 模块和包的概念,以及对现代测试框架(如 Pytest)的熟悉程度。

    • 参考回答: __init__.py 文件用于将一个目录标识为 Python 的包(Package),在该目录下的模块才能被导入。它可以为空,也可以写包的初始化代码。在 Pytest 中,从 3.2.3 版本开始,__init__.py 文件不再是发现测试用例所必需的。Pytest 会递归搜索以 test_ 开头或结尾的 .py 文件来发现用例。但为了代码结构的清晰和可维护性,我们通常还是会使用它来标识一个测试包。

  2. 问题: 解释一下 Python 中的 @pytest.fixture 装饰器,并说明 scope 参数的不同选项(如 function, class, module, session)在何时执行。

    • 考察点: Pytest 框架的核心功能——夹具(Fixture)的理解和应用能力,这是构建自动化测试框架的基础。

    • 参考回答: @pytest.fixture 是一个装饰器,用于提供测试所需的数据、状态或环境设置(Setup)和清理(Teardown)。scope 参数控制夹具的执行频率:

      • function(默认):每个测试函数执行一次。

      • class:每个测试类执行一次。

      • module:每个模块(.py 文件)执行一次。

      • session:整个测试会话(一次 pytest 命令)只执行一次。合理使用不同作用域的夹具可以极大提升测试效率。

  3. 问题: 在 Selenium 自动化测试中,你如何处理动态加载的页面元素(即元素不是立即出现,需要等待)?

    • 考察点: Web 自动化中处理异步行为的实战能力。

    • 参考回答: 绝对要避免使用 time.sleep()。应该使用 显式等待(Explicit Wait)。结合 WebDriverWait 和 expected_conditions。例如:WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "myDynamicElement")))。这会最多等待10秒,期间会频繁检查元素是否出现,一旦出现就立即返回,提高了测试的稳定性和速度。

  4. 问题: 在编写 API 自动化测试时(例如使用 requests 库),你如何管理测试数据(如不同的用户凭证、环境配置)以保证用例的独立性和可重复性?

    • 考察点: 测试框架设计思想,数据驱动测试的实践。

    • 参考回答: 我会采用外部配置文件(如 config.ini, .env, YAML)来管理环境变量(如不同环境的 URL、数据库连接)。对于测试数据,我会使用数据驱动的方式,例如 Pytest 的 @pytest.mark.parametrize,将测试数据与测试逻辑分离。同时,在夹具中完成测试数据的准备和清理工作,确保每个测试用例运行前都有一个已知的初始状态,运行后能清理掉产生的垃圾数据。

Linux

  1. 问题: 如何查看一个正在运行的 Java 进程(比如 JMeter)的详细信息,并获取其占用的端口号?

    • 考察点: Linux 进程管理和网络命令的熟练度。

    • 参考回答: 首先使用 ps -ef | grep java 或 jps -l(如果安装了 JDK)找到目标 Java 进程的 PID。然后,使用 netstat -tunlp | grep <PID> 来查看该进程占用的所有端口号。

  2. 问题: 假设一个日志文件 app.log 非常大(几个GB),如何快速定位到包含 “NullPointerException” 错误的最后10行?

    • 考察点: Linux 下大文件日志排查的技巧。

    • 参考回答: 使用 grep 和 tail 的组合命令:grep "NullPointerException" app.log | tail -n 10。如果想同时看到错误发生的时间戳上下文,可以先用 tail -n 1000 app.log 查看最后1000行,然后再用 grep 过滤。

  3. 问题: 解释 chmod 755 script.sh 这个命令的含义。

    • 考察点: Linux 文件权限系统的理解。

    • 参考回答: 这是一个修改文件权限的命令。755 是八进制表示法,分别对应 用户(u)组(g) 和 其他用户(o) 的权限。

      • 7 (用户):4(r读) + 2(w写) + 1(x执行) = 7,即可读、可写、可执行。

      • 5 (组):4(r读) + 0 + 1(x执行) = 5,即可读、不可写、可执行。

      • 5 (其他用户):4(r读) + 0 + 1(x执行) = 5,即可读、不可写、可执行。

JMeter 相关的性能压测

  1. 问题: 在 JMeter 中,线程组、采样器(Sampler) 和 监听器(Listener) 之间的关系是什么?

    • 考察点: 对 JMeter 核心组件和测试结构的基本理解。

    • 参考回答: 线程组 是性能测试的起点,它定义了模拟的并发用户数(线程数)、 ramp-up 时间和循环次数。采样器 是线程组发出的具体请求,如 HTTP 请求、JDBC 请求等。监听器 用于收集、查看和分析采样器返回的测试结果。一个线程组可以包含多个采样器,而监听器则附加在线程组级别,用来监听其下所有采样器的结果。

  2. 问题: 如何设计一个 JMeter 脚本,来模拟用户“登录-浏览商品-加入购物车-下单”这个业务场景,并保证每个虚拟用户使用的是不同的账号?

    • 考察点: JMeter 参数化、关联、逻辑控制器的综合应用能力。

    • 参考回答:

      1. 参数化: 使用 CSV 数据文件设置 元件,准备一个包含用户名、密码等信息的 CSV 文件。在线程组中配置,让每个虚拟用户迭代时读取一行唯一的数据。

      2. 业务流: 使用 事务控制器 将“加入购物车”或“下单”等多个步骤组合成一个事务,便于分析。

      3. 关联: 在登录后,服务器通常会返回一个 token 或 session ID。需要使用 正则表达式提取器 或 JSON 提取器 将其从响应中提取出来,并作为变量在后续的 HTTP 请求(如浏览商品、下单)中传递。

      4. 逻辑控制: 可以使用 如果(If)控制器 来判断登录是否成功,只有成功后才执行后续操作。

  3. 问题: 你在分析 JMeter 聚合报告时,最关注哪些关键指标?如果发现 错误率 突然升高,你会从哪些方面入手排查?

    • 考察点: 性能测试结果分析能力和问题定位思路。

    • 参考回答:

      • 关键指标: 并发用户数、吞吐量(Throughput)、响应时间(90%/95% Percentile)、错误率。

      • 错误率排查:

        1. 服务端: 查看应用服务器(如 Tomcat)、数据库的日志,看是否有异常堆栈。

        2. 资源监控: 检查服务器(CPU、内存、磁盘 I/O、网络带宽)是否达到瓶颈。

        3. 中间件: 检查数据库连接池、线程池是否耗尽。

        4. JMeter 脚本: 检查参数化数据是否用完,关联是否正确,断言是否过于严格。

        5. 网络: 检查是否有网络延迟或丢包。

业务的功能测试要点

  1. 问题: 以电商平台的“支付”功能为例,请描述从用户点击“支付”按钮到支付成功页面展示,这期间涉及哪些系统/模块?数据是如何流转的?

    • 考察点: 对复杂业务系统的端到端理解能力和系统集成思维。

    • 参考回答: 涉及的系统包括:前端应用 -> 订单服务 -> 支付网关 -> 银行/第三方支付系统 -> 支付服务 -> 订单服务 -> 库存服务(可选,如扣减虚拟库存)-> 前端应用。数据流转:前端发送订单ID和支付方式到订单服务,订单服务调用支付服务生成支付流水并重定向到支付网关。用户完成支付后,支付网关通过异步通知(回调)将结果告知支付服务,支付服务更新支付状态并通知订单服务更新订单状态,最终前端通过轮询或 WebSocket 获取状态更新。

  2. 问题: 在对一个“数据导出”功能进行测试时,你的测试要点是什么?

    • 考察点: 功能性测试的全面性思维,特别是数据准确性测试。

    • 参考回答:

      • 功能正确性: 导出的数据内容、格式(CSV/Excel)是否正确;筛选条件是否生效。

      • 数据准确性: 导出的数据是否与界面上/数据库中的源数据完全一致(数量、内容、格式)。

      • 性能与大数据量: 大量数据导出时的响应时间、是否支持分页或异步导出、是否会引发服务端内存溢出(OOM)。

      • 安全性: 是否包含敏感信息(需要脱敏);权限控制(无权限的用户不能导出)。

      • 异常场景: 网络中断、磁盘已满等情况下的处理。

  3. 问题: 什么是“灰度发布”?在测试角度,如何配合灰度发布策略开展工作?

    • 考察点: 对现代发布流程的理解和测试策略的适应性。

    • 参考回答: 灰度发布(金丝雀发布)是指将新版本服务先部署到一小部分用户或服务器上,验证无误后再逐步扩大范围,直至全量。测试需要:

      • 确保对新版本在灰度环境进行充分的回归测试和专项测试。

      • 制定监控方案,密切关注灰度服务器的日志、业务指标和性能指标。

      • 与运维、开发紧密沟通,制定快速回滚预案。一旦发现问题,立即中止发布并回滚。

Jenkins 的 CI/CD

  1. 问题: 描述一下 Jenkins Pipeline 中 Declarative Pipeline 和 Scripted Pipeline 的主要区别。

    • 考察点: 对 Jenkins 核心功能 Pipeline 的深入理解。

    • 参考回答: Declarative Pipeline 是一种更现代、结构化的方式,提供了固定的、预定义的语法结构(如 pipeline, stages, stage, steps),更易于读写和维护,是社区推荐的方式。Scripted Pipeline 是基于 Groovy 的 DSL,提供了极大的灵活性,可以编写复杂的逻辑,但语法更接近编程,结构相对自由,不易维护。

  2. 问题: 在你的 CI/CD 流程中,如何将自动化测试(如 API 测试、UI 测试)集成到 Jenkins Pipeline 中?

    • 考察点: CI/CD 实践和自动化测试的集成能力。

    • 参考回答: 我们会在 Pipeline 中定义独立的测试阶段(Stage)。例如:

groovy

stages {

    stage('Build') { ... }

    stage('Deploy to Test Env') { ... }

    stage('API Tests') {

        steps {

            sh 'pytest api_tests/ --alluredir=./allure-report'

        }

        post {

            always {

                allure report: './allure-report'

            }

        }

    }

    stage('E2E Tests') {

        steps {

            sh 'pytest ui_tests/'

        }

    }

}

我们会使用 post 块,在测试完成后(无论成功失败)总是生成并发布测试报告(如 Allure)。

  1. 问题: 在 Jenkins 中,如何管理和使用“凭证(Credentials)”来避免在脚本中明文写入密码?

    • 考察点: 持续集成中的安全意识。

    • 参考回答: 使用 Jenkins 内置的凭证管理功能。我们可以在 Jenkins 管理界面添加一个类型为 “Secret text” 或 “Username with password” 的凭证,并给它一个唯一的 ID。在 Pipeline 中,通过 withCredentials 指令来安全地使用它,例如:

groovy

withCredentials([usernamePassword(credentialsId: 'my-git-cred', passwordVariable: 'GIT_PASSWORD', usernameVariable: 'GIT_USERNAME')]) {

    sh 'git push https://${GIT_USERNAME}:${GIT_PASSWORD}@git.example.com/repo.git'

}

这样密码就不会在日志或脚本中明文暴露。

综合场景题

  1. 问题: 当你发现一个在测试环境能通过的自动化测试用例,在 CI/CD 流水线中总是失败,你的排查思路是什么?

    • 考察点: 问题定位和解决的综合能力。

    • 参考回答:

      1. 环境差异: 检查测试环境和 CI 环境的应用版本、依赖服务、数据库数据是否一致。

      2. 配置差异: 检查环境变量、配置文件在 Jenkins 节点和本地是否不同。

      3. 执行方式: 检查 Jenkins 节点的执行用户、工作目录路径、浏览器版本(对于 UI 测试)是否与本地不同。

      4. 并发与隔离: 检查 CI 环境中是否有多个任务并行执行,导致资源竞争或数据污染。

      5. 日志分析: 详细查看 Jenkins 控制台输出、应用日志和测试框架生成的报告,寻找错误堆栈。

  2. 问题: 你是如何保证你的自动化测试脚本的稳定性和可维护性的?

    • 考察点: 测试开发的工程化思维。

    • 参考回答:

      • 稳定性: 使用显式等待而非硬等待;为用例添加重试机制;保证测试环境的独立性。

      • 可维护性: 使用 Page Object Model (POM) 模式来管理 UI 元素;将测试数据、配置信息外部化;使用清晰的命名规范和代码结构;编写公共工具方法和夹具。

  3. 问题: 在敏捷开发模式下,你是如何平衡新功能的手工测试与自动化测试回归的?

    • 考察点: 测试策略和团队协作能力。

    • 参考回答: 我们会采用测试金字塔策略。底层是大量快速的单元测试(由开发完成)和 API 自动化测试(由测试和开发共同维护),它们是回归的主力。中间层是针对核心业务流程的 UI 自动化测试。顶层是新功能的手工探索式测试。在 Sprint 中,新功能先进行手工测试,一旦功能稳定,就立即将其核心场景转化为自动化用例,补充到回归体系中。

  4. 问题: 你如何评估一个功能点是否需要做自动化测试?或者说,自动化测试的选型标准是什么?

    • 考察点: 对自动化测试价值和成本的理解。

    • 参考回答: 我们会从以下几个维度评估:

      • 业务重要性: 核心业务流程、主干流程必须自动化。

      • 执行频率: 需要频繁回归测试的场景。

      • 稳定性: 功能相对稳定,不会频繁变动。

      • 投入产出比(ROI): 开发维护脚本的成本是否低于长期手工回归的成本。

      • 可行性: 技术上是否易于实现自动化(例如,涉及图形验证码或第三方支付的功能就较难)。

http://www.dtcms.com/a/549230.html

相关文章:

  • 免费网站建设讯息全站加速 wordpress
  • 哪里网站建设公司比较好网站建设销售工作职责
  • 推荐一款免费的语音识别网站,上传音频即可
  • 笔记C++语言,太焦虑了
  • 分公司一般做网站吗音乐网站建设目标
  • Java 21 虚拟线程 vs 缓存线程池与固定线程池
  • 在线开发培训网站建设小型餐饮店面设计
  • ZYNQ USB按键读写操作详解:从裸机到Linux系统的完整实现
  • 如何在Windows桌面实现自由悬浮计时?
  • BEV环视感知算法从环境部署开始
  • 看上去高端的网站深圳培训学校
  • 狂飙与重构:机器人IPO浪潮背后的系统焦虑与感知进化
  • 21.静态NAT
  • 做头像的网站wordpress拖拽式
  • 【C++】位运算算法习题
  • 券商上云,不止AI和大数据,还有USB Server
  • 软件设计师知识点总结:面向对象技术(设计模式)
  • 广西建设局建设行政主管部网站企业app开发企业
  • Python 实战:Web 漏洞 Python POC 代码及原理详解(3)
  • VMware替代 | ZStack ZSphere与VMware NSX安全策略对比
  • BigDecimal
  • 【电子元器件·10】低功耗继电器 —— 磁保持继电器;有源蜂鸣器、无源蜂鸣器
  • 示范专业网站建设网站开发体会范文
  • LeetCode 411 - 最短独占单词缩写
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段-二阶段(11):文法和单词-第三课
  • 网站建设方案和报价家装设计师工资高吗
  • 虚拟环境配置
  • 高效学习《数据库原理》:从理论到实战的计算机专业指南
  • 龙口网站设计网站文件夹没有权限设置
  • Vue3+CSS 实现3D卡片动画