一、测试基础
Q1:测试流程包含哪些关键步骤?
-
答:需求分析→测试计划→用例设计→执行测试→缺陷管理→测试报告,需结合具体案例说明各阶段输出物。
需求分析案例题:给你一个带有logo的水杯,你会如何去测试?(测试思维)
分析:
功能:装水、是否漏水、装热水、冰水、茶水、饮料、是否保温
非功能:
界面:logo是否与原型图一致、是否美观、是否掉色、材质
易用性:防滑、防烫、带手把、会不会刺嘴巴、携带是否方便
兼容性:能否能装其他的液体
安全性:装热水的时候,会不会水有毒
性能:防摔
Q2:黑盒测试与白盒测试的区别?
-
答:黑盒关注功能实现(用户视角),白盒基于代码逻辑验证(开发者视角),灰盒介于两者之间(接口级测试)。
- 黑盒测试方法:
- 1.等价类划分法:把可能用到的数据划分为不同的类别,然后再从每一类中挑选有代表性的数据用以测试。如账户名登录,也就是取正则表达式,取6-18位长度,有效等价类与无效等价类。
- 2.边界值法:设置边界值也就是极值,是等价法的补充。
- 3.场景法:通过场景对系统的功能或业务流程进行测试。遍历所有的基本流和备选流来完成系统中的所有场景。也就是说流程图。
- 4.因果图法:分别列出需求中的因子(条件)和结果,当需求中存在多个条件,不同条件中存在不同的结果。
Q3:测试用例怎么写?
答:设置用例编号、用例标题、模块、优先级、前置条件、测试步骤、测试数据、预期结果。

二、数据库基础
牛客网sql基础题知识点
1.查询所有列
select * from 表名
2.查询结果去重
select distinct 关键字 from 表名
3.查询结果限制返回行数
select 关键字 from 表名 limit 行数
4.查找指定结果
select 关键字
from 表名
where 关键字条件;
5.查询中间值
where 关键字条件1 and 关键字条件2; 或 where 关键字 between 值1 and 值2
6.查找除了x的信息
where 关键字 != '值'; 或 where 关键字 <> ‘值’; 或 where 关键字 not in (“值”)
7.范围多值
where 关键字 in ('值1', '值2', '值3');
8.查看含**的结果
where 关键字 like '%**%';
9.查找最高值/ 计数 / 平均值 / 最小值
select max(关键字) / count(关键字) / avg(关键字) / min(关键字)
10.数字值保留*位小数
round(avg(值), *)
11.分组
group by 关键字;
12.分组过滤
group by 关键字
having 关键字(值) < 值1
13.排序升序/降序
order by 关键字 asc/desc ;
14.连接表内连接
inner join 表名 as up
on 表1属性 = 表2属性 and 表1.关键字 = '值1'
15.统计每个学校的答过题的用户的平均答题数
select
university,
count(qpd.question_id)/count(distinct qpd.device_id) as avg_answer_cnt
from user_profile as up
inner join question_practice_detail as qpd
on up.device_id = qpd.device_id
group by university ;
16. 统计每个学校各难度的用户平均刷题数
select
university,
difficult_level,
count(qpd.question_id)/count(distinct qpd.device_id) as avg_answer_cnt
from question_practice_detail as qpd
inner join user_profile as up
on qpd.device_id = up.device_id
inner join question_detail as qd
on qpd.question_id = qd.question_id
group by university, difficult_level
17.统计每个用户的平均刷题数
Select
university,
difficult_level,
count(qpd.question_id)/count(distinct qpd.device_id) as avg_answer_cnt
from question_practice_detail as qpd
inner join user_profile as up
on qpd.device_id = up.device_id and up.university = '山东大学'
inner join question_detail as qd
on qpd.question_id = qd.question_id
group by difficult_level
18.查找山东大学或者性别为男生的信息** **Union 不包含重复行,union 包含重复行
select
device_id, gender, age, gpa
from user_profile
where university='山东大学'
union all
select
device_id, gender, age, gpa
from user_profile
where gender='male'
19.划分为25岁以下和25岁及以上两个年龄段
if(age>=25, "25岁及以上", "25岁以下") as age_cut;
20.**将用户划分为***20岁以下,20-24岁,25岁及以上三个年龄段,分别查看不同年龄段用户的明细情况*
select
device_id,
gender,
case
• when age>=25 then '25岁及以上'
• when age>=20 and age < 25 then '20-24岁'
• when age<20 then '20岁以下'
• else '其他'
end as age_cut
from user_profile
21.年月日函数
where year(date)='2021' and month(date)='08'
22.计算用户的平均次日留存率*** *次日/ 三日/ 七日* *interval 1 / 2 / 6
想要查看用户在某天刷题后第二天还会再来刷题的平均概率。请你取出相应数据。
select
count(t2.device_id)/count(t1.device_id) as avg_ret
from
(
• select
• distinct device_id,date
• from question_practice_detail
) as t1
left join(
select distinct device_id,date
from question_practice_detail
) as t2
on t1.device_id = t2.device_id and t2.date=date_add(t1.date, interval 1 day);
23.切分函数substring
substring('www.csdn.net',5) from web_info
24.获取子字符串:“csdn.net”,子串的位置必须从5开始
substring_index(blog_url, '/', -1) as user_name
***\*count\****:代表第几次出现;count为正数,代表取标识符出现第count次之前的子串;负数则相反,取标识符出现第count次之后的子串。
25.窗口函数
想要找到每个学校gpa最低的同学来做调研,请你取出每个学校的最低gpa。
select
device_id, university, gpa
from(
select device_id,university,gpa,
rank() over (partition by university order by gpa) rk
from user_profile
) up
where up.rk=1
三、Linux基础
设root:
sudo passwd root
su
进程占用:
sudo lsof -i :8000
杀死进程
sudo kill -9 1234 # 其中 1234 是进程 ID
查询文件
sudo find / -type d -name "examples"
查询根目录下(包括子目录),名以b的目录和文件。
find / -name 'b'
查询根目录下(包括子目录),名以b开头的目录和文件。
find / -name 'b'
显示路由和ip地址
ip route show
ping baidu.com 有延迟
sudo vim /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4
ip addr show 显示或配置网络接口
ip link show
sudo dhclient + usb 端口 连外网
sudo ifdown enp2s0 重启网络
sudo ifup enp2s0
tmux 虚拟终端模拟
chmod 777 demo3 -R 读写权限
df -lh 看容量
du -h 看日志大小容量
touch .sh 创建脚本
rm -rf file 强制删除文件
mv oldfile newfile 重命名
mv test1 test/test0 把当前目录下的test1移动到test文件下重命名为test0
tar -cvf start.tar a.java b.java 将当前目录下的a.java、b.java打包
tar -zxvf start.tar.gz -C usr/loca 解压start.tar.gz压缩包,到/usr/local目录下
ps -ef | grep ssh 查找指定ssh服务进程
ps -ef 查看所有正在运行的进程
netstat - an | grep 8080 搜索指定端口
service network restart 重启网络
四、接口测试
问题1:常⻅的请求⽅式?GET和POST请求的区别?
作⽤不同:GET⽤于从服务端获取资源,POST⼀般⽤来向服务器端提交数据 参数传递⽅式不同:GET请求的参数⼀般写在URL中,且只接受ASCII字符;POST请求参数⼀般放在请求体中,对于数据类型也没有限制 安全性不同:因为参数传递⽅式的不同,所以两者安全性不同,GET请求的参数直接暴露在URL中,所以更不安全,不能⽤来传递敏感信息。 参数⻓度限制不同:GET传送的数据量较⼩,不能⼤于2KB;POST传送的数据量较⼤,⼀般被默认为不受限制。 HTTP 协议没有 Body 和 URL 的⻓度限制,对 URL 限制的⼤多是浏览器和服务器的原因。 编码⽅式不同:GET 请求只能进⾏ URL 编码(application/x-www-form-urlencoded);POST ⽀持多种编码⽅式(application/x-www-form-urlencoded 或 multipart/form-data。为⼆进制数据使⽤多种编码。)
问题2:
Postman



