软件测试 - 前置知识(Linux + MySQL基础)

  • Linux 命令: 软件测试第一个任务, 一般都需要进行环境搭建, 一部分环境搭建内容是在服务器上实现的, 跟服务器交互(没有图形化页面), 需要使用 Linux 命令。
  • 数据库: 所有的软件在使用过程中所产生的数据, 最终都要存在数据库当中, 而测试工作往往会需要去校验数据的正确与否, 因此需要学习数据库。

第一部分:Linux 基础

. 硬件和软件

  • 硬件: 能看见也能摸得到
  • 软件: 能看见不能摸得到
  • 关系: 没有软件的硬件是没有任何意义的, 只有存在软件的硬件才能为人所用

. 操作系统作用

  • 1. 是硬件设备上的第一层软件
  • 2. 有了操作系统可以方便我们调用所有的硬件设备
  • 3. 所有应用程序(QQ/微信)的安装使用前提是具备操作系统

. 操作系统的常见分类

  • 桌面操作系统Windows
    • macOS
    • Linux
  • 服务端操作系统
    • Linux (占有比重非常高)
    • Windows Server
  • 移动端操作系统
    • iOS
    • Android(基于Linux)
  • 嵌入式操作系统
    • Linux (自动贩卖机/收银台/汽车中控)

. Linux 系统特点

  • 开源(源代码可见)免费(Linux 系统)
    • 注意: 开源不意味着一定是免费的(要看具体开源协议)
  • 安全稳定
  • 可移植性好(常见系统分类中都有Linux系统的存在)
  • 高性能(服务端没有图形页面)

. Linux 系统分类

市面上常见的Linux 系统都有一个共同的名字 : Linux 发行版 ( 在内核版基础上额外增加一些应用软件和图形化页面)

. Linux 系统的文件和目录

  • 特征
    • Linux 系统中没有盘符概念
    • Linux 系统中的所有文件都存放在根目录下(常用"/"代表)
  • 使用目录
    • / : 根目录
    • /home: 所有普通用户的家目录
    • /root : Linux 系统超级管理员的家目录
    • /usr/bin: Linux 命令大部分都存在于该目录下

. Linux 系统文件和目录的特点

  • 普通用户和超级管理员用户权限有很大区别
    • 普通用户可以进入超级管理员的家目录, 但是无法对其中的 文件进行任何操作
    • 但是超级管理员用户可以做任何操作(实际工作中, 一般不会 轻易获取 root 用户权限)
  • 一般情况下, 普通用户的操作范围仅限在自己的家目录当中
    • 例如: 当前用户为 admin, 操作范围仅限: /home/admin

 . Linux 命令的基本格式

  • 格式组成:
    • 命令主体  -命令选项  命令参数
  • 常见命令形式:
    • 1) 命令主体
    • 2) 命令主体 -命令选项
    • 3) 命令主体 参数
    • 4) 命令主体 -命令选项 命令参数
  • 特点:命令主体必须存在, 而选项和参数都是可选的

. 查看命令帮助信息方法

  • 方法一
  • 命令主体 --help : 可以查看命令具备哪些选项及选项含义
  • 比如:ls --help
  • 方法二
  • man 命令主体 : 查看命令的手册信息
  • 注意: 默认情况下系统手册是英文的, 可以自行扩展修改为中文, 实际应用推荐使用方法一

. 命令学习方法说明

  • 此处以 ls 命令 为例
  • ls : 展示当前路径下有哪些文件
  • ls -a : 显示当前路径下的所有文件(包含隐藏文件(文件名以.开头的))
  • ls -l : 显示当前路径下文件的详细信息
  • ls -al : 显示当前路径下文件的详细信息(包含隐藏文件)

