pytest 面试题及详细答案(企业真实高频版)_第1页
pytest 面试题及详细答案(企业真实高频版)_第2页
pytest 面试题及详细答案(企业真实高频版)_第3页
pytest 面试题及详细答案(企业真实高频版)_第4页
pytest 面试题及详细答案(企业真实高频版)_第5页
已阅读5页,还剩2页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

pytest面试题及详细答案(企业真实高频版)一、基础认知题(初级必问)1、说一说pytest和unittest的核心区别?参考答案:首先用法门槛不一样,unittest是Python内置框架,必须写类、继承TestCase,用固定的self断言方法,写法比较繁琐。而pytest是第三方框架,兼容unittest所有用例,同时支持极简写法,普通函数、普通断言就能写测试用例,不用强制写类。其次功能差异很大,pytest自带很多实用功能,比如参数化、夹具、用例跳过、失败重跑、简洁的日志输出,unittest原生没有这些,需要自己封装或者导入插件。最后扩展性不同,pytest插件生态非常成熟,接口测试、web自动化、性能测试都有对应的插件,能适配各类测试场景,unittest基本没有插件生态,只适合简单的单元测试。2、pytest的用例命名规则是什么?哪些文件/函数会被自动识别执行?参考答案:pytest有固定的识别规则,不需要手动注册用例:1.测试文件:文件名必须以test_开头,或者以_test结尾;2.测试函数:文件内的普通函数,必须以test_开头;3.测试类:类名必须以Test开头,并且类里面不能有__init__构造方法;4.测试方法:测试类里面的方法,必须以test_开头。不符合这个规则的文件、函数、类,pytest默认不会扫描和执行。3、简单说下pytest的执行常用命令?参考答案:日常工作最常用的几个命令:1.pytest:默认执行当前目录下所有符合规则的测试用例;2.pytest文件名.py:只执行指定测试文件的用例;3.pytest文件名.py::类名::方法名:精准执行单个测试用例;4.pytest-v:详细模式执行,展示每个用例的名称和执行结果;5.pytest-s:关闭控制台捕获,打印用例中的print日志;6.pytest-k"关键词":根据关键词模糊匹配并执行对应用例;7.pytest-x:遇到第一个失败用例就停止执行,方便快速排查问题。二、Fixture夹具核心题(面试重点)1、什么是pytestfixture?和unittest的setUp/tearDown比优势在哪?参考答案:fixture是pytest用来做前置后置准备、数据初始化、资源管理的核心功能,简单说就是测试用例的依赖组件,比如初始化数据库、生成测试账号、打开关闭浏览器、接口请求前置参数封装都可以用fixture实现。对比unittest的setUp/tearDown,优势很明显:第一、灵活性更高。setUp是类/模块全局生效,所有用例都会执行,无法按需调用;fixture可以指定某个用例单独调用,也可以全局调用,粒度可控。第二、支持参数返回。fixture可以返回数据、对象给测试用例使用,比如返回接口请求对象、数据库连接对象,setUp很难实现灵活的数据返回。第三、支持层级作用域。可以控制函数级、类级、模块级、会话级执行,比如会话级fixture整个测试流程只执行一次,大大提升执行效率。第四、支持嵌套依赖。一个fixture可以依赖另一个fixture,适合复杂的测试前置场景。2、fixture的作用域有哪几种?执行顺序是什么?参考答案:fixture一共4种常用作用域,优先级从低到高:1.function(默认):每个测试用例执行前后都会执行一次;2.class:每个测试类执行前后只执行一次,类内所有用例共享;3.module:每个测试文件(模块)执行前后只执行一次;4.session:整个测试会话执行前后只执行一次,所有测试文件共享。执行顺序规则:前置:session->module->class->function后置:function->class->module->session3、conftest.py文件的作用是什么?使用规则有哪些?参考答案:conftest.py是pytest的全局配置夹具文件,核心作用是存放公共fixture、全局钩子函数、用例配置,不用手动导入,pytest会自动识别加载。使用规则:1.文件名必须严格是conftest.py,不能修改;2.支持层级生效,项目根目录的conftest是全局生效,子目录下的conftest只对当前目录及子目录的用例生效;3.文件内的fixture、pytest钩子函数,所有同级/下级测试文件都可以直接调用,无需import;4.不支持被普通Python文件导入,只供pytest测试框架自动加载。4、fixture怎么实现后置操作?除了yield还有什么方式?参考答案:日常最常用的是yield关键字实现前后置分离。yield之前的代码是前置操作,执行用例前运行;yield可以返回数据给用例;yield之后的代码是后置操作,用例执行完后必定运行,哪怕用例报错也会执行,适合资源释放、关闭连接、清理数据。另外一种方式是addfinalizer终结器,适合动态注册后置清理逻辑,场景更灵活,比如根据前置执行结果动态决定需要清理哪些资源。三、参数化与用例控制(进阶高频)1、pytest参数化如何使用?@pytest.mark.parametrize核心用法参考答案:参数化的核心作用是一组测试逻辑,批量传入多组测试数据,自动生成多条测试用例,不用重复写代码,大幅精简代码。核心用法:通过装饰器@pytest.mark.parametrize("参数名",数据列表)实现。支持单参数、多参数批量传参,还能给每组用例添加自定义标题、标记异常用例。举个简单场景:测试登录接口,传入正确账号密码、错误密码、空账号三组数据,只需要写一个测试函数,通过参数化自动生成3条用例。2、pytest如何跳过用例、标记失败用例?参考答案:日常工作常用两种标记方式:1.跳过用例@pytest.mark.skip():无条件跳过该用例,适用于功能未开发完成、临时屏蔽的用例;@pytest.mark.skipif(条件):条件性跳过,比如系统版本不兼容、环境不一致时自动跳过。2.预期失败用例@pytest.mark.xfail():标记该用例预期失败,比如已知bug未修复、待优化的功能。执行后用例失败不会统计为报错,成功反而会提示异常,方便跟踪问题进度。3、pytest如何实现用例失败重跑?原理是什么?参考答案:需要安装pytest-rerunfailures插件,这是项目中最常用的失败重跑方案。执行命令:pytest--reruns重跑次数,比如pytest--reruns2表示失败用例自动重跑2次。适用场景:解决接口超时、网络抖动、环境偶发波动导致的假性失败,避免偶然问题阻塞测试流程。原理:框架执行完所有用例后,会收集所有失败的用例,单独重新执行指定次数,重跑成功则标记用例通过,多次失败才标记最终失败。四、插件与报告(实战必备)1、工作中常用的pytest插件有哪些?各自作用?参考答案:我日常项目中高频使用的5个插件:1.pytest-rerunfailures:失败用例重跑,处理偶现失败;2.pytest-html:生成简易的html测试报告,快速查看执行结果;3.allure-pytest:生成高清结构化测试报告,支持用例分层、截图、日志、步骤展示,适合CI/CD集成;4.pytest-cov:统计代码覆盖率,检测单元测试覆盖情况;5.pytest-ordering:控制用例执行顺序,默认pytest用例无序执行,插件可以自定义先后顺序。2、allure报告的使用流程和优势?参考答案:使用流程分两步:第一步执行用例时生成临时结果数据,命令为pytest--alluredir=结果目录;第二步通过allure命令把临时数据渲染成可视化报告,命令为allureserve结果目录。优势非常贴合项目落地:1.报告美观、层级清晰,区分模块、用例状态、失败原因;2.支持添加测试步骤、截图、接口请求日志、附件,排查问题更直观;3.支持集成Jenkins持续集成,自动生成报告并推送;4.可以统计用例通过率、失败率、跳过率,方便输出测试总结。五、进阶原理与问题排查(中高级面试)1、pytest默认用例执行顺序是什么?如何强制指定顺序?参考答案:pytest默认无序执行,不会按照代码从上到下的顺序执行,框架会自动优化扫描顺序,目的是提升执行效率。如果业务需要依赖执行顺序(比如先注册再登录),可以通过两种方式解决:1.使用pytest-ordering插件,通过@pytest.mark.run(order=数字)指定优先级,数字越小越先执行;2.把有依赖的用例拆分到同一个fixture中,通过前置后置逻辑保证执行顺序,这也是更推荐的方式,用例本身尽量保持独立。2、测试用例失败常见原因有哪些?你如何排查?参考答案:日常pytest用例失败主要分4类,我会按顺序排查:1.断言失败:预期结果和实际返回不一致,优先查看接口返回数据、校验字段是否变更,核对需求文档;2.代码异常:用例代码、fixture代码报错,比如参数缺失、变量未定义、数组越界,直接看控制台报错堆栈即可定位;3.环境问题:数据库连接失败、接口地址错误、权限不足、网络超时,这类属于环境问题,和用例逻辑无关;4.偶现失败:网络抖动、接口并发限制、数据脏数据导致,一般通过重跑、清理测试数据、增加请求间隔解决。3、什么是pytest钩子函数?常用的钩子有哪些?参考答案:钩子函数是pytest预留的自定义扩展入口,可以在测试框架的不同执行阶段,自定义自己的逻辑,不用修改框架源码,就能实现定制化功能,一般放在conftest.py中使用。常用高频钩子:1.pytest_configure:框架启动时执行,用于初始化全局配置、读取配置文件;2.pytest_runtest_makereport:用例执行完毕后触发,常用来自定义失败截图、收集用例执行结果、统计通过率;3.pytest_collection_modifyitems:用例收集完成后触发,用于修改用例名称、过滤用例、排序用例;4.pytest_sessionstart/pytest_sessionfinish:测试会话开始和结束时执行,用于全局环境初始化和收尾清理。六、实战场景题(面试加分项)1、如何保证pytest测试用例的独立性?参考答案:用例独立性是自动化测试的核心,我在项目中主要通过4点保证:1.每个用例不依赖其他用例执行结果,所有前置依赖全部通过fixture实现;2.测试数据隔离,每条用例使用独立测试数据,或者执行完后清理脏数据,避免数据互相影响;3.禁止用例之间共享全局变量,防止变量污染导致的偶现失败;4.关键场景使用函数级fixture,每个用例执行前重新初始化环境,保证每次执行环境一致。2、批量执行用例

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论