Jmeter
压力测试,测试多用户并发请求。

五、自动化测试
python导入selenium库,Chrome驱动
from selenium import webdriver
driver = webdriver.Chrome() # 启动 Chrome 浏览器:ml-citation{ref="3" data="citationList"}
driver.get("https://www.google.com") # 访问 Google 主页:ml-citation{ref="3" data="citationList"}
driver.maximize_window() # 窗口最大化:ml-citation{ref="8" data="citationList"}
driver.quit() # 关闭浏览器:ml-citation{ref="3" data="citationList"}
java引入依赖
测试框架:pytest
单元测试框架,具有很多第三方插件,pytest文档。可结合 Selenium、Appium 实现 Web/App 端自动化测试,或通过 Requests 库完成接口测试。
Jenkins
开源持续集成工具,用于自动化构建、测试和部署软件项目。
CI/CD是持续集成(Continuous Integration)、持续交付(Continuous Delivery)和持续部署(Continuous Deployment)的统称,具体流程可分为三个阶段:
-
持续集成(CI) 开发者频繁提交代码至共享仓库后,系统自动触发构建、单元测试等操作,确保新代码与主分支的兼容性。例如:每次提交触发自动化测试套件运行14。
-
持续交付(CD) 在CI通过后,代码自动部署到类生产环境(如Staging环境)进行集成测试。此阶段允许手动控制是否将代码发布至生产环境,确保交付物始终处于可发布状态14。
-
持续部署(CD) 自动化流程的最终阶段,通过自动化工具(如Jenkins)将已验证的代码直接部署到生产环境,无需人工干预。例如:通过流水线配置实现零宕机更新16。
Jenkins与CI/CD的协作示例
通过Jenkins配置的典型CI/CD流程如下:
-
代码提交 → 自动构建 → 测试执行 → 环境部署
六、性能测试
Jmeter
七、算法刷题
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://blog.grover.top/2025/01/20/%e6%b5%8b%e8%af%95%e5%bc%80%e5%8f%91%e8%b7%af%e7%ba%bf/
共有 0 条评论