一文速成!Pytest自动化框架面试题,帮你全部搞定!
面试求职「面试试题小程序」 内容涵盖 测试基础、Linux操作系统、MySQL数据库、Web功能测试、接口测试、APPium移动端测试、Python知识、Selenium自动化测试相关、性能测试、性能测试、计算机网络知识、Jmeter、HR面试命中率杠杠的。大家刷起来…职场经验干货软件测试工程师简历上如何编写个人信息一周8个面试软件测试工程师简历上如何编写专业技能一周8个面试软件测试工程师简历上如何编写项目经验一周8个面试软件测试工程师简历上如何编写个人荣誉一周8个面试软件测试行情分享这些都不了解就别贸然冲了.软件测试面试重点搞清楚这些轻松拿到年薪30W软件测试面试刷题小程序免费使用永久使用很多同学用Pytest用了大半年fixture会写参数化会用跑用例也没问题。但你让他讲清楚原理讲清楚为什么这么设计就开始支支吾吾。面试官考Pytest考的不是你会不会用考的是你对框架的理解深不深。就好比你用了三年锤子面试官问你锤子的材料和结构你答不上来人家怎么判断你技术水平高不低今天就来整理一下Pytest框架的高频面试题帮你把这块彻底搞定。不贴大段代码就说清楚每道题该怎么答。一、Pytest基础原理1. Pytest是什么和unittest有什么区别这道题基本上必考但很多人答的很水。你要答出重点Pytest是Python最流行的测试框架之一兼容unittest写法但比unittest更简洁、更强大。具体区别在哪unittest是Python标准库自带的需要继承TestCase类断言要用self.assertEqual这种方式相对笨重。Pytest不需要继承任何类直接用assert就可以断言写法更加Pythonic而且支持丰富的插件生态。最关键的一点要说清楚Pytest有强大的fixture机制和参数化能力这是unittest不能比的。2. Pytest是怎么发现和收集测试用例的这道题考的是你对框架底层的理解。Pytest有一套默认的收集规则从当前目录递归查找文件名以test_开头或者_test结尾的文件会被识别为测试文件文件里以test_开头的函数和Test开头的类会被收集为测试用例。很多同学只知道test开头但不知道背后是怎么运行的。面试的时候说出这个规则并说明可以通过pytest.ini或者conftest.py来自定义收集规则一般就够了。3. conftest.py是什么有什么用这个几乎是必问题。conftest.py是Pytest的特殊配置文件不需要import就可以被同目录及子目录的测试文件自动识别。主要用来存放公共的fixture也可以做一些插件注册、钩子函数定义。重点说清楚它的作用域conftest.py文件放在哪个目录那个目录下的所有测试文件都能用到里面的fixture。项目里一般会有多个conftest.py分别管理不同层级的共享资源。二、Fixture这块问得最深也是最容易踩坑的4. 什么是fixturefixture的scope有哪几种fixture是Pytest中用来做测试前置和后置处理的机制就是测试用例运行前准备好环境运行后清理环境。scope控制的是fixture的生命周期一共四种function默认值每个测试用例执行一次class每个测试类执行一次module每个测试文件执行一次session整个测试会话执行一次也就是所有用例跑完才销毁实际项目里怎么用的你要能举例子说出来。比如数据库连接用session级别避免每个用例都建一次连接临时文件用function级别每次用例跑完就清理。这样说面试官才觉得你是真用过的。5. fixture的yield有什么作用这道题很多人答不好。yield把一个fixture分成了两个部分yield之前是前置操作yield之后是后置操作。这样就可以在同一个fixture里同时处理setUp和tearDown代码更清晰也不容易遗漏清理操作。答这道题的时候顺带提一句yield比return更推荐用在有资源清理需求的fixture里因为即使测试用例失败了yield后面的清理代码也会被执行更安全可靠。6. fixture之间可以互相调用吗可以。一个fixture的参数里可以直接传入另一个fixture的名字Pytest会自动处理依赖关系和执行顺序。这个机制让公共资源可以分层管理比如先建数据库连接再基于连接建表再基于表准备数据层层依赖很清晰。三、参数化用好了效率翻倍7. Pytest参数化怎么用参数化用的是pytest.mark.parametrize装饰器。作用是用一套测试逻辑跑多组数据不用写重复的用例。面试的时候不要只说就是加个装饰器传数据要说清楚它的好处减少重复代码、提高用例覆盖率、数据和逻辑分离。这才是面试官想听到的点。进阶一点可以提到参数化支持多个参数组合也支持和fixture配合使用可以做到数据驱动测试框架的核心功能。8. 参数化和数据驱动有什么关系这道题很多人分不清。参数化是Pytest的功能数据驱动是一种测试设计思路就是测试数据和测试脚本分离通过读取外部数据Excel、YAML、数据库来驱动测试执行。实现数据驱动可以在参数化里用代码读取外部文件的数据作为参数传入这样测试数据可以由非技术人员维护测试脚本由测试工程师维护两边互不影响。这个能说清楚面试官会觉得你理解了自动化框架设计的思路而不只是会写脚本。四、插件体系体现你用得深不深9. Pytest常用的插件有哪些这道题考的是你项目中实际用过什么。几个必须要提的pytest-html 或者 Allure生成测试报告pytest-xdist分布式并发执行测试用例提升执行效率pytest-rerunfailures失败用例自动重试降低因网络抖动导致的假失败pytest-ordering控制用例执行顺序每个插件说它解决了什么问题比单纯列名字有价值得多。10. Allure报告是怎么接入Pytest的这道题说步骤没太大意义重点是说出Allure和Pytest配合的价值Allure可以在用例里用装饰器添加测试步骤、描述、严重等级等元数据生成非常直观的HTML报告方便测试团队和产品、开发查看测试结果。还可以说说实际项目里是怎么把Allure报告集成到Jenkins流水线里的每次执行完自动生成报告、自动推送通知这样就把技术能力和工程落地结合起来了说服力强得多。五、进阶问题拉开差距的地方11. Pytest的钩子函数是什么用过哪些钩子函数是Pytest提供的一套扩展机制允许在测试生命周期的各个阶段插入自定义逻辑比如用例开始前、用例结束后、收集到用例时等等。实际用得比较多的是pytest_runtest_makereport用来在用例失败时截图或者保存日志pytest_collection_modifyitems用来对收集到的用例做排序或过滤pytest_configure做一些全局配置初始化能说出钩子函数说明你对框架的理解已经超过了大多数只会用的人。12. 如果测试用例执行顺序有依赖怎么处理这道题有点坑因为Pytest默认是按照文件和函数的定义顺序执行但不建议用例之间有依赖这是用例设计的问题。好的回答是先说清楚这个设计原则然后说如果业务流程测试必须有顺序可以用pytest-ordering插件控制或者把有依赖的用例放在同一个测试类里通过合理的前置fixture来共享状态而不是让用例之间直接传数据。这样回答既说明你懂用例设计规范又给出了实际解决方案面试官会对你印象好很多。Pytest这块的面试题说难不难说简单也不简单。大部分人会用但真正理解底层逻辑、能结合项目实际讲清楚的其实没多少。这就是差距所在。把今天这篇文章里的问题结合自己的项目经历认认真真梳理一遍面试时Pytest这块基本上能稳住。最后下方这份完整的软件测试视频教程已经整理上传完成需要的朋友们可以自行领取【保证100%免费】