目录:导读
前言
数据库在软件测试面试中基本属于必考内容,最多的就是手写 SQL 或口述 SQL,面试官会给你出一个场景,比如班级、分数、课程之类的,一般考察表查询语句居多,例如多表查询、连接查询、子查询等。
作为测试,数据库在日常工作中的权重占比还是比较大的,主要有以下几个应用场景:
项目部署及部署完后数据的准备
开发配置好环境,但是没有连接数据库,就需要我们自己新建数据库并连接。
已经建好数据库,但是没有创建数据表,就需要我们自己创建数据表。
已经创建好数据库和数据表,但是数据表中没有数据,就需要我们自己添加数据。
数据表中有数据,但是数据量不够,开发只提供一两条样例数据,测试就需要大量造数据。
项目的后台管理没有注册功能,就需要我们自己手动向数据表中插入用户名和密码。
在前端页面增删改查,查看数据库是否做了相应更新,核对数据存储的准确性
例1:在 CRM 项目中,新建客户以后,在数据库的表中查看是否与新建的客户信息一致。
例2:支付交易产生的订单可以从数据库中查看订单是否真实存储,数据信息是否一致。
对数据直接操作来满足测试用例所需的极限场景
比如有些场景像 CRM 项目中的新建客户功能,我们只是要验证一个输入框的边界值,但是却需要在前端页面一直新建,一直提交保存,每次新建都需要填写暂时不需要测试的必填项,太麻烦,就可以直接去修改数据表中对应的字段值。
性能测试或自动化测试通过脚本产生大量数据时,查看数据库是否批量有效存储
通过操作数据库优化测试用例,提升测试效率
前端输入框字段报错时,可能是数据库参数类型设置有误或字段长度不够,就可以打开数据库查看字段参数类型和长度是否正确
性能测试,通过优化 SQL 语句或表结构来提高系统的性能,例如慢查询等
造数据场景,构造某些用例的前置条件
例1:统计年盈利额,需要 1~12 月都需要数据,不可能一个需求测一年吧,就可以在数据库中直接插入数据。
例2:手机号注册时,通过改数据库表字段非唯一状态来重复使用一个手机号,进行反复注册。
例3:通过修改金额、价格等用来做支付测试,比如原本需要 100¥,就可以通过修改数据为 0.01¥。
例4:会员积分,就可以在数据库直接修改积分,看是否达到会员。
理解如何通过接口操作数据库
做测试结构分析时,可以通过数据库搞清楚数据流向,哪个表放哪个字段什么时候在哪里展示
……
仅列举了一些日常工作中比较常见的场景。
紧接着,就来介绍一下数据库以及常用的 SQL 语句。
数据表的增删改查
增(insert)
-- 插入数据INSERT INTO user_info ( user_id, user_name, PASSWORD, user_nick, card_num )VALUES( 1, 'zhangsan', 'abc123', 'zhangsanfeng', 124567894651329785 ),( 2, 'lisi', '122bbb', 'limochou', 124567894651324567 ),( 3, 'wangwu', '123aaa', 'wangbaiwan', 214567894651324567 ),( 4, 'liuqi', '12aaa', 'liuchuanfeng', 214563356651324567 ),( 5, 'zhangliu', '12aaa', 'zhangwuji', 214563356658966567 );
删(delete)
语法:
delete from 表名 where 条件
delete 语句不能删除某一列的值。(可以使用 update 表名 set username = “” where userid = 1)
使用 delete 语句仅删除符合 where 条件的行的数据,不删除表中其他行和表本身。
truncate user_info_table(直接把数据清空掉)
drop 和 delete 的区别:
drop 是删除数据库、数据表、数据表中的某一列。
delete 是删除某一行数据。
改(update)
语法:
update [表名] set [列名]=[新值] where [列名]=[某值];
update 语法可以新增、更新原有表行中的各列。
set 子句指示要修改哪些列和要给予哪些值。
where 子句指定应更新哪些行。如果没有 where 子句,则更新所有的行。
查(select)
例1:
现有下表
where子句
-- 1. 满足价格大于等于9的所有信息SELECT * FROM order_info WHERE price >= 9;-- 2. 查找满足product_id在1002和1003之间的SELECT * FROM order_info WHERE product_id BETWEEN 1002 AND 1003;-- 3. 查找user_id在1、3、5这三个数内的信息SELECT * FROM order_info WHERE user_id IN (1,3,5);-- 4. 查找订单状态是已支付的信息SELECT * FROM order_info WHERE order_status = 'pay';-- 5. 查找用户名类似于已li开头的信息SELECT * FROM user_info WHERE user_name LIKE 'li%';-- 6. 查找用户名中第二个字母是h的信息SELECT * FROM user_info WHERE user_name LIKE '_h%';-- 7. 查找用户名中第二个字母不是h的信息SELECT * FROM user_info WHERE user_name NOT LIKE '_h%';-- 8. 查找用户名中最后一个字母以i结尾的信息SELECT * FROM user_info WHERE user_name LIKE '%i';-- 9. 查找价格大于8,并且订单状态是已支付的所有信息SELECT * FROM order_info WHERE price > 8 AND order_status = 'pay';-- 10.查找用户表中user_nick为null的信息SELECT * FROM user_info WHERE user_nick IS NULL;-- 11.查找用户表中user_nick为 not null的信息SELECT * FROM user_info WHERE user_nick IS NOT NULL;
聚合函数
-- 1. 查找订单表中最大的价格,查找订单表中最小的价格SELECT MAX(price),MIN(price) FROM order_info;-- 2. 查找订单表中user_id=2的最小价格SELECT MIN(price) FROM order_info WHERE user_id = 2;-- 3. 分别列出订单表中user_id=2的最小价格和最大价格SELECT MIN(price),MAX(price) FROM order_info WHERE user_id = 2;-- 4. 分别列出订单表中user_id=2的最小价格和最大价格,并把最小价格的展示结果的列名改为"min_price"SELECT MIN(price) AS min_price,MAX(price) FROM order_info WHERE user_id = 2;-- 5. 求订单表的价格的平均值,求订单表中user_id=2的价格的平均值SELECT AVG(price) FROM order_info;SELECT AVG(price) FROM order_info WHERE user_id = 2;-- 6. 分别列出订单表中user_id=2的价格的平均值、最小值、最大值SELECT AVG(price),MIN(price),MAX(price) FROM order_info WHERE user_id = 2;-- 7. 求订单表中user_id=1的价格的总和SELECT SUM(price) FROM order_info WHERE user_id = 1;-- 8. 求订单表中user_id=1或者user_id=3的价格总和SELECT SUM(price) FROM order_info WHERE user_id = 1 OR user_id = 3;
分组
-- 1.首先筛选状态为已支付的订单,然后按照user_id分组,分组后每一组对支付金额进行求和,最终展示user_id和对应组求和金额SELECT user_id,SUM(price) FROM order_info WHERE order_status = 'pay' GROUP BY user_id;-- 2.首先筛选状态为支付的订单,然后按照user_id分组,分组后每一组对支付金额进行求和,再过滤求和金额大于10的,最终展示user_id和对应组的求和金额SELECT user_id,SUM(price) FROM order_info WHERE order_status = 'pay' GROUP BY user_id HAVING SUM(price) > 10;
数据表连接查询和子查询
-- 1.查询订单表中的价格大于10元的用户的昵称(小提示:用户昵称在用户表中,订单价格在订单表中)SELECT a.user_nick FROM user_info a INNER JOIN order_info b ON a.user_id = b.user_id WHERE b.price > 10;SELECT user_nick FROM user_info WHERE user_id IN (SELECT user_id FROM order_info WHERE price > 10);-- 2.查询用户名以l开头的用户买过的所有订单id和对应价格(小提示:订单id和对应价格在订单表中,用户名在用户表中)SELECT o.order_id,o.price FROM order_info o WHERE o.user_id IN (SELECT user_id FROM user_info u WHERE u.user_name LIKE 'l%');
例2:
现有下2表
-- 1.修改供应商id为4的供应商名称为‘hongshuangxi’UPDATE suppliers_info SET supplier_name = 'hongshuangxi' WHERE supplier_id = 4;-- 2.查询商品重量大于0.10的商品的名称SELECT product_name FROM products_info WHERE weight > 0.10;-- 3.查询商品名称以字母p开头的商品的所有信息SELECT * FROM products_info WHERE product_name like 'p%';-- 4.查询商品重量大于0.10,小于0.20的商品名称SELECT product_name FROM products_info WHERE weight > 0.10 AND weight < 0.20;-- 5.按照商品分类统计各自的商品总个数,显示每个分类和其对应的商品总个数SELECT classification,COUNT(classification) FROM products_info GROUP BY classification;-- 6.将所有商品的名称按照商品重量由高到低显示SELECT product_name,weight FROM products_info ORDER BY weight DESC;-- 7.显示所有商品的信息,在右边显示有供应商的商品对应的供应商信息SELECT * FROM products_info a LEFT JOIN suppliers_info b ON a.supplier_id = b.supplier_id;-- 8.显示重量大于等于0.15的商品的供应商的联系人和手机号SELECT s.contacts,s.contacts_phone_num FROM suppliers_info s INNER JOIN products_info p ON s.supplier_id = p.supplier_id and p.weight >= 0.15;
下面是我整理的2023年最全的软件测试工程师学习知识架构体系图 |
一、Python编程入门到精通
二、接口自动化项目实战
三、Web自动化项目实战
四、App自动化项目实战
五、一线大厂简历
六、测试开发DevOps体系
七、常用自动化测试工具
八、JMeter性能测试
九、总结(尾部小惊喜)
每一次努力都不会白费,每一份付出都值得珍惜。坚持奋斗,相信自己,成功就在前方等待着你。只要你肯去追求,幸福就会向你招手。
每个人的命运都是由自己掌握,只要有梦想、有勇气、有行动,就能迎接成功的曙光。人生路上虽然会遇到泥沼、荆棘,但只要坚定信念,就一定能跨越难关!
成功的路上并不平坦,但是拼尽全力,努力不懈,才能走的更远、更高。不要畏惧失败,相信自己,勇往直前,一定能收获成功的喜悦!
来源地址:https://blog.csdn.net/shuang_waiwai/article/details/130427112