【软件测试】项目测试—MySQL数据库操作应用场景?必会知识详全(超详细)


前言

数据库在软件测试面试中基本属于必考内容,最多的就是手写 SQL 或口述 SQL,面试官会给你出一个场景,比如班级、分数、课程之类的,一般考察表查询语句居多,例如多表查询、连接查询、子查询等。

作为测试,数据库在日常工作中的权重占比还是比较大的,主要有以下几个应用场景:

1、项目部署及部署完后数据的准备

开发配置好环境,但是没有连接数据库,就需要我们自己新建数据库并连接。
已经建好数据库,但是没有创建数据表,就需要我们自己创建数据表。
已经创建好数据库和数据表,但是数据表中没有数据,就需要我们自己添加数据。
数据表中有数据,但是数据量不够,开发只提供一两条样例数据,测试就需要大量造数据。
项目的后台管理没有注册功能,就需要我们自己手动向数据表中插入用户名和密码。

2、在前端页面增删改查,查看数据库是否做了相应更新,核对数据存储的准确性

例1:在 CRM 项目中,新建客户以后,在数据库的表中查看是否与新建的客户信息一致。
例2:支付交易产生的订单可以从数据库中查看订单是否真实存储,数据信息是否一致。

3、对数据直接操作来满足测试用例所需的极限场景

比如有些场景像 CRM 项目中的新建客户功能,我们只是要验证一个输入框的边界值,但是却需要在前端页面一直新建,一直提交保存,每次新建都需要填写暂时不需要测试的必填项,太麻烦,就可以直接去修改数据表中对应的字段值。

4、性能测试或自动化测试通过脚本产生大量数据时,查看数据库是否批量有效存储

5、通过操作数据库优化测试用例,提升测试效率

6、前端输入框字段报错时,可能是数据库参数类型设置有误或字段长度不够,就可以打开数据库查看字段参数类型和长度是否正确

7、性能测试,通过优化 SQL 语句或表结构来提高系统的性能,例如慢查询等

8、造数据场景,构造某些用例的前置条件

例1:统计年盈利额,需要 1~12 月都需要数据,不可能一个需求测一年吧,就可以在数据库中直接插入数据。

例2:手机号注册时,通过改数据库表字段非唯一状态来重复使用一个手机号,进行反复注册。

例3:通过修改金额、价格等用来做支付测试,比如原本需要 100¥,就可以通过修改数据为 0.01¥。

例4:会员积分,就可以在数据库直接修改积分,看是否达到会员。

9、理解如何通过接口操作数据库

10、做测试结构分析时,可以通过数据库搞清楚数据流向,哪个表放哪个字段什么时候在哪里展示
……

仅列举了一些日常工作中比较常见的场景。

紧接着,就来介绍一下数据库以及常用的 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性能测试

请添加图片描述

九、总结(尾部小惊喜)

每一次努力都不会白费,每一份付出都值得珍惜。坚持奋斗,相信自己,成功就在前方等待着你。只要你肯去追求,幸福就会向你招手。

每个人的命运都是由自己掌握,只要有梦想、有勇气、有行动,就能迎接成功的曙光。人生路上虽然会遇到泥沼、荆棘,但只要坚定信念,就一定能跨越难关!

成功的路上并不平坦,但是拼尽全力,努力不懈,才能走的更远、更高。不要畏惧失败,相信自己,勇往直前,一定能收获成功的喜悦!

猜你喜欢

转载自blog.csdn.net/shuang_waiwai/article/details/130427112