十一. Linux命令的共通知识点

  • 通配符的使用
    • 通配符: 又叫文件名替换符号, 符号具备特殊含义
    • 例如: 文件名: test 通配符可以写成: ???? *
    • : 代表可以匹配任意长度的文件名(所有)
    • ? : 代表可以匹配单个字符, 如果目标文件名有多个字符, 该符号可 以使用多个
    • [] : 括号内的内容表示一个范围, [abc] : 代表匹配文件名是 a 或 b 或 c, 等价于 [a-c] 
  • 绝对路径和相对路径
    • 绝对路径: 路径源头固定不变, 常见有两个: '/': 根目录; '~': 当前用户的家目录
    • 相对路径: 以当前所在路径为源头, 常见的表示形式有两个: '.':当前路径下; '..':当前目录的上一层(父层级)
  • 路径注意事项
    • 1. 绝对路径使用时, 需要确定文件在根目录下还是用户目录下, 理选择起始符号即可
    • 2. 初学时, 建议所有路径优先使用绝对路径, 当清楚文件结构关系 , 逐步转换为相对路径
    • 3. 相对路径中, 如果是当前路径下的文件获取操作, 那么 './' 一般是 可以省略的

十二.Linux常用命令

1.文件和目录常用命令的小结
  • pwd : 查看当前所在的路径位置(涉及到路径切换(cd 命令)时, 确认路径时使用)
  • ls : 查看当前路径下有哪些文件(对路径下文件进行了修改(创建/复制/移动/删除)时使用)
  • cd : 切换路径(更换操作目录时使用)(常和绝对路径及相对路径配合使用)
  • touch : 创建普通文件(单文件: touch 文件名 多文件: touch 文件名1 文件名2 ...)
  • mkdir : 创建目录文件(单文件夹: mkdir 文件夹名 多文件夹: mkdir 文件夹名1 文件夹名2 ...)
  • cp : 复制文件/文件夹(文件: cp -i 源文件 目标文件夹 目录: cp -r 源文件夹 目标文件夹)
  • mv : 移动文件/文件夹(文件: mv 源文件 目标文件夹 目录: mv 源文件夹 目标文件夹)
  • mv : 改名(mv 源文件名 新名字)(新名字必须是当前目录下不存在的文件名!)
  • rm : 删除文件/文件夹(文件: rm 文件名 目录: rm -r 文件夹名)
  • rm : 删除所有文件和文件夹(rm -r *)
  • clear : 清空屏幕操作, 快捷键: Ctrl + L

2.文件内容操作相关命令的小结

  • > : 重定向符号(将左侧命令的结果输出到右侧的文件中)(反复执行, 文件原有内容会被替换)
  • >> : 追加重定向符号(将左侧命令的结果输出到右侧的文件中)(反复 执行,内容追加, 文件原有内容不会被替换)
  • cat : 查看文件内容(格式: cat 文件名)(适合用于查看文件内容较少的文件)
  • more : 以分屏形式查看文件内容(格式: more 文件名)(适合用于查看文件内容较多的文件)
  • | : 管道符号(将左侧命令的结果传递给右侧命令当数据源) 例如: ls -al /usr/bin | grep mysql (从左侧命令的结果中查找 mysql) (管道符右侧命令多用: grep 和 more)
3.查看日志文件内容命令小结
  • head : 可以查看文件开头内容 (head 文件名:查看文件的前10行内容; head -行数 文件名:查看文件的前x行内容)
  • tail : 可以查看文件结尾内容 (tail 文件名:查看文件的后10行内容; tail -行数 文件名:查看文件的后x行内容)
  • tail -f : 动态查看日志文件内容 (格式: tail -f 日志文件名)
  • 注意:
    • 1. 系统相关日志存放位置: /var/log
    • 2. 项目相关日志存放位置: 需要根据项目询问对应的开发人员
4.重启 / 关机 / 查看系统信息命令小结
  • reboot : 重启
  • shutdown -h now : 关机
  • cat /proc/version : 查看内核版本
  • cat /etc/redhat-release : 查看发行版本
5.程序和进程操作相关命令小结
  • ps -aux : 查看当前系统下所有的进程信息;常用用法: ps -aux | grep 程序名 : 能够获取目标程序的进程 ID
  • kill -9 进程ID : 通过进程ID关闭对应程序(-9: 强制关闭)
  • top : 可以调用 Linux 系统下的"任务管理器", 可以动态查看所有 的进程信息
