面灵AI→

汇川技术测试开发一面:登录用例设计与Python八股

轮次
一面
时间
2026-09
来源
牛客网

《面试题目》

  1. 自我介绍
  2. 实验室项目深挖
  3. 接口自动化项目深挖
  4. 场景题:Web 界面登录功能,如何去设计测试用例?
  5. Python 八股:continue 和 break 的区别
  6. 深拷贝和浅拷贝的区别
  7. 多线程和多进程的异同点
  8. 实习经历拷问

《参考解析》

登录功能测试用例设计:这题要按分类维度铺开,别只想到「输对密码能进」。至少覆盖六层:功能上,正确的用户名密码能登录,用户名错、密码错、两者都错分别有对应提示,空输入、只填空格、超长输入(比如 200 字符)、大小写敏感、前后带空格、特殊字符与中文用户名;安全上,密码框是否掩码、是否明文传输(HTTPS)、连续失败是否有锁定或验证码、是否可暴力破解、错误提示是否泄露「用户不存在」这类信息、SQL 注入与 XSS 载荷、登录后 session/token 是否重置、退出登录后旧 token 是否失效;会话上,勾选「记住我」的有效期、浏览器关闭后是否保持、多标签页与多设备同时登录、token 过期后自动跳转;交互与 UI 上,加载态、重复点击提交是否只发一次请求、回车能否提交、Tab 键顺序、错误提示的文案与位置;兼容与性能上,主流浏览器与移动端分辨率、弱网与超时重试、并发登录的响应时间;数据上,登录日志是否记录、失败次数是否入库。最后补一句取舍:优先保证核心路径 + 安全相关的用例,UI 细节按迭代节奏补。

break 与 continue:break 直接终止整个循环,跳到循环体之后;continue 只结束当前这一轮,回到循环条件判断进入下一轮。两者都只作用于最内层循环,在嵌套循环里想跳出外层需要标志位或 for...else 配合。注意 Python 里 for...else 的 else 在循环正常结束(没被 break)时执行,常被用在「找没找到」的判断上。

深拷贝与浅拷贝:浅拷贝(copy.copy、list[:]、dict.copy())只复制最外层容器,内部的可变对象仍是同一份引用;深拷贝(copy.deepcopy)递归复制所有层级,两棵树完全独立。典型坑:

import copy
a = [[1, 2], [3, 4]]
b = copy.copy(a)
b[0].append(99)   # a[0] 也变成 [1, 2, 99]
c = copy.deepcopy(a)
c[0].append(7)    # a 不受影响

还要知道两点:不可变对象(int、str、tuple 元素不可变时)浅拷贝可能直接返回原对象引用;deepcopy 遇到循环引用靠 memo 字典处理,代价明显高于浅拷贝,所以只有在确实要整体隔离时才用。

多线程与多进程:相同点是都能并发、都要处理共享资源的同步问题、都有创建和调度开销。区别要抓四条:一是内存模型,线程共享同一进程的地址空间,进程之间相互隔离;二是 CPython 的 GIL 让多线程无法并行跑纯 Python 的 CPU 密集代码,多进程可以真正多核并行;三是开销与通信,线程创建/切换便宜、共享变量最方便(但要加锁),进程创建/销毁贵、通信要走 Queue/Pipe/共享内存或 socket;四是健壮性,一个线程崩溃可能拖垮整个进程,子进程崩溃通常不影响父进程。所以工程口径是:IO 密集型(网络请求、文件、数据库)用多线程或协程,CPU 密集型(图像处理、加解密、大批量计算)用多进程。

项目与实习深挖的准备:面试官会顺着接口自动化项目问到框架分层、用例管理、断言设计、数据驱动、报告生成、CI 集成、失败重试与环境切换。提前准备好「为什么这么做」和「遇到过什么坑、怎么解决、量化结果」三段式,比背框架 API 有用。实验室项目要能说清自己负责的模块边界,不要把所有工作都算在自己头上。