软件测试笔记
wc
可以利用wc命令来查看文件有多少行,该命令的作用就是统计指定文件中的字节数、字数、行数,并将统计结果显示输出,语法“ wc -l filename”。
/:根目录。一般根目录下只存放目录,在 linux下有且只有一个根目录,所有的东西都是从这里开始;
/ root:系统管理员root的目录;
/usr:系统应用程序存放的日录,一般安装的软件在该目录下;
/etc:系统配置文件存放的目录,不建议在此目录下存放可执行文件;/home:系统普通用户的家目录;
/var:放置系统执行过程中经常变化的文件,例如日志文件。
rz:实现将本地下的文件传递到linux下的当前目录
sz: 实现将linux的指定文传递到windows中
虚拟机常见命令
pwd
查看当前所在的目录
ls
**作用:**显示当前目录内容
- 常见参数为:
- -a 显示当前目录中的所有文件,包括隐藏文件 ls -a
- -l 显示文件中的详细信息,其中大小采用比特形式输出 ls -l
- -h 配合 上述中的 l 使用 大小采用M或者G K形式输出 ls -hl
ls -l 返回参数说明
第一位是文件还是目录的说明
第二位是文件权限 以此是 文件拥有者,文件所属组,其他用户 权限
rwx 分别为 读写 可执行
每一个目录或者文件都会属于一个用户和一个组,而且用户名和组名可相同
chmod
作用: 修改文件权限
-
u = user 所属用户
-
g = group 组
-
o = other 其他用户
-
a = all 所有用户(前三者的集合)
-
+赋权
-
-去权
-
= 直接明确权限
-
根据二进制大小对应数字赋权
chmod u+r 文件名 chmod o=rx 文件名 chmod 760 文件名 /# 相当于权限情况为 rwxrw---- u+rwx,g+rw,o-rwx
touch
作用: 创建一个文件如果已经存在那么则修改最后修改日期
touch b.txt
mkdir
**作用:**创建一个目录
-p 嵌套创建目录
mkdir -p aaa/bbb/ccc
rm
**作用:**删除文件或者目录
rm -r 删除目录(不存在时报错)
rm -f 删除目录(不存在时不报错)
rm -rf ***
mv和cp
一个是移动,移动后原位置不存在该文件,后者是复制 两个地方都有该文件
cat和more
作用: 都是查看文件内容
方法: 关键字 文件名
不同:
- cat 是将所有信息全部展示在显示器上
- more 是分页显示所需要展示的信息,其中:
- 空格是显示下一页
- b 是回看上一页
- q是退出
cat a.txt b.txt > c.txt
# 把 a,b两个文件里面的内容写入c中,而且a的内容在前面
grep
作用: 查找存在字符串的文件
grep ‘字符串’ 文件名
- -n 显示所在行号
- -v 不包括该字符串的文件
- -i 忽略大小写查找
grep -vi “s" cpuinfo
echo
**作用:**显示echo后面的字符
echo 字符换
echo hello
---------------------------
hello
输出重定向 > >>
作用: 将输出的信息写入后面的文件中去
> 是将待输出的文件覆盖到目的文件中
>>将待输出的信息不覆盖,追加在文件中
# 把ls -l的信息写入的a中
ls -l > a.txt
# 把ls -l的信息追加写入的a中
ls -l >> a.txt
管道 |
作用: 前者的输出结果作为后者命令的输入实现
ls -al | grep “a”
ls -al | grep "*s"
find
作用 从指定的目录开始,在包括的所有目录中查找指定文件
find 开始目录 -name 文件名称
find ~ -name test.txt
ln
创建链接 分为软连接和硬链接
软链接 ls -s 源文件 链接文件
硬链接 ls 源文件 链接文件
-
软连接相当于源文件的快捷方式,硬链接相当于源文件的副本 (源文件删除以后,链接是不是还存在)
-
源文件不占用磁盘空间,硬链接与源文件大小相同
-
使用ls -l 时,软连接显示的标识为“l” , 源文件所对用的连接数会显示出来
压缩与解压
gzip 文件名 (压缩后源文件消失)
gzip -d 待解压文件名
gzip a.txt #压缩后文件名为 a.txt.gz
# 下述解压方式的效果一样
gzip -d a.txt
gzip -d a.txt.gz
zip 和unzip
zip 压缩文件.zip 源文件 (源文件不消失)
zip -r 压缩目录.zip 源目录 (源目录不消失)
unzip 压缩文件.zip
zip的压缩效果可能不如gzip的效果好,但是源文件不消失,而且压缩后的zip文件可以通用与Windows系统
打包与解包
作用 将多个文件或目录打包成一个文件
tar -cvf asd.tar abd # 把abd 目录所包含的目录和文件打包成一个 asd.tar 文件
tar -xvf asd.tar abd # 把asd.tar 文件解包
tar -tvf asd.tar # 查看包中的目录和对应文件
结合使用
tar -zcvf asd.tar.gz asd #打包后采用gzip手段进行压缩
tar -zxvf asd.tar.gz asd #解压后解包
df
作用显示磁盘空间
df -h
系统相关命令
ps
查看进程 (静态)
ps -aux
ps aux
# 上面两种都对 ,显示所有进程的详细信息
top
动态查看进程信息
kill
结束进程
kill PID(进程号)
kill -9 PID(强制结束进程)
网络相关
ping ifconfig IPa(新的Ubuntu 查看ip)
VI
- vi text.txt (不存在那就直接自动创建,存在的话就打开文件)
- 按 i 开始输入
- 输入完成 按下 esc
- 输入:(shift+ :)
- 输入wq 保存退出
三种启动方式
- vi 未存在文件
- vi 已存在文件
- vi 进入后直接开始编辑 ,编辑完成以后 :后+w 文件名 后 wq退出
三种退出方式
- 不保存退出 q!
- 保存退出 wq
- q 直接退出
常用命令
-
从命令模式进入输入模式:
- i 从光标位置插入
- I 从光标所在行的 行首 插入
- a从光标后面插入
- A 从光标所在行的 行尾 插入
- o 从光标所在行 下面 开启新行插入
- O 从光标所在行 上面 开启新行插入
-
从命令模式进入末行模式:
:
-
删除命令
- x 删除光标上面的字符
- dd 删除光标所在行
- ndd 删除包括本行在内的n行
-
撤销命令
- u 撤销
- Ctrl+ r 反撤销
-
复制粘贴
- yy 复制光标所在的行
- nyy 复制
- p 从本行下面开辟新行并复制
-
查找
形式: /待查字符串
跳转行
- nG
- 5G —跳转到第5行
- G —跳转到文件末行
- nG
上面 开启新行插入
-
从命令模式进入末行模式:
:
-
删除命令
- x 删除光标上面的字符
- dd 删除光标所在行
- ndd 删除包括本行在内的n行
-
撤销命令
- u 撤销
- Ctrl+ r 反撤销
-
复制粘贴
- yy 复制光标所在的行
- nyy 复制
- p 从本行下面开辟新行并复制
-
查找
形式: /待查字符串
跳转行
- nG
- 5G —跳转到第5行
- G —跳转到文件末行
- nG
进程与线程
进程是程序的一次执行过程,是一个动态概念,是程序在执行过程中分配和管理资源的基本单位。每一个进程都有自己的地址空间,至少有5个基本状态:初始态、执行态、等待状态、就绪状态、终止状态。
线程是cpu调度和分配的基本单元。
\1. 进程是资源分配的最小单位 线程是任务调度和执行的最小单位
\2. 进程都有独立的代码和数据空间(程序上下文),进程之间切换开销大,线程都有自己独立的运行栈和程序计数器线程之间切换的开销小。
数据库常见命令
limit 与offset的用法
在mysql中一般使用limit来实现分页
LIMIT后面跟一个参数,表示要提取的数量。
如 :select* from test LIMIT 3 指提取前三条数据,类似sqlServer的top语法。
LIMIT后面跟两个参数时,第一个参数是指第几行,第二个参数是取几条数据。
如: select * from test limit 2,3; 这个SQL是指从第二行的下一行开始向下取3条数据。(即取:3,4,5行的三条数据)
LIMIT和OFFSET组合使用时,LIMIT后面只能有一个参数,表示要提取的数量,offset后面的数字则表示第几行。
如:select * from test LIMIT 3 offset 2; 这个SQL是指从第二行的下一行开始向下取3条数据。(即取:3,4,5行的三条数据)
约束:
- 主键 primary key
- 外键 foreign key
- 唯一 unique
- 非空 not null
- 默认 default
创建并查看数据库:
create database test charset = utf8 collate =utf8_general_ci;
show databases;
select database(); #查看当前所在数据库的名称
use test #进入数据库
-- 修改数据库
-- 创建
create database testpython charset = gb2312;
alter database testpython -- alter database 数据库名
default character set utf8mb4 -- default character set 编码格式
default collate utf8mb4_general_ci; -- default collate 排序规则;
drop database asd; #删除数据库
show databases; # 显示所有的数据库
mysqldump -uroot -p test > test.sql #导出数据
mysql -uroot -p test < test.sql #导入数据
select count(*), max(price), min(price), avg(price) from goods; # 聚集函数
-- 分⻚页查询: select * from 表名 limit start,count
-- 说明: limit 分⻚页; start : 起始⾏行行号; count : 数据⾏行行数
select * from goods order by price desc limit 3; # 查询商品价格最贵的前三条数据信息
逻辑删除: 对于重要的数据,不不能轻易易执⾏行行 delete 语句句进⾏行行删除。因为⼀一旦删
除,数据⽆无法恢复,这时可以进⾏行行逻辑删除。
1、给表添加字段,代表数据是否删除,⼀一般起名 isdelete, 0代表未删除, 1代
表删除,默认值为0
2、当要删除某条数据时,只需要设置这条数据的 isdelete 字段为1
3、以后在查询数据时,只查询出 isdelete 为0的数据
delete from students; -- delete from 表名 : 删除所有数据, 但是 不重置 主键字段的计数(自增情况)
truncate table students; -- truncate table 表名 : 删除所有数据, 并 重置 主键字段的计数
drop table students; -- drop table 表名 : 删掉表(字段和数据均不再存在)
模糊查询:
like 和符号
- % (任意多个字符)
- _ (任意⼀一个字符)
排序
- order by 排序, asc : 升序 (可以省略)
- desc : 降序
连接查询
内连接
查询结果为两个表相同的数据
select * from 1 inner join 2 on 1.id = 2.id
select * from 1,2 where 1.id = 2.id #旧式写法
左连接
查询的结果为两个表匹配到的数据加左表特有的数据,对于右表中不存在的数据使用null
-- 注意: 如果要保证⼀一张数据表的全部数据都存在, 则⼀一定不不能选择内连接,可以选择左连接或右连接
-- 说明:
-- 以 left join 关键字为界, 关键字左侧表为主表(都显示), ⽽而关键字右侧的表为从表(对应内容显示, 不不对应为 null)
select * from 表1 left join 表2 on 表1.列列=表2.列列 (1 是主表)
左右连接的查询结果是一样的,就是在显示的过程中会有不一样
子查询
select * from (select go.*, ca.id cid, ca.typeId ctid,
ca.cateName from goods go left join category ca on
go.typeId=ca.typeId) new
where new.company='并夕夕';
# new 是作为新查询结果的别名,不然后面的where条件无法使用
测试知识点
测试的分类:
- 单元测试:针对单个的模块进行测试,
- 集成测试:又称为接口测试,针对模块之间的接口进行测试
- 系统测试:对软件进行全面的测试
- 验收测试:系统内测
测试方式:
- 黑盒:在不看代码的前提下,针对系统的UI进行测试(功能测试)
- 白盒:单元测试,测试代码的准确性(一般由开发者进行)
- 灰盒:接口测试
五大重点:
性能,可兼容性,功能,安全,易用
测试用例的八大要素:
- 用例编号:项目+模块+编号
- 用例标题:预期结果+操作步骤
- 模块/项目:所属
- 前置条件
- 优先级:P0-P4(0为最高)
- 测试步骤
- 测试数据:所用数据 可以为空
- 预期结果
三大要素
- 长度 (2-5位)
- 类型 (数字)
- 规则(0开头)
get和post
断言:
状态行 断言
-
状态断言码:Status code :code is 200
pm.test("Status code is 200", function () { pm.response.to.have.status(200); //这里填写的200是预期结果,实际结果是请求返回结果 });
-
断言状态消息: Status code:code name has string
pm.test("Status code name has string", function () {
pm.response.to.have.status("OK"); // 断言响应状态消息包含OK
});
响应头断言
-
响应头类型 Response headers:Content-Type header check
pm.test("Content-Type is present", function () { pm.response.to.have.header("Content-Type"); //断言响应头存在"Content-Type" });
响应体断言
-
响应体是否包含***字符串: Response body : Contains string
pm.test("Body matches string", function () { pm.expect(pm.response.text()).to.include("string_you_want_to_search"); }); //注解 pm.expect(pm.response.text()).to.include("string") 获取响应文本中包含string
-
响应体中等于***字符串: Response body :is equal to a string
pm.test("Body is correct", function () { pm.response.to.have.body("response_body_string"); });
-
断言响应体(json)中某个键名对应的值:Response body : JSON value check
pm.test("Your test name", function () { var jsonData = pm.response.json(); pm.expect(jsonData.value).to.eql(100); }); //注解 var jsonData = pm.response.json() 获取响应体,以json显示,赋值给jsonData .注意:该响应体必须返会是的json,否则会报错 pm.expect(jsonData.value).to.eql(100) 获取jsonData中键名为value的值,然后和100进行比较
相应时间断言:Response time is less than 200ms
pm.test("Response time is less than 200ms", function () { pm.expect(pm.response.responseTime).to.be.below(200); //断言响应时间<200ms });
在postman常用的三种变量分别是全局变量,环境变量,集合变量 。
-
全局变量:一旦申明了全局变量,全局有效,也就是说postman中的任何集合,任何请求中都可以使用这个变量。它的作用域是最大的 。
-
环境变量:要申明环境变量,首先的创建环境,然后在环境中才能创建变量 。如果要想使用环境变量,必须先选择(导入)这个环境,这样就可以使用这个环境下的变量了 。需要说明的是环境也可以创建多个 。每个环境下又可以有多个变量 。
-
集合变量:集合变量是针对集合的,也就是说申明的变量必须基于某个集合,它的使用范围也只是针对这个集合有效 。
其中,他们的作用域范围依次从大到小:全局变量>集合变量>环境变量 。当在几个不同的范围内都申明了相同的变量时,则会优先使用范围最小的变量使。
想要使用变量中的值只需两个步骤,分别是定义变量和获取变量 。
定义变量(设置变量)
获取变量(访问变量)