Formula
python
循环控制
- continue: 跳过本次迭代,进入下一次
- break: 跳出当前最近一层循环
- return: 如果循环在函数里,它会结束整个函数,从而也结束循环
- raise: 抛出异常,中断当前流程,循环也会结束
- assert: 断言失败时抛 AssertionError,本质也是异常
- sys.exit(): 让整个 Python 程序/进程终止,并把退出码传给操作系统、shell、调度器或父进程。
- exit() / quit(): 交互式解释器里的辅助对象,也不是关键词,不建议在正式代码里用
语法糖
语法糖: 让代码写起来更爽、读起来更优雅的简化写法,没有改变底层逻辑。
| 语法糖 | 示例 | 本质 | 项目常见用途 | 注意事项 |
|---|---|---|---|---|
| 推导式 / 生成器表达式 | [u.name for u in users if u.active];{u.id: u for u in users};sum(i.price for i in items) |
循环 + append / yield | 数据清洗、过滤、字段提取、列表转字典、求和 | 复杂推导式拆成循环;生成器省内存 |
| 装饰器 | @retry(times=3);@timer;@lru_cache(maxsize=128);@app.get("/users") |
f = decorator(f) |
路由、重试、耗时统计、日志、权限、缓存 | 自定义装饰器加 functools.wraps |
| with 上下文管理器 | with open(path) as f:;with lock:;with db.transaction(): |
try/finally + __enter__/__exit__ |
文件、DB 事务、线程锁、临时目录、HTTP Session | 可自定义上下文管理器 |
| f-string | f"user_id={user_id}, cost={cost:.2f}ms" |
字符串格式化 | 日志、异常信息、调试输出 | 拼 SQL 不要直接拼用户输入,用参数化 |
| 解包 / 星号 | a, b = b, a;first, *rest = lines;User(**payload);{**default_config, **user_config} |
序列解包、可变参数、字典展开 | 多返回值、合并配置、动态传参 | 参数过多影响可读性 |
| 条件表达式 / 链式比较 | status = "ok" if resp.ok else "fail";if 0 <= index < len(items): |
表达式分支 / 比较展开 | 默认值、状态赋值、范围判断 | 嵌套三元表达式可读性差 |
海象运算符 := |
while chunk := f.read(8192):;if m := re.match(pattern, text): |
赋值表达式 | 边读边判断、正则匹配后直接使用 | 别滥用,过度使用降低可读性 |
| async / await | async def fetch():;await resp.json();async with |
协程 / 事件循环语法糖 | 异步爬虫、FastAPI 异步接口、并发 IO | 不要在 async 中调用阻塞 IO |
| @property / @classmethod / @staticmethod | @property def full_name;@classmethod;@staticmethod |
描述符 / 绑定方法 | ORM 计算属性、类方法、工具方法 | property 别写重逻辑 |
字典合并 \| |
config = base_config \| override_config |
dict 合并 | 配置合并 | Python 3.9+ |
| match / case | match command: case "start": ... |
结构化模式匹配 | 解析命令、协议消息、状态分支 | Python 3.10+,不必替代所有 if |
面向对象
http
Method
Q: 常见的HTTP请求格式有什么?GET和POST它们的功能点区别又有什么?
请求方法、url、请求头、请求体
| 方法 | 作用 |
|---|---|
| GET | 获取资源,查询 |
| POST | 提交数据,通常用于新增 |
| PUT | 整体更新/替换资源 |
| PATCH | 部分更新资源 |
| DELETE | 删除资源 |
| HEAD | 只获取响应头 |
| OPTIONS | 查询支持的方法,CORS 预检 |
| TRACE | 回显请求,诊断用,少用 |
| CONNECT | 建立隧道,常用于 HTTPS 代理 |
常见请求体数据格式 Content-Type:
application/jsonapplication/x-www-form-urlencodedmultipart/form-data,文件上传text/plainapplication/xml/text/xml
📌 GET与POST请求
1.参数传递方式
- GET: 参数通过URL的查询字符串传递(key=value形式),数据直接暴露在地址栏中。
- POST: 参数通过HTTP请求体传递,数据隐藏在请求体中,格式灵活(如JSON、表单数据),支持二进制数据上传(如文件)。
2.数据长度限制
- GET: 受浏览器和服务器限制,URL长度通常不超过2048字符(约2KB),超出部分可能被截断。
- POST: 数据长度理论上无限制,但服务器可能根据配置限制请求体大小,适合传输大量数据或文件。
3.安全性与幂等
- GET: 数据通过URL暴露,可以被截获;具有幂等性,即多次执行相同的请求结果相同。
- POST: 参数隐藏在请求体中,安全性相对get方式较高,但HTTP协议本身为明文传输,需结合HTTPS实现加密。
4.应用场景
- GET: 获取资源(如加载网页、查询商品列表)、数据量小且无需保密的场景(如分页参数)。
- POST: 提交表单、上传文件或复杂数据结构(如JSON数组)、执行敏感操作(如支付、删除数据)。
5.缓存
- GET: 可被浏览器/代理缓存
- POST: 默认不缓存
测试
功能测试&接口测试
Q: 登录功能和登录接口在测试设计时的区别
- 登录功能测试,通常指从用户视角测完整的登录业务流程,更偏用户场景和体验。
- 登录接口测试,通常指绕过 UI,直接对登录 HTTP 接口/后端服务做测试,更偏服务逻辑、协议、安全和性能。
接口测试可以更早介入、更细、更快,但不能替代功能测试;功能测试通过也不代表接口健壮。
两者是互补关系,设计时一个从“用户怎么用”出发,一个从“接口怎么调、后端怎么处理”出发。
登录功能测试设计
偏黑盒、端到端、用户体验,设计依据是需求、原型、用户场景。
关注点包括:
- 页面元素: 输入框、密码掩码、验证码、登录按钮、忘记密码、记住我、第三方登录。
- 正常场景: 账号密码正确,跳转首页,token/session 生效。
- 异常场景: 账号不存在、密码错误、验证码错误、账号锁定、网络异常。
- 交互体验: 回车登录、Tab 键、错误提示文案、按钮防重复点击、加载状态。
- 兼容性: 浏览器、分辨率、移动端、键盘、自动填充。
- 安全体验: 密码是否明文、退出后回退是否还能进、多端互踢提示。
- 性能感受: 登录耗时、弱网表现。
用例设计常用: 场景法、等价类、边界值、状态迁移、UI检查
登录接口测试设计
偏后端、协议、数据、逻辑,设计依据是接口文档、数据模型、协议规范。
关注点包括:
- 接口契约: URL、Method、Content-Type、请求头、请求参数、响应结构。
- 参数校验: 必填、类型、长度、边界、空值、特殊字符、多余字段。
- 业务逻辑: 账号密码正确/错误、账号不存在、锁定、验证码、token 生成。
- 协议层: HTTP 状态码、业务错误码、响应字段、Cookie/Set-Cookie。
- 安全: SQL 注入、XSS、暴力破解、限流、验证码重放、密码传输加密、token 越权。
- 性能: 并发登录、QPS、响应时间、错误率、资源占用。
- 依赖与 mock: DB、Redis、第三方登录、短信服务。
- 自动化: 数据驱动、断言响应体/DB/缓存/日志。
用例设计常用: 参数组合、边界值、异常注入、契约测试、安全用例、性能场景
用例设计
Q: 针对移动端的微信中的聊天功能,你会从哪些维度来设计测试用例?
| 维度 | 核心测试点 | 记忆 |
|---|---|---|
| 1. 功能 | 消息类型、收发、状态、操作、会话、群聊 | 按消息生命周期全覆盖,核心是不丢、不重、不乱序 |
| 2. UI/交互 | 键盘、输入框、长按菜单、动画、暗黑、横竖屏、字体 | 看得见、点得动、反馈清楚 |
| 3. 兼容性 | iOS/Android/鸿蒙、机型、分辨率、折叠屏、微信版本、多语言时区 | 多系统、多机型、多版本都跑通 |
| 4. 网络 | Wi-Fi/4G/5G、弱网、无网、飞行模式、切换、丢包、重连、离线拉取 | 弱网切换不丢消息 |
| 5. 性能 | 大群高频、大文件、长视频、历史加载、CPU、内存、耗电、流量、卡顿 | 压力下仍流畅稳定 |
| 6. 安全与隐私 | 加密、本地存储、多设备登录、退出、权限、黑名单、举报、敏感词、防诈骗 | 不泄露、可管控、防风险 |
| 7. 异常与中断 | 来电、短信、闹钟、低电量、锁屏、切后台、杀进程、崩溃恢复、草稿 | 中断后能恢复 |
| 8. 多端同步与一致性 | 手机/PC/iPad/网页;消息、未读、撤回、删除、草稿、置顶、免打扰同步 | 多端一致,不丢不重不乱序 |
| 9. 通知 | 前台/后台、免打扰、声音震动、通知栏回复、点击跳转、聚合、延迟丢失 | 通知触达,且不打扰 |
| 10. 权限与系统集成 | 相机、相册、麦克风、位置、通知、后台刷新、电池优化、分享、剪贴板 | 系统权限和分享打通 |
| 11. 易用性/可访问性/国际化 | 无障碍、字体放大、语音播报、色弱、左手模式、多语言、RTL、时区 | 人人可用,跨地区可用 |
| 12. 升级/回归/稳定性 | 微信升级、系统升级、数据迁移、旧版兼容、灰度、长时间运行、反复切换 | 升级不坏,长稳可靠 |
优先级:
P0: 功能、网络、异常、多端同步;
P1: 兼容、性能、通知、权限;
P2: UI、易用性、升级回归。