6.端口号信息的获取及操作命令小结
  • netstat -anptu : 可以获取当前系统的网络相关信息(获取端口号信息)
  • lsof -i:端口号 : 查看占用某一端口的的程序名称及进程ID(需要 root 用户权限)
  • 注意: 可以通过 kill -9 进程ID 命令完成对端口占用程序的移除
7.文件权限修改命令小结
  • 命令格式: chmod 权限 文件名
  • 字母法
    • 1. 组别代表字母: u:拥有者  g:用户组   o:其他人  a:以上所有
    • 2. 赋权代表符号: +:增加  -:撤销  =:赋予
    • 3. 权限代表字母: r:读取  w:写入  x:执行
    • 4. 根据需求组合以上三个部分, 再设置权限即可
    • 例如: chmod a=rwx demo chmod u-r,g-w,o=x demo
  • 数字法
    • 1. 权限对应的数字: r:4  w:2  x:1
    • 2. 分别累加每一个组别的权限值之和, 再设置权限即可
    • 例如: chmod 755 demo chmod 775 demo
  • 文件权限修改注意事项
    • 1. 权限修改可以反复执行, 如果未达到目的, 可以再次修改
    • 2. 究竟使用字母法还是数字法完全看个人喜好
8.系统操作相关命令小结
  • which 程序名 : 可以查看程序安装位置
  • su - 用户名 : 切换至用户 (su - : 切换到 root 用户) (切换哪个用户, 输入用户对应密码, 密码没有提示)
  • who -u : 查看用户登录信息
  • exit : 退出终端窗口(退出用户)
9.查找文件命令小结
  • find 路径 -name '目标文件名' : 在给出的路径下查找目标文件
  • 注意:
    • 1. 路径处可以使用绝对路径或相对路径
    • 2. 目标文件名处可以使用通配符(*/?/[])
10.链接文件命令小结
  • ln -s 源文件/文件夹 链接文件名 : 给源文件/文件夹创建链接文件 (软链接: 等价于Windows系统的快捷方式)
  • 注意:
    • 1. 源文件/文件夹最好给绝对路径(防止链接文件被移动位置后失效)
    • 2. 源文件/文件夹被删除, 链接文件会失效
    • 3. 扩展: ln 源文件/文件夹 链接文件名 : 硬链接(此处不做了解)
11.文件的压缩和解压操作小结
  • tar gzip
    • 打包和压缩: tar -zcvf 压缩包名.tar.gz 目标文件/文件夹
    • 解包和解压: tar -zxvf 压缩包名.tar.gz
    • 扩展-指定解压位置: tar -zxvf 压缩包名.tar.gz 目标文件/文件夹 -C 解压位置文件夹
  • tar bzip2
    • 打包和压缩: tar -jcvf 压缩包名.tar.bz2 目标文件/文件夹
    • 解包和解压: tar -jxvf 压缩包名.tar.bz2
    • 扩展-指定解压位置: tar -jxvf 压缩包名.tar.bz2 目标文件/文件夹 -C 解压位置文件夹
  • 选项含义:
    • -z : gzip(压缩/解压)
    • -j : bzip2(压缩/解压)
    • -c : 打包
    • -x : 解包
    • -v : 显示过程
    • -f : 指定文件
    • -C : 指定解压路径
  • zip unzip
    • 压缩: zip -r 压缩包名 目标文件/文件夹
    • 解压: unzip -d 解压位置文件夹 压缩包名

第二部分:数据库

. 数据库是什么

  • 为什么学习数据库?
    • 软件中产生的所有数据最终都要存储于数据库当中
    • 测试人员如果想要进行数据查询/数据校验, 就必须掌握对数 据库的基本操作。
  • 数据库是什么?
    • 定义: 用于存储数据的软件
    • 特点: 表是数据存储的核心体现

