Python自动化测试面试题及答案(真实职场版)_第1页
Python自动化测试面试题及答案(真实职场版)_第2页
Python自动化测试面试题及答案(真实职场版)_第3页
Python自动化测试面试题及答案(真实职场版)_第4页
Python自动化测试面试题及答案(真实职场版)_第5页
已阅读5页,还剩4页未读, 继续免费阅读

下载本文档

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

文档简介

Python自动化测试面试题及答案(真实职场版)一、Python基础高频面试题(自动化必备)1、列表和元组的区别?自动化中分别怎么用?答案:1)核心区别:列表list是可变的,支持增删改查;元组tuple是不可变的,定义后不能修改。2)性能:元组占用内存更小、运行更快,且可以作为字典key,列表不行。3)自动化实际用法:-列表:用来存测试数据、用例列表、接口返回的批量数据,需要后续增删数据的场景都用列表。-元组:用来存固定不变的配置数据,比如接口地址、请求头固定参数、测试环境配置,防止代码运行中被误改。2、字典的特性是什么?自动化中常用操作有哪些?答案:字典是键值对存储,key唯一且不可变,查询速度快,Python3.7+默认有序。自动化常用操作:1)存接口请求参数、响应结果、测试用例数据;2)get()方法取值,避免key不存在报错,比直接dict[key]更稳妥;3)keys()、values()、items()遍历数据,批量校验接口返回字段。3、Python深浅拷贝的区别?工作中什么时候会用到?答案:1)浅拷贝:只拷贝外层对象,内层嵌套对象还是引用原数据,修改嵌套数据会影响原对象。常用copy()、切片赋值。2)深拷贝:完全拷贝所有层级数据,新旧对象完全独立,互不影响,用copy.deepcopy()。3)工作场景:接口测试中,一个基础请求参数模板,多个用例需要修改局部参数,为了避免用例之间参数互相干扰,会用深拷贝复制模板参数。4、异常处理try-except怎么用?自动化为什么要加异常捕获?答案:基础语法:try写正常执行代码,except捕获指定异常,else无异常执行,finally无论是否异常都会执行。自动化使用原因:1)防止单条用例失败导致整个测试脚本崩溃终止;2)可以精准捕获超时、参数错误、断言失败等异常,自定义报错日志;3)结合截图、日志输出,方便定位bug,比程序直接报错退出更友好。5、for循环和while循环在自动化中的使用场景?答案:-for循环:主要用来遍历测试用例、遍历接口返回列表数据、批量执行多条用例、读取文件数据,是自动化最常用的循环。-while循环:多用于轮询场景,比如轮询接口状态(订单待支付、任务处理中)、等待页面元素加载、定时重试失败接口。二、自动化测试核心理论(面试必考)1、你理解的自动化测试是什么?适合做哪些场景?不适合哪些?答案:自动化测试就是用代码替代人工,自动执行测试用例、校验结果、生成测试报告。适合场景:1)重复执行的回归测试用例;2)接口稳定、需求变更少的模块;3)大批量数据校验、兼容性重复测试;4)压力测试、稳定性测试。不适合场景:1)需求频繁变动、版本迭代混乱的新功能;2)界面UI频繁改动的页面;3)一次性测试、少量简单用例;4)用户体验类主观测试。2、自动化测试用例设计原则是什么?答案:1)独立性:每条用例互不干扰,可单独执行,不依赖其他用例执行结果;2)简洁性:一个用例只测一个核心点,不要一个用例叠加多个校验点;3)可复用:公共步骤封装成方法,减少重复代码;4)全覆盖:覆盖正常场景、异常场景、边界值场景;5)可断言:所有用例必须有明确断言,不能只执行不校验结果。3、自动化测试的优缺点?工作中怎么落地提效?答案:优点:回归测试效率高、可重复执行、避免人工漏测误测、适合夜间无人值守执行、测试结果标准化。缺点:前期需要编写维护脚本、需求频繁变更会增加维护成本、无法替代人工体验测试。落地提效:优先稳定模块做自动化、封装公共方法、统一用例规范、接入CI自动执行、定期清理失效用例。三、接口自动化测试(主流面试重点)1、你用过哪些接口请求方式?get和post区别?答案:常用get、post、put、delete,对应查、增、改、删。get和post核心区别:1)get参数拼接在url上,post参数放在请求体;2)get有长度限制、不安全,适合查询数据;post无长度限制、相对安全,适合提交数据;3)get请求可缓存,post默认不缓存。2、requests库常用方法有哪些?工作中怎么封装接口请求?答案:常用方法:requests.get()、post()、put()、delete(),还有获取响应码、响应文本、json数据、请求头。封装思路(企业通用):1)单独封装一个http请求工具类,统一处理请求头、超时、异常、日志;2)区分环境,配置测试、预发、正式环境域名;3)统一处理token鉴权、接口重试、异常捕获;4)所有接口用例统一调用封装好的方法,不用重复写requests原生代码。3、接口断言你一般怎么写?举例常用断言方式答案:不会只断言状态码,会多层校验,更贴合实际测试:1)基础断言:响应状态码是否为200;2)业务断言:返回code、msg是否符合预期;3)数据断言:关键字段是否存在、字段值是否正确、数据长度、列表内容;4)边界断言:空数据、异常参数返回结果。常用语法:assert状态码==200、assertres["code"]==0、assert"data"inres。4、token鉴权怎么处理?多接口依赖怎么解决?答案:token处理:1)封装登录接口,执行用例前先调用登录获取token;2)将token存入全局变量或配置文件,所有需要鉴权的接口自动携带;3)增加token过期判断,自动重新登录刷新token。接口依赖:通过前置用例、fixture前置函数、全局参数传递,把上一个接口的返回值提取出来,传给下一个接口的请求参数,不写死参数,保证用例动态可执行。5、接口返回的json数据怎么提取嵌套字段?答案:先把响应数据转成字典格式,通过层级key逐层取值。如果是嵌套列表,通过索引+遍历取值。工作中复杂json会封装单独的解析方法,避免重复取值代码,同时加异常判断,防止字段不存在报错。四、pytest框架面试题(核心主流框架)1、pytest相比unittest有什么优势?答案:1)语法更简洁,不用强制写类和self,普通函数就能写用例;2)支持灵活的前置后置fixture,比unittest的setUp/tearDown更精细,可全局、模块、用例级别生效;3)原生支持参数化,数据驱动更方便;4)插件丰富,可生成精美报告、失败重跑、用例分级、跳过用例;5)执行规则宽松,自动识别用例文件、用例函数。2、pytestfixture的作用和常用作用域?答案:fixture是pytest的前置后置工具,用来准备测试数据、初始化环境、清理测试垃圾,替代传统的前置后置方法。常用作用域(优先级从低到高):1)function:默认,每个用例执行前后生效;2)class:每个测试类执行前后生效;3)module:每个py文件执行前后生效;4)session:整个测试会话全局生效,所有用例只执行一次(最常用,比如全局登录)。3、pytest参数化怎么用?工作中什么场景用?答案:通过@pytest.mark.parametrize实现,一组代码传入多组测试数据,自动生成多条用例。适用场景:登录账号密码对错测试、接口边界值测试、参数异常场景批量测试,大幅减少重复代码。4、pytest如何实现失败用例重跑?跳过用例?答案:1)失败重跑:安装pytest-rerunfailures插件,执行命令指定重跑次数,解决偶尔网络波动导致的偶现失败;2)跳过用例:使用@pytest.mark.skip、skipif,满足条件自动跳过,比如部分用例只在特定环境执行、版本迭代中未完成的功能暂时跳过。5、pytest.ini配置文件的作用?常用配置项?答案:pytest.ini是框架全局配置文件,统一管理执行规则,不用每次执行敲复杂命令。常用配置:指定用例目录、修改用例命名规则、配置日志级别、注册自定义标记、忽略指定文件、默认重跑、报告配置。五、自动化项目实战&问题排查(高阶面试)1、你的自动化项目架构是怎样的?答案:(职场标准答题,简洁通用)我目前的接口自动化项目采用分层架构,结构清晰、易维护:1)common公共层:封装http请求、日志、断言、读取文件、异常处理公共方法;2)config配置层:存放环境域名、账号密码、全局配置、token配置;3)data数据层:yaml/excel存放测试数据,实现数据和代码分离;4)api接口层:封装各个业务模块接口,统一管理接口地址、请求参数;5)testcase用例层:编写具体测试用例,调用接口和公共方法,添加断言;6)report报告层:存放测试报告、日志文件;7)入口文件:统一执行所有用例,配置执行规则、重跑、报告生成。2、自动化用例偶尔失败(偶现bug)怎么排查处理?答案:偶现失败不会直接认为是bug,按步骤排查:1)先看日志和响应数据,排查是网络波动、接口超时、token过期、数据污染导致;2)检查用例是否不独立,前后用例数据互相影响,比如新增数据未删除、状态未重置;3)针对超时问题加接口重试、延长等待时间;4)真实业务偶现问题,记录日志复现步骤,提bug给开发,持续跟进;5)修复后优化用例,避免后续再次偶现失败。3、如何解决自动化测试用例维护成本高的问题?答案:1)优先稳定模块做自动化,迭代频繁的新功能暂时不写,减少改代码频率;2)高度封装公共方法,接口参数、环境配置统一抽离,修改只需改配置不用改代码;3)保证用例独立性,单条用例失败不影响其他用例;4)定期维护脚本,迭代版本后清理失效用例、更新变更接口;5)数据代码分离,测试数据统一管理,修改数据不用动逻辑代码。4、你了解CI/CD吗?自动化怎么接入Jenkins?答案:CI是持续集成,代码提交后自动构建、自动跑测试;CD是持续部署。接入Jenkins流程:1)代码上传git仓库;2)Jenkins配置拉取git代码、配置Python环境、安装依赖包;3)配置执行命令,自动执行自动化脚本;4)执行完成后自动生成测试报告,配置邮件/企业微信推送结果;5)设置定时构建,每日夜间自动跑回归用例。5、接口测试中,如何处理接口加密、签名参数?答案:如果接口有加密、签名校验,会让开发提供加密算法、签名规则,我用Python复现对应的md5、sha256、aes加密逻辑,封装成公共方法。请求接口前自动生成签名、加密参数,不用手动拼接,全程代码自动处理,适配线上真实请求规则。六、手写代码面试题(实操必考)1、手写一个通用的requests请求封装方法参考答案:python

importrequests

classHttpRequest:

#通用接口请求封装

def__init__(self):

self.session=requests.Session()

defsend_request(self,method,url,data=None,json=None,headers=None,timeout=10):

"""

统一接口请求方法

:parammethod:请求方式

:paramurl:接口地址

:paramdata:表单参数

:paramjson:json参数

:paramheaders:请求头

:paramtimeout:超时时间

:return:响应对象

"""

try:

res=self.session.request(method=method.upper(),url=url,data=data,json=json,headers=headers,timeout=timeout)

returnres

exceptExceptionase:

print(f"接口请求异常:{e}")

returnNone

2、手写pytestfixture全局登录前置参考答案:python

importpytest

fromcommon.http_requestimportHttpRequest

@pytest.fixture(scope="session",autouse=True)

defget_token():

#全局登录获取token

login_url="https://xxx/login"

data={"username":"test","password":"123456"}

res=HttpRequest().send_request("post",login_url,json=data)

token=res.json()["data"]["token"]

#返回token供用例使用

return

温馨提示

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

最新文档

评论

0/150

提交评论