1、如何查询表中的第x到y条记录?
SELECT * FROM table_name LIMIT [offset], [count]; (这个有有印象没把握当时没说)
SELECT * FROM table_name LIMIT [count] OFFSET [count];
2、请介绍一个你测过的项目,越详细越好
(介绍项目我一般都不太介绍的好,可能记忆太差了,做完后项目的细节不太记得住,不过后来我有说背不出项目细节,有好心人提醒我现在的项目介绍不是介绍项目,是要你介绍你在当时的炫技/成果)
补充一个小伙伴提供得参考模板(啊……我觉得对我还是有难度,你们有帮助得可以试试):
开始讲项目,之后讲技术选型,之后讲理论基础概念、设计分层,具体操作细节,实际操作中的问题分析和解决,结论
3、自动化的角色,搭建自动化用了哪些包
(这里也没记得几个说,英语不太好……问接口请求担心把request和response的英文搞混,java以前开发的时候2个都会有写,知道是请求,面试的时候应该是说对了)
pytest
pytest-html
pytest-xdist
pytest-rerunfailures
pytest-base_url
allure-pytest
pytest-result-log
pytest-order
redis
pyyaml
deepdiff
jsonpath
pymysql
4、写一个装饰器
(当时没答上来,之前的博客文章里其实有写,不过基础的没常复习巩固也是自己的问题)
# Python 普通装饰器
def my_decorator(func):
def wrapper(*args, **kwargs):
print("执行前操作")
result = func(*args, **kwargs)
print("执行后操作")
return result
return wrapper
@my_decorator
def my_function():
print("函数执行")
另外补充下:装饰器本质上是Python的一个语法糖,它允许我们在不修改原函数代码的情况下,为函数增加新功能。它的核心是一个‘高阶函数’,接收一个函数作为参数,并返回一个新函数。
比如在Pytest中,我们常用的 @pytest.fixture 就是一个装饰器,它能把一个普通函数标记为一个夹具,用来提供测试数据或准备测试环境。(害专业术语还是要背啊……仅看得懂,可以差不多ai下语法规则写,在面试的时候不够……)
5、conftest这个也问了,具体怎么问的不记得了
(当时我当时应该是回答了类似作用域,现在联系4和5题来看可能是考官希望我自己说出Fixture或者还是希望继续提醒我可以想起装饰器……)
conftest.py 是Pytest的共享配置中心,主要用来全局管理Fixture和插件。
比如可以在里面写这些:
import pytest
# @pytest.fixture(scope='package')
@pytest.fixture
def f():
print("前置操作,用例执行之前,自动执行") # 前置操作,用例执行之前,自动执行
yield "返回值,供用例使用" # 返回值,供用例使用
print("后置操作,用例执行之后,自动执行") # 后置操作,用例执行之后,自动执行
fixture 的 scope 管‘执行次数’,conftest 管‘可见范围’;conftest 是 fixture 的‘全局仓库’,能让单个文件的 fixture 变成跨文件可用,且不改变 fixture 本身的 scope 规则。
6、项目哪里用到了Redis?Redis的作用?测试Redis要关注什么?
(在我描述的上一个项目里面我并没有深入到Redis这块,导致可能回答的不太好,不过我有提到别的项目中有接触到的相关Redis的部分,当时的确没想这么多,我知道理论知识,但是实际遇到的可能就是部分……哎,事后回想可能他要的答案是跟7有关的性能这块?)
【作用】
高性能:内存操作,读写速度极快
丰富数据结构:支持多种数据类型的原子操作
持久化:数据可持久化到磁盘
高可用:支持主从复制、哨兵模式、集群模式
原子性:单个操作是原子的,支持事务
发布订阅:支持消息广播
Lua脚本:支持复杂逻辑的原子执行
【测试 Redis 时需要关注】
功能正确性:数据操作、事务、过期策略
性能表现:读写延迟、并发处理、吞吐量
可靠性:持久化、故障恢复、数据一致性
容量管理:内存使用、Key数量、数据清理
安全性:认证授权、命令权限、网络安全
集成测试:与应用的正确交互
监控告警:关键指标监控、异常检测
7、也问了性能,和关注的指标
(这块我应该回答的也不太好,性能这个我就做过简单的报告和验收交付的那种,具体规划硬件服务器啥的没搞过。之后回答的也不是很好,开始提到了中位数、90%、99%,开始说了是响应时间,再次问慌了想着难道是响应……)
打开我的jmeter再看了下,结合服务器那边要看的指标有:
CPU使用率、内存使用率、磁盘I/O、网络I/O、吞吐率TPS(QPS\RPS)、并发用户数、点击率、平均值、中位数、百分位数(90%、95%、99%)、最大值、最小值、异常、吞吐量、接收、发送
今天又是一次面试机会,感觉可能又挂了,除了项目得介绍,还记得得问题有:
8、pytest得特性
没回答出来(这题死的一点不冤,真的一点没头绪),面试结束之后问了下ai(看完答案,能认识一些,但是并不知道他叫特性,全得也背不出)
一、基础特性
| 特性类别 | 特性名称 | 语法示例 | 功能描述 | 应用场景 |
|---|---|---|---|---|
| 测试发现 | 自动发现 | - | 自动识别 test_*.py、*_test.py 文件 | 零配置启动测试 |
| 类方法发现 | TestClass.test_method() | 识别类中的测试方法 | 面向对象测试 | |
| 断言系统 | 原生断言 | assert expr | 使用 Python 原生 assert 语句 | 所有测试断言 |
| 智能重写 | - | 失败时显示详细上下文信息 | 调试和问题定位 | |
| 异常断言 | pytest.raises(ValueError) | 验证代码抛出指定异常 | 异常流程测试 | |
| 标记系统 | 跳过测试 | @pytest.mark.skip | 无条件跳过测试 | 未实现功能 |
| 条件跳过 | @pytest.mark.skipif | 条件满足时跳过 | 版本依赖测试 | |
| 预期失败 | @pytest.mark.xfail | 标记预期失败的测试 | 已知缺陷管理 | |
| 参数化 | @pytest.mark.parametrize | 为测试提供多组参数 | 数据驱动测试 |
二、Fixture 系统
| 特性类别 | 特性名称 | 语法示例 | 功能描述 | 应用场景 |
|---|---|---|---|---|
| 基础 Fixture | 函数作用域 | scope='function' | 每个测试函数执行一次 | 默认作用域 |
| 类作用域 | scope='class' | 每个测试类执行一次 | 类级别共享 | |
| 模块作用域 | scope='module' | 每个模块执行一次 | 模块级别共享 | |
| 包作用域 | scope='package' | 每个包执行一次 | 包级别共享 | |
| 会话作用域 | scope='session' | 整个测试会话一次 | 全局共享资源 | |
| 高级 Fixture | 自动使用 | autouse=True | 自动应用于所有测试 | 全局设置/清理 |
| 参数化 Fixture | - | Fixture 接收参数 | 动态资源配置 | |
| Fixture 工厂 | 返回函数而非值 | 延迟创建或动态生成 | 复杂对象创建 | |
| 依赖管理 | Fixture 依赖 | def test(fixture1, fixture2) | Fixture 间依赖注入 | 资源组合 |
| Yield Fixture | yield resource | 支持 setup/teardown | 资源生命周期 | |
| 最终化器 | request.addfinalizer | 注册清理函数 | 复杂清理逻辑 |
三、参数化测试
| 特性类别 | 特性名称 | 语法示例 | 功能描述 | 应用场景 |
|---|---|---|---|---|
| 基础参数化 | 单参数 | parametrize("input", values) | 单个参数多值测试 | 简单数据驱动 |
| 多参数 | parametrize("a,b", values) | 多个参数组合测试 | 组合测试场景 | |
| 嵌套参数化 | 多个装饰器 | 多个参数化装饰器叠加 | 多维参数组合 | |
| 高级参数化 | 动态参数 | 使用函数生成参数 | 运行时生成测试数据 | 动态测试场景 |
| ID 自定义 | ids=lambda val: str(val) | 自定义测试用例显示名 | 提升报告可读性 | |
| 间接参数 | indirect=True | 参数传递给 Fixture | Fixture 参数化 | |
| 参数化类 | 类装饰器 | 整个类参数化 | 类级别数据驱动 |
四、插件与扩展
| 插件类别 | 插件名称 | 主要功能 | 应用场景 | 官方/第三方 |
|---|---|---|---|---|
| 执行优化 | pytest-xdist | 并行和分布式测试 | 加速测试执行 | 官方 |
| pytest-repeat | 重复执行测试 | 排查偶现问题 | 第三方 | |
| pytest-rerunfailures | 失败重试 | 处理不稳定测试 | 第三方 | |
| 覆盖率分析 | pytest-cov | 代码覆盖率统计 | 质量门禁 | 第三方 |
| pytest-mutagen | 变异测试 | 测试有效性评估 | 第三方 | |
| 报告生成 | pytest-html | HTML 测试报告 | 非技术人员查看 | 第三方 |
| pytest-allure | Allure 报告集成 | 企业级报告 | 第三方 | |
| pytest-json-report | JSON 格式报告 | CI/CD 集成 | 第三方 | |
| 框架集成 | pytest-django | Django 集成测试 | Django 项目 | 第三方 |
| pytest-flask | Flask 集成测试 | Flask 项目 | 第三方 | |
| pytest-asyncio | 异步测试支持 | asyncio 项目 | 第三方 | |
| 数据与 Mock | pytest-mock | Mock 和 Patch 集成 | 单元测试 | 第三方 |
| pytest-datadir | 测试数据文件管理 | 文件数据测试 | 第三方 | |
| pytest-freezegun | 时间模拟 | 时间相关测试 | 第三方 |
五、配置与钩子
| 配置类别 | 配置项 | 配置示例 | 功能描述 | 应用场景 |
|---|---|---|---|---|
| 配置文件 | pytest.ini | [pytest] 段 | 主配置文件 | 项目级配置 |
| pyproject.toml | [tool.pytest.ini_options] | 现代配置格式 | 新项目推荐 | |
| setup.cfg | [tool:pytest] 段 | 兼容性配置 | 传统项目 | |
| 命令行选项 | 详细程度 | -v, -vv, -q | 控制输出详细程度 | 调试/简洁输出 |
| 回溯信息 | --tb=style | 控制失败回溯格式 | 错误信息定制 | |
| 测试选择 | -k expression | 关键字选择测试 | 快速运行子集 | |
| 标记过滤 | -m marker | 按标记过滤测试 | 分类执行 | |
| 钩子函数 | 配置钩子 | pytest_configure | 配置初始化后调用 | 全局初始化 |
| 收集钩子 | pytest_collection_modifyitems | 修改收集的测试项 | 测试过滤/排序 | |
| 执行钩子 | pytest_runtest_* | 测试执行各个阶段 | 执行监控 | |
| 报告钩子 | pytest_terminal_summary | 终端报告生成 | 自定义报告 |
六、企业级特性
| 特性类别 | 特性名称 | 功能描述 | 技术价值 | 业务价值 |
|---|---|---|---|---|
| 并发执行 | 多进程并行 | -n auto 或指定数量 | 充分利用多核 CPU | 缩短测试时间 |
| 分布式测试 | --dist=each | 多机分布式执行 | 超大规模测试 | |
| 负载均衡 | 自动分配测试任务 | 优化资源利用 | 成本优化 | |
| 测试质量 | 失败优先 | --ff, --lf | 优先运行上次失败的测试 | 快速反馈 |
| 测试排序 | --order-dependencies | 控制测试执行顺序 | 复杂流程测试 | |
| 超时控制 | --timeout=300 | 设置测试超时时间 | 防止死循环 | |
| 集成能力 | CI/CD 集成 | Jenkins, GitLab CI 等 | 自动化流水线集成 | DevOps 实践 |
| 监控集成 | Prometheus, Grafana | 测试指标监控 | 质量趋势分析 | |
| 告警系统 | 测试失败自动通知 | 及时问题响应 | 生产保障 |
七、性能特性
| 性能维度 | 优化特性 | 实现方式 | 性能提升 | 适用场景 |
|---|---|---|---|---|
| 启动速度 | 惰性导入 | 延迟加载测试模块 | 减少初始内存占用 | 大型测试套件 |
| 缓存机制 | .pytest_cache 目录 | 避免重复计算 | 增量测试 | |
| 执行速度 | 测试分片 | 按模块/目录分组执行 | 并行化基础 | 分布式测试 |
| 智能跳过 | 条件判断提前跳过 | 减少无效执行 | 环境依赖测试 | |
| 内存优化 | 资源复用 | Fixture 作用域管理 | 减少重复创建 | 资源密集型测试 |
| 及时清理 | yield 和 finalizer | 避免内存泄漏 | 长期运行测试 |
八、兼容性与标准
| 兼容维度 | 支持特性 | 说明 | 版本要求 | 迁移路径 |
|---|---|---|---|---|
| Python 版本 | 3.5+ | 完全支持 | PyTest ≥ 5.0 | 向下兼容 |
| 2.7 | 有限支持 | PyTest ≤ 4.6 | 建议升级 | |
| 测试框架 | unittest | 完全兼容 | 所有版本 | 无缝迁移 |
| doctest | 集成支持 | 所有版本 | 直接运行 | |
| nose | 兼容模式 | 所有版本 | 逐步迁移 | |
| 操作系统 | Windows | 完全支持 | 所有版本 | 平台无关 |
| Linux | 完全支持 | 所有版本 | 平台无关 | |
| macOS | 完全支持 | 所有版本 | 平台无关 |
九、开发体验特性
| 体验维度 | 特性名称 | 功能描述 | 开发者价值 | 示例 |
|---|---|---|---|---|
| 调试支持 | PDB 集成 | --pdb 失败时进入调试 | 快速问题定位 | 交互式调试 |
| 输出捕获 | 控制 stdout/stderr 输出 | 清洁的测试输出 | 日志管理 | |
| 详细追踪 | --trace 跟踪执行流程 | 理解测试执行 | 流程分析 | |
| 报告体验 | 色彩输出 | 终端彩色输出 | 直观结果展示 | 红/绿高亮 |
| 进度显示 | 实时显示测试进度 | 执行状态感知 | 进度条 | |
| 耗时统计 | 显示测试执行时间 | 性能分析 | 慢速测试识别 | |
| IDE 集成 | VS Code | 官方扩展支持 | 编辑器内测试 | 一键运行 |
| PyCharm | 深度集成 | 专业 IDE 支持 | 图形化界面 | |
| Jupyter | Notebook 支持 | 交互式测试 | 数据科学 |
十、安全与维护
| 安全维度 | 特性/实践 | 描述 | 安全等级 | 实施建议 |
|---|---|---|---|---|
| 代码安全 | 依赖检查 | 定期安全漏洞扫描 | 高 | 自动化扫描 |
| 权限控制 | 测试环境访问控制 | 中 | 最小权限原则 | |
| 数据隔离 | 测试数据与生产隔离 | 高 | 环境分离 | |
| 维护保障 | 向后兼容 | 主要版本保持兼容 | 高 | 平滑升级 |
| 长期支持 | LTS 版本维护 | 高 | 生产环境使用 | |
| 社区支持 | 活跃的 Issue 处理 | 中 | 及时更新 | |
| 质量保障 | 测试覆盖 | 强制覆盖率要求 | 中 | CI 门禁 |
| 代码审查 | 测试代码同行评审 | 高 | 流程化 | |
| 文档完整 | 完整的 API 文档 | 高 | 持续更新 |
特性使用统计(2023年调研数据)
| 特性类别 | 使用率 | 满意度 | 学习曲线 | 团队采用建议 |
|---|---|---|---|---|
| 基础断言 | 100% | 9.5/10 | 低 | 必须掌握 |
| Fixture 系统 | 85% | 9.2/10 | 中 | 核心技能 |
| 参数化测试 | 78% | 9.0/10 | 中 | 推荐掌握 |
| 标记系统 | 92% | 8.8/10 | 低 | 必须掌握 |
| 插件扩展 | 65% | 8.5/10 | 中高 | 按需学习 |
| 钩子函数 | 28% | 8.0/10 | 高 | 高级主题 |
| 并行执行 | 45% | 8.7/10 | 中 | 性能优化时采用 |
*数据来源:2023年 Python 开发者调查(n=2,500+)*
总结:PyTest 核心价值矩阵
| 价值维度 | 具体体现 | 对开发者的价值 | 对企业的价值 |
|---|---|---|---|
| 生产力 | 简洁的 API,自动发现 | 减少样板代码,专注业务逻辑 | 提升开发效率,缩短交付周期 |
| 可维护性 | 模块化 Fixture,清晰结构 | 易于理解和修改测试代码 | 降低维护成本,提高代码质量 |
| 可扩展性 | 插件架构,钩子系统 | 满足定制化需求 | 适应业务变化,技术债务可控 |
| 可靠性 | 稳定执行,完善错误处理 | 信任测试结果 | 保障产品质量,减少线上事故 |
| 协作性 | 标准化输出,集成友好 | 团队协作顺畅 | 促进 DevOps 文化,提升协作效率 |
看着这么多特性本来感觉记不住想放弃了,突发奇想跟ai说了下记不住这么多哎有没有什么好办法让我也能说上几句……ai给了个「3+2」饼干记忆,感觉好像我又能努力下说几句了:
- 3 个核心:极简用例(原生断言)、Fixture(模块化夹具)、参数化(数据驱动);
- 2 个进阶:丰富插件、灵活执行控制(并行 / 跳过 / 重试);
867

被折叠的 条评论
为什么被折叠?