. 数据库常见分类

  • 关系型数据库
    • RDMS(Relational Database Management System) 关系型数据库系统
    • 特征: 以数据的形式存储数据, 便于数据查询
  • 常见的数据库代表
  • Oracle 在大型项目中使用,例如:银行、电信等项目  
  • MySQL Web 项目中使用最广泛的关系型数据库
  • Microsoft SQL Server 在微软的项目中使用
  • SQLite 轻量级数据库,主要应用在移动平台
  • 关系型数据库的核心要素
    • 数据行(一条记录)
    • 数据列(字段)
    • 数据表(数据行的集合)
    • 数据库(数据表的集合,一个数据库中能够有 n 多个数据表)
  • 非关系型数据库
    • 不以数据表的形式存储数据的数据库类型

. SQL 介绍

SQL: Structured Query Language (结构化查询语言),通过 SQL语言可以对数据库进行操作
特点: 所有主流的关系型数据库, 都支持使用SQL语句进行数据查询 !

四.数据库的远程连接

  • 连接步骤
    • 1. 获取两个信息: 服务器的 IP 地址; 数据库的账号和密码(找相关人员询问)
    • 2. 在自己电脑上使用数据库连接工具(例如: Navicat), 建立连接, 程连接数据库
    • 3. 连接过程中需要确认自己电脑和服务器是否能够正常通信(ping 命令)

五.数据类型与约束

作用 : 为了更加准确存储数据 , 保证数据的有效性 , 需要结合数据类型和约束来限制数据的存储
数据类型
  • 整数:int,有符号范围(-2147483648 ~2147483647),无符号范围(0 ~ 4294967295)
  • 小数:decimal,例如:decimal(5,2) 表示共存5位数,小数占2 位,整数占3位
  • 字符串:varchar,范围(0~65533),例如:varchar(3) 表示最多存3个字符,一个中文或一个字母都占一个字符
  • 日期时间:datetime,范围(1000-01-01 00:00:00 ~ 9999-12-31 23:59:59),例如:'2020-01-01 12:29:59'

约束  

  • 主键primary key:物理上存储的顺序,唯一标识
  • 非空not null:此字段不允许填写 空值
  • 唯一unique:此字段的值不允许 重复
  • 默认值default:当不填写此值时会使用默认值,如果填写时以填写为准
  • 外键foreign key:维护两个表之间的关联关系

六、SQL语句

注释的使用 : 单行注释和多行注释

 数据表

 1.创表语句
 
  需求 1: 创建商品表 , 包含商品名称和价格
create table 表名(
    字段1 类型,
    字段2 类型
);

  优化:

-- drop table : 删表 if exists : 如果存在表已存在提示
-- 如果表存在, 执行删除操作
drop table if exists goods;
create table goods(
    goodsName varchar(20),
    price decimal(4, 2)
);
  需求 2: 创建商品表 , 字段包括 id( 主键 ), 商品名称 , 价格 , , 公司 , 备注 , 并添加商品
drop table if exists goods;
-- unsigned : 无符号
-- primary key : 主键(不为空)
-- auto_increment : 自动递增
create table goods(
    id int unsigned primary key auto_increment,
    goodsName varchar(20),
    price decimal(6,2),
    num int,
    company varchar(20),
    remark varchar(30)
);
数据
1.增加数据
 
-- 查询一次(方便观察表中字段)
select * from goods;

-- 添加1条数据
-- 主键列是自动增长,插入时需要占位,通常使用0或者 default 或者 null 来占位,插入成功后以实际数据为准
-- 语法 insert into 表名 values(...)
insert into goods values
(0, '战神笔记本', 6000.00, 100, '某东', '战神在手, 天下我有!');

-- 注意: 插入的数据个数与字段数必须匹配, 数据类型也需要对应

-- 插入多条数据
insert into goods values
(0, '小新笔记本', 5000.00, 100, '某东', '小新小新, 蜡笔小新!'),
(0, '外星人笔记本', 9999.00, 100, '某宝', '外星人上位, 战神渣渣!');

-- 注意: 插入多条数据, 每条数据使用逗点分隔即可
-- 扩展: 插入指定字段数据(了解)
-- insert into 表名(字段名) values(字段对应值)修改数据

2.修改数据

