1、请进行自我介绍
背景:
- 3年软件测试经验,熟悉功能、接口、自动化测试,主导过电商/金融项目全流程测试。
- 技术栈:Python + Selenium/Requests(UI/接口自动化)、JMeter(性能)、Postman/Charles(抓包调试)。
核心能力:
- 用例设计:熟练运用等价类、边界值等方法,设计高覆盖率的测试用例。
- 缺陷挖掘:擅长定位前后端交互问题(如接口超时、数据不一致)。
- 效率提升:通过自动化脚本(Pytest+Allure)减少60%回归测试时间。
项目亮点:
- 在XX项目中,通过参数化+数据驱动测试,发现支付模块的并发扣款BUG,提升系统可靠性。
职业态度:
- 严谨细致,注重团队协作,持续学习新技术(如CI/CD集成测试)。
结束语:
希望用我的经验为贵团队的质量保障贡献力量!
(可根据实际经历调整技术栈和项目细节)
2、软件测试的流程有哪些
1. 需求分析
- 目标:理解需求文档(PRD/用户故事),明确测试范围。
- 输出:测试范围清单、需求疑问点(与产品/开发确认)。
2. 测试计划
- 内容:
- 测试目标、资源分配(人员/工具)。
- 测试策略(功能/性能/安全测试)。
- 进度安排(冒烟测试→系统测试→回归测试)。
- 输出:《测试计划》文档。
3. 测试设计
- 方法:等价类、边界值、判定表等(参考前文)。
- 输出:
- 测试用例(Excel/XMind/TestLink)。
- 自动化脚本(如Selenium/Pytest)。
4. 测试环境搭建
- 硬件/软件:部署测试服务器、数据库、依赖服务。
- 数据准备:基础数据(如测试账号)、Mock服务。
5. 测试执行
- 阶段:
- 冒烟测试:快速验证核心功能是否可测。
- 系统测试:全面执行测试用例,记录缺陷(Jira/Bugzilla)。
- 回归测试:修复缺陷后验证,确保无副作用。
- 输出:测试执行记录、缺陷报告。
6. 缺陷管理
- 流程:提交→分配→修复→验证→关闭。
- 工具:Jira、禅道、Bugzilla。
7. 测试报告
- 内容:
- 测试覆盖率、通过率、缺陷统计。
- 剩余风险与建议(如未覆盖场景)。
- 输出:《测试总结报告》。
8. 测试收尾
- 归档:用例、脚本、文档入库。
- 复盘:分析测试效率与缺陷遗漏原因。
不同模型中的测试流程
- 瀑布模型:严格按阶段执行(需求→设计→执行→报告)。
- 敏捷模型:
- 每个迭代(Sprint)重复测试流程。
- 持续测试(CI/CD流水线中自动化验证)。
核心目标:尽早发现缺陷,确保质量达标。
3、软件测试的设计方法有哪些?
1. 黑盒测试方法
- 等价类划分:将输入数据分为有效/无效类(如用户名:合法字符、超长、空值)。
- 边界值分析:测试边界及附近值(如输入框允许1~100,测0/1/2/99/100/101)。
- 判定表:组合多个输入条件(如登录:用户名对/错 + 密码对/错 → 4种组合)。
- 因果图:分析输入与输出的因果关系,生成测试用例。
- 状态转换:测试系统状态变化(如订单状态:未支付→已支付→已发货)。
- 错误推测:基于经验猜测易错点(如输入特殊字符、重复提交)。
2. 白盒测试方法
- 语句覆盖:确保每条代码至少执行一次。
- 分支覆盖:覆盖所有if-else分支(如
if (x>0)测x>0和x≤0)。 - 路径覆盖:覆盖所有可能的代码路径(复杂场景下可能不可行)。
3. 基于经验的测试
- 探索性测试:边测试边设计用例,适合敏捷快速迭代。
- checklist测试:根据常见缺陷列表逐项检查(如兼容性、安全性)。
4. 其他专项方法
- 数据驱动测试:通过外部数据(CSV/Excel)批量生成用例。
- 关键字驱动测试:用关键字描述操作(如
输入|用户名|admin),实现脚本与数据分离。
如何选择方法?
- 功能测试:等价类 + 边界值 + 判定表(覆盖输入组合)。
- 复杂逻辑:状态转换 + 因果图(如订单流程)。
- 代码级验证:分支覆盖 + 路径覆盖(单元测试)。
- 快速验证:探索性测试 + checklist(时间紧张时)。
示例:
测试登录功能:
- 等价类:有效用户名(字母)、无效用户名(特殊字符)。
- 边界值:用户名长度(最小1字符,最大20字符)。
- 判定表:组合用户名对/错 + 密码对/错 → 验证提示信息。
核心目标:用最少用例覆盖最多场景,高效发现缺陷。
4、Selenium是如何进行自动化测试的?(你是如何用selenium进行自动化测试的?)
1. 环境搭建
pip install selenium pytest pytest-html webdriver-manager
2. 编写测试脚本
示例:登录测试
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 初始化浏览器(自动管理驱动)
driver = webdriver.Chrome()
# 打开页面并操作
driver.get("https://example.com/login")
driver.find_element(By.ID, "username").send_keys("admin")
driver.find_element(By.ID, "password").send_keys("123456")
driver.find_element(By.XPATH, "//button[text()='登录']").click()
# 显式等待 + 断言
try:
WebDriverWait(driver, 10).until(
EC.text_to_be_present_in_element((By.ID, "welcome"), "admin")
)
print("✅ 登录成功")
except Exception as e:
print(f"❌ 登录失败: {e}")
driver.save_screenshot("login_fail.png")
# 关闭浏览器
driver.quit()
3. 关键技巧
- 元素定位:优先用
ID/name,复杂元素用XPath/CSS - 等待策略:
# 显式等待(推荐) WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "button"))) # 隐式等待(全局生效) driver.implicitly_wait(5) - Page Object模式:分离页面对象和测试逻辑
# pages/login_page.py class LoginPage: def __init__(self, driver): self.driver = driver self.username = (By.ID, "username") def input_username(self, text): self.driver.find_element(*self.username).send_keys(text) # tests/test_login.py def test_login(): page = LoginPage(driver) page.input_username("admin")
4. 执行与报告
# 运行测试并生成HTML报告
pytest test_login.py --html=report.html
# 多浏览器测试(需配置Selenium Grid)
pytest test_login.py --browser=firefox
5. 常见问题解决
- 元素找不到:检查是否在iframe中,或增加等待时间
- 跨域限制:使用
driver.execute_script("return localStorage.token")绕过 - 验证码处理:临时屏蔽测试环境验证码,或调用OCR服务
核心流程:
定位 → 操作 → 断言 → 报告
适用场景:Web UI回归测试、兼容性测试、数据驱动测试(结合CSV/Excel)
5、Fiddler工具在软件测试中有什么作用(你在软件测试中是如何使用fiddler这个工具的?)
Fiddler 是一款网络调试代理工具,主要用于监控、分析和调试客户端与服务器之间的HTTP/HTTPS通信。它通过充当中间人(Man-in-the-Middle)的角色,捕获所有经过的请求和响应数据,帮助开发者排查问题、优化性能或分析协议。
Fiddler 的核心功能:
-
抓包监控:捕获所有HTTP/HTTPS请求和响应,包括Web、移动端、桌面应用等;支持查看请求头、响应体、状态码、Cookies等详细信息。
-
性能分析:统计请求耗时、传输数据大小,识别慢请求;提供瀑布流视图(Timeline)分析加载顺序。
-
请求篡改与调试:修改请求参数(如URL、Header、Body)并重发(AutoResponder或断点功能);模拟弱网环境(Rules > Performance > Simulate Modem Speed)。
-
HTTPS解密:配置解密HTTPS流量(需安装Fiddler根证书)。
-
自动化与扩展:支持脚本(FiddlerScript)扩展功能,或与其他工具(如Postman)联动。
Fiddler在软件测试中的作用:
-
接口测试:抓取API请求/响应,验证参数、状态码、返回数据是否正确;检查接口是否符合文档规范(如字段类型、格式)。
-
性能测试:分析请求耗时、资源大小,定位慢接口或冗余请求;模拟弱网(Rules > Performance)测试超时或延迟场景。
-
安全测试:检测敏感信息(Token、密码)是否明文传输;拦截修改请求,测试服务端对异常数据的处理(如SQL注入)。
-
Mock测试:使用AutoResponder拦截请求,返回本地Mock数据(如异常响应)。
-
前后端联调:捕获前端发送的实际数据,对比是否与后端预期一致。
测试中的典型操作:
- 抓包过滤:通过Filters聚焦测试目标(如指定域名)。
- 篡改请求:断点修改参数(如删除必填字段)测试容错性。
- 重放请求:右键Replay多次发送,验证接口幂等性。
示例:测试支付接口时,修改金额为负数,检查服务端是否拦截非法参数。
6、Postman你是如何使用的?
- 构建请求:设置方法(GET/POST等)、URL、Headers(如
Content-Type)、参数(Query/Body)。 - 发送验证:检查状态码(如200)、响应数据(JSON字段)、响应时间。
- 自动化测试:用
Tests写JS断言(如pm.test("Status 200", () => pm.response.to.have.status(200));)。 - 变量管理:用环境变量(
{{base_url}})或脚本动态存储(如pm.environment.set("token", response.token))。 - 批量执行:用Collection Runner或Newman(CI/CD)运行测试集。
核心:模拟请求 → 验证结果 → 自动化断言 → 批量测试。
7、你是如何用JMeter进行性能测试的?
-
创建测试计划:添加 线程组(设置并发用户数、循环次数);配置 HTTP 请求(URL、方法、参数、Headers)。
-
参数化与动态数据:使用 CSV 文件 或 随机变量 模拟不同用户输入。
-
添加监听器:查看结果树(调试用)、聚合报告(关键指标)、图形结果(趋势分析)。
-
设置断言:验证响应状态码、内容(如
200 OK或特定文本)。 -
分布式压测(可选):多台机器协同加压(Master-Slave 模式)。
-
分析结果:关注 TPS(吞吐量)、响应时间、错误率,优化瓶颈。
核心流程:模拟并发 → 监控性能 → 分析报告 → 优化系统。
8、缺陷跟踪的一般流程是什么?
- 提交缺陷:测试人员发现 Bug,记录详细信息(复现步骤、环境、截图/日志)。
- 分配缺陷:负责人(如开发经理)确认并指派给对应开发人员。
- 修复缺陷:开发人员复现并修复,更新状态为“已修复”。
- 回归测试:测试人员验证修复结果,确认通过则关闭,否则重新激活。
- 闭环管理:统计缺陷数据(如修复率、周期),优化流程。
核心:发现 → 记录 → 修复 → 验证 → 改进。
9、你是如何使用XMind进行管理测试用例的?
-
层级设计:中心主题:产品/模块名称(如“登录功能”);分支主题:按功能拆分(如“账号输入”、“密码校验”);子用例:具体测试点(如“输入空密码提示错误”)。
-
标记分类:用 图标/颜色 区分优先级(P0/P1/P2)、状态(通过/失败/阻塞)。
-
附加信息:备注:补充前置条件、测试数据。附件:链接需求文档或截图。
-
协作与导出:共享脑图给团队评审,导出为Excel/PDF执行。
核心:结构化梳理 → 可视化标记 → 团队同步。
10、pytest/unittest框架能做些什么?
1、核心功能
- 用例编写:结构化组织测试函数/类(
test_*.py)。 - 断言验证:
assert(pytest)或self.assertEqual()(unittest)。 - 测试发现:自动识别并运行用例(按模块/标记筛选)。
2. 高级能力
- 夹具(Fixture):pytest 的
@pytest.fixture管理预处理(如数据库连接)。 - 参数化:
@pytest.mark.parametrize批量测试多组数据。 - Mock/Stub:
unittest.mock模拟外部依赖(如API调用)。
3. 扩展支持
- 报告生成:HTML/Allure 报告(pytest)。
- 插件生态:pytest 支持覆盖率(
pytest-cov)、并发(pytest-xdist)。
适用场景:
- 单元测试(函数/类验证)
- 接口/集成测试(结合
requests等库) - web UI自动化(搭配
selenium)
核心价值:高效编写 + 灵活扩展 + 自动化执行。
11、Mysql增删改查的的命令是怎么样的?
1. 基本操作
- 增(INSERT):插入数据
INSERT INTO 表名 (字段1, 字段2) VALUES ('值1', '值2'); - 删(DELETE):删除数据
DELETE FROM 表名 WHERE 条件; -- 例如:WHERE id = 1; - 改(UPDATE):更新数据
UPDATE 表名 SET 字段1='新值' WHERE 条件; -- 例如:WHERE name = '张三'; - 查(SELECT):查询数据
SELECT * FROM 表名 WHERE 条件; -- 例如:WHERE age > 18;
2. 组合查询
- 多条件查询(AND/OR)
SELECT * FROM 表名 WHERE 条件1 AND 条件2; -- 例如:WHERE age > 18 AND gender = '男'; - 模糊查询(LIKE)
SELECT * FROM 表名 WHERE 字段 LIKE '%关键字%'; -- 例如:WHERE name LIKE '%张%'; - 排序(ORDER BY)
SELECT * FROM 表名 ORDER BY 字段 ASC/DESC; -- 例如:ORDER BY age DESC(降序); - 分组统计(GROUP BY + 聚合函数)
SELECT 字段, COUNT(*) FROM 表名 GROUP BY 字段; -- 例如:GROUP BY city; - 分页(LIMIT)
SELECT * FROM 表名 LIMIT 偏移量, 条数; -- 例如:LIMIT 0, 10(第1页10条);
3. 多表联查(JOIN)
- 内连接(INNER JOIN)
SELECT * FROM 表1 INNER JOIN 表2 ON 表1.字段 = 表2.字段; - 左连接(LEFT JOIN)
SELECT * FROM 表1 LEFT JOIN 表2 ON 表1.字段 = 表2.字段;
核心用途:
- 增删改查(CRUD) → 数据管理
- 组合查询 → 复杂数据分析
12、Linux系统基本操作有哪些?你是如何在liunx上搭建测试环境的?
1. 基础命令
- 文件操作
ls # 查看目录 cd /path # 切换目录 mkdir dir # 创建文件夹 rm -rf dir # 删除文件夹(强制) cp src dst # 复制文件 mv src dst # 移动/重命名 - 权限管理
chmod 755 file # 修改权限(rwx) chown user:group file # 修改所有者 - 进程/网络
ps -ef # 查看进程 kill -9 PID # 强制终止进程 ifconfig # 查看IP(或 ip a) netstat -tuln # 查看端口 - 内存 →
free -h/top - CPU →
top/vmstat - 磁盘 →
df -h/iostat - 网络 →
nload/iftop -
查看日志文件
# 实时查看日志(Ctrl+C 退出) tail -f /var/log/syslog # Ubuntu/Debian 系统日志 tail -f /var/log/messages # CentOS/RHEL 系统日志 # 查看最近 N 行日志 tail -n 100 /var/log/nginx/error.log # 查看 Nginx 错误日志最后 100 行 # 关键词过滤日志 grep "error" /var/log/syslog # 筛选含 "error" 的日志 journalctl -u nginx --since "1 hour ago" # 查看 Nginx 最近 1 小时日志(systemd 系统)
2. 搭建测试环境
- 安装依赖
apt-get update && apt-get install -y python3 git docker # Ubuntu/Debian yum install -y python3 git docker # CentOS/RHEL - 部署服务
- 数据库(MySQL)
docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:5.7 - Web服务(Nginx)
apt-get install -y nginx && systemctl start nginx
- 数据库(MySQL)
- 运行测试
git clone https://github.com/test-project.git cd test-project && pytest tests/ -
核心流程:
装依赖 → 启服务 → 跑测试
(结合Docker可快速隔离环境)
13、结合你最近做的项目,说说看你是怎么设计测试用例的?
测试用例设计方法(结合真实项目)
1. 需求分析
- 明确测试范围:根据PRD/用户故事拆解功能模块(如电商项目的「支付功能」)。
- 识别边界场景:例如支付金额为0、超限、并发支付等。
2. 用例设计策略
- 功能测试:
- 正常流程:支付成功(金额正确+库存充足)。
- 异常流程:支付失败(余额不足、网络超时)。
- 接口测试(Postman):
- 参数校验:必填字段缺失、非法字符(如金额为负数)。
- 幂等性:重复支付仅扣款一次。
- 性能测试(JMeter):
- 模拟100用户并发支付,检查响应时间≤1秒。
3. 数据驱动
- 参数化:用CSV文件管理测试数据(如不同支付方式:微信/支付宝/银行卡)。
- 组合覆盖:
支付方式 × 金额范围 × 用户类型(新/老)
4. 非功能覆盖
- 兼容性:多端测试(H5/App/小程序)。
- 安全测试:支付接口防SQL注入、XSS。
5. 用例管理
- XMind脑图:结构化梳理用例层级(模块→子功能→场景)。
- Excel/TestLink:标注优先级(P0核心功能优先执行)。
实际案例:
- 优惠券使用:设计组合用例(过期券/无效券/叠加使用),发现「券叠加计算Bug」。
核心原则:
覆盖核心流程 → 挖掘边界场景 → 数据驱动验证 → 分层覆盖(功能/性能/安全)