-- 先查询所有数据, 便于观察数据内容
select * from goods;

-- 补充惠普电脑的数据
update goods set price=4500.00,num=50,company='并夕夕' where id=4;

-- 注意: 修改数据时, 为保证修改准确性, 务必要给出限定条件

3.删除数据

-- 先查询所有数据
select * from goods;

-- 语法格式 : delete from 表名 where 条件
-- 注意: 如果要删除执行数据, 务必给出限定条件, 否则会删除所有数据!
delete from goods where id = 4;

  扩展1:逻辑删除

-- 对于一些重要数据(例如: 商品数据只是库存为零, 不能删除商品数据),不能直接删除, 此时使用逻辑删除
-- 逻辑删除:通过特定字段值来标记该数据为删除状态而已

-- 实现步骤: 
-- 1) 增加特定字段(数据值1为未删除0为删除) 
-- 2) 对于要进行逻辑删除的数据,该字段赋值为0即可
-- 增加字段: alter table 表名 add 字段名 类型;

-- 增加标记字段
alter table goods add isdelete int;
-- 更新表内所有数据该字段的值
update goods set isdelete = 1;
-- 标记目标数据为是删除状态(修改该字段值为0)
update goods set isdelete = 0 where id = 2;
-- 查询未删除的数据
select * from goods where isdelete = 1;
  扩展2:三种删除数据方法 (所有数据)
-- delete from 表名 : 清空表数据(只清空数据,保留结构), 但不会重置主键计数
-- truncate table 表名 : 清空表数据(只清空数据,保留结构),并会重置主键计数(截断表)
-- drop table 表名 : 删除表, 包括表结构和数据

delete from goods;
truncate table goods;
drop table goods;

-- 删除速度 : drop > truncate > delete

4.查询数据

4.1 基本查询

-- 需求: 准备商品数据, 查询所有数据, 查询部分字段, 起字段别名, 去重

-- 查询所有数据 
-- 语法:select * from 表名;
select * from goods;

-- 查询部分字段
-- 只需要在查询所有数据的基础上, 修改*的位置, 多个字段逗点隔开
select goodsName,price from goods;

-- 起别名 
-- 使用 as 关键字, 后跟别名即可
select goodsName as '商品名称',price as '价格' from goods;
select goodsName '商品名称',price '价格' from goods;     -- 熟练之后 as 关键字可以省略
select goodsName 商品名称,price 价格 from goods;         -- 中文别名引号可以省略

-- 去重 
-- 根据所给字段, 将字段中数据相同数据合并保留一个
-- 需求 : 当前表当中一共有几家公司
select distinct(company) from goods;

4.2 条件查询

  (1).比较运算符 / 逻辑运算符
-- 需求4: 查询价格等于30并且出自并夕夕的所有商品信息

-- 条件查询 
select * from goods;
select * from goods where price = 30; 
select * from goods where price = 30 and company ='并夕夕'; 

-- 逻辑运算符 and : 并列条件
-- 注意 : 在 where 关键后侧的字符串数据, 必须给引号, 否则会报错
  (2).模糊查询
-- 需求: 查询全部一次性口罩的商品信息

-- 查询所有数据
select * from goods;

-- 模糊查询 : like (字符: % 匹配任意的多个字符)
-- 语句格式 : where 字段 like '%信息'

-- 以一次性口罩结尾, 前面内容不限制
-- 由于目标信息可能出现在中间部分
-- 注意 : 模糊查询时要注意条件设定, 避免遗漏数据
select * from goods where remark like '%一次性口罩';

-- 提取内容中包含目标信息的数据
select * from goods where remark like '%一次性口罩%';

-- 扩展: 查询公司来源是 x宝 的商品信息内容
-- like ( _ : 匹配任意单个字符)
select * from goods where company like '_宝';
  (3).范围查询
-- 需求: 查询所有价格在30-100的商品信息

-- 查询所有数据
select * from goods;

-- 条件查询-范围查询 : between 起始值 and 结束值 : 表示一个连续的范围
-- 注意: 范围应该从小到大
select * from goods where price between 30 and 100;

-- 扩展: 以下数据出自于 某东 和 x宝 商品信息
-- 条件查询-范围查询 : in (条件1, 条件2, ...): 表示在某个不连续范围内
select * from goods where company in ('某东', 'x宝');
  (4).空判断
-- 需求: 查询没有描述信息的商品信息

-- 查询所有数据
select * from goods;

-- 判断空 : is null
-- 注意 : null 与 '' 不是一码事; null : 空; '': 空字符 (例如:空格/制表符(tab))
select * from goods where remark is null;

-- 扩展 : 查询以下数据中描述信息不为空的所有商品数据
--not : 表示对条件取反; not null : 双重否定表示肯定
select * from goods where remark is not null;  
  (5).排序
-- 需求8: 查询所有商品信息, 按照价格从大到小排序, 价格相同时, 按照数量少到多排序

-- 查询所有数据
select * from goods;

-- 排序 : order by 字段名 asc(升序)/desc(降序)
select * from goods order by price desc;
-- 需求实现
select * from goods order by price desc, count asc;

-- 扩展:
-- 默认情况下 order by 是以升序进行排列
select * from goods order by price; 
-- 因此 asc 可以省略
select * from goods order by price desc, count; 
  (6).聚合函数
-- 需求: 查询以下信息: 商品信息总条数; 最高商品价格; 最低商品价格; 商品平均价格; 一次性口罩的总数量

-- 查询所有数据
select * from goods;

-- 聚合函数 : SQL 提前准备还一些方法, 具备一定的作用
-- 数据总数 : count()
-- 注意: 统计数据总数时, 推荐使用 * (按照数据最多的那一列统计总数)
select count(*) from goods;
select count(remark) from goods; 

-- 最大值 : max()
select max(price) from goods;
-- 最小值 : min()
select min(price) from goods;
-- 平均值 : avg()
select avg(price) from goods;

-- 求和 : sum()
-- 先获取所有一次口罩的数据
select * from goods where remark like '%一次性口罩%';
select sum(count) from goods where remark like '%一次性口罩%'; 
  (7).分组
-- 需求: 查询每家公司的商品信息数量

-- 查询所有数据
select * from goods;

-- 分组 : group by 字段 : 可以根据给出的字段数据进行数据分组
-- 注意 : 一般情况下, 分组要配合聚合函数一起使用, 目的是对分组后的数据进行进一步统计
select company 公司名称,count(*) from goods group by company;

-- 分组后再次进行条件筛选

-- 扩展 : 查询某东和x宝最贵商品的价格
-- 先按照公司分组
select company 公司名称 from goods group by company;
-- 注意 : 如果想在分组后再次进行条件筛选, 可以使用 having 关键字
-- 把并夕夕的数据排除掉
select company 公司名称 from goods group by company having company != '并夕夕';
-- 获取公司商品最贵价格
select company 公司名称, max(price) from goods group by company having company != '并夕夕';
  (8).分页查询
-- 需求11: 查询当前表当中第5-10行的所有数据
-- 查询所有数据
select * from goods;
-- 分页查询 : limit 起始索引, 数据行数
-- 索引 : 在计算机当中, 不同于人类的自然计数从 1 开始, 计算
机的计数起始值是 0 开始(索引)
-- 起始索引: 实际数据顺序 - 1 即为其对应的索引值
select * from goods limit 4, 6;
-- 扩展 : 如果获取是当前数据中的第1行数据时, 起始索引可以省略
-- 获取当前数据中的第1行数据
-- select * from goods limit 0, 1;
select * from goods limit 1;
-- 分页查询公式的使用
-- 扩展 : 分页查询公式的应用
-- 条件 : 每页显示 m 条数据,求:显示第 n 页的数据
-- 公式 : (n-1)*m, m : 查看指定页面数据
-- 假设 : 当前数据中, 每页显示 3 条数据, 查看第 2 页数据内
容
select * from goods limit 3, 3;

猜你喜欢

转载自blog.csdn.net/lilygg/article/details/120810572