一、网络协议http和https的区别
前者为超文本传输,通信使用明文、请求和相应不会对通信方进行确认、无法保护数据的完整性,端口号默认为80。
后者利用SSL/TLS建立安全信道,加密数据包,端口号为443。主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。
1、一次完整的http请求过程
a.浏览器进行DNS域名解析,得到对应的IP地址;
b.根据这个IP,找到对应的服务器简历连接(三次握手);
c.建立TCP连接后发起http请求(一个完整的http请求报文);
d.服务器响应http请求,浏览器得到html代码(服务器如何响应);
e.浏览器解析html代码。并请求html代码中的资源(如js、css、图片等);
f.浏览器对页面进行渲染呈现给用户;
g.服务器关闭TCP连接(四次挥手);
2、常见的http状态及响应码
1(信息类):表示接收到请求并继续处理,例如100客户必须继续发出请求
2(响应成功):表示动作被成功接受、理解和接受,例如200请求成功,请求的资源发送回客户端;204请求收到,但返回信息为空
3(重定向类):为了完成指定的动作,必须接受进一步的处理,例如300请求的资源可在多出得到;301本网页被永久性转移到另一个URL
4(客户端错误):请求包含错误语法或不能正确执行,例如400客户端请求有语法错误,不能被服务器所理解;401请求未经授权;403禁止访问,服务器收到请求,但是拒绝提供服务;404输入错误的URL,服务器请求资源不存在
5(服务端错误):服务器不能正确执行一个正确的请求,例如500服务器遇到错误,无法完成请求;501未实现;502网关错误;503由于超载或停机维护,服务器目前无法使用
二、常用的Linux命令
find 查找文件/目录
find . -name "*.c" #将当前目录及其子目录下所有文件后缀为 .c 的文件列出来
find . -type f #将目前目录其其下子目录中所有一般文件列出
find . -ctime -20 #将当前目录及其子目录下所有最近 20 天内更新过的文件列出
find /var/log -type f -mtime +7 -ok rm {} \ #查找 /var/log 目录中更改时间在 7 日以前的普通文件,并在删除之前询问它们
find . -type f -perm 644 -exec ls -l {} \ #查找当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件
find / -type f -size 0 -exec ls -l {} \ #查找系统中所有文件长度为 0 的普通文件,并列出它们的完整路径
cd 切换目录
cd / #系统根目录
cd .. #返回上级目录
rm 删除文件/目录
rm -rf test/ #强制删除test文件夹
tar 解压缩文件
tar -czvf +压缩文件名 源文件名 #打包并压缩
tar -zxvf +目标文件 #解压文件
touch 创建文件
touch +文件名 #将文件的创建时间改为当前时间,文件不存在则创建一个
vi/vim(vi增强工具)编辑文本
vi +文件名 #编辑文件
进入文档后,点击 i 进入insert模式,在文档中输入文字,在当前光标处编辑,文档下面会有insert的标识
进入文档后,点击 a 可以编辑光标下一位
退出编辑状态后,输入Shift+g即可立刻跳转到本文档最后
点击esc按钮可以退出编辑状态
: 输入冒号可以输入文档相关的指令
wq 表示保存并退出
q 表示退出
q! 强制退出,不保存修改的内容
apt-get/yum/dnf 下载软件包命令
apt-get install +软件/包 #安装包
apt-get update +软件/包 #更新软件
apt-get remove +软件/包 #卸载软件
apt-get upgrade #更新已安装的包
apt-get clean #清理无用的包
df 查看文件系统磁盘空间的使用情况
df -h #将目前磁盘空间和使用情况以人性化的方式显示
tail -f 滚动查看日志
tail -f log.log #滚动查看日志内容,不进入编辑界面
tail -1000f log.log #滚动查看最后1000行内容
top 实时显示系统中各个进程的资源占用情况
top
top当中可以输入的命令
P:以CPU的使用资源排序显示
M:以内存的使用资源排序显示
N:以pid排序显示
T:由进程使用的时间累计排序显示
k:给某一个pid一个信号。可以用来杀死进程
r:给某个pid重新定制一个nice值(即优先级)
q:退出top(用ctrl+c也可以退出top)
三、常用的测试方法
黑盒测试
1)边界值
边界值测试是一种最基本的黑盒测试方法,它是“等价类划分”这种测试方法的良好补充。但该方法会有较大的冗余和漏洞。
边界值测试对布尔型无效(因为布尔型不是“true”就是“false”,不存在边界值的概念)
边界值测试并非黑盒测试独有,它也可以应用在白盒测试(比如数组边界的测试、对循环次数边界的测试……)
2)等价类
划分的子集应该满足如下因素:
(1)每个子集内部所有的数据都是等价的
(2)子集之间互不相交
(3)所有子集的并集是整个输入域或输出域
【有效等价类】是相对于规格说明合理的、正确的、有意义的输入数据构成的集合。
【无效等价类】是相对于规格说明不合理的、错误的、无意义的输入数据构成的集合。
3)场景法
软件的工作流程往往对应着现实生活的场景。应该从更高些的视角来 把握系统的业务流程,了解功能模块。
在熟悉流程的基础上才能讨论局部细节的测试设计。 场景法的核心是事件流和场景
4)错误推测法
凭借测试人员多年的测试经验,通过直觉和经验来推测系统中可能出现的各种缺陷。根据这些情况,来设计测试用例。
白盒测试
1)语句覆盖
使程序中的每个可执行语句都能执行一次的测试用例
2)判定覆盖
对于判断语句,在设计用例的时候,要设计判断语句结果为True和False的两种情况
3)条件覆盖
设计用例时针对判断语句里面每个条件表达式true 和 false各取值一次,不考判断语句的计算结果
4)判定条件覆盖
设计测试用例时,使得判断语句中每个条件表达式的所有可能结果至少出现一次,每个判断语句本身所有可能结果也至少出现一次。
5)条件组合覆盖
设计测试用例时,使得每个判断语句中条件结果的所有可能组合至少出现一次
6)路径覆盖
设计测试用例时,覆盖程序中所有可能的执行路径
优点:这种覆盖方法可以对程序进行彻底的测试用例覆盖,比前面讲的五种方法覆盖度都要高。
缺点:于路径覆盖需要对所有可能的路径进行测试(包括循环、条件组合、分支选择等),那么需要设计大量、复杂的测试用例,使得工作量呈指数级增长。路径覆盖虽然是一种比较强的覆盖,但未必考虑判断语句中条件表达式结果的组合,并不能代替条件覆盖和条件组合覆盖。
四、数据库基本语句
作为一个软件测试工程师,我们在测试过程中往往需要对数据库数据进行操作,但是我们的操作大多以查询居多,有时会涉及到新增,修改,删除等操作,所以我们其实并不需要对数据库的操作有特别深入的了解。
1.插入表数据
insert into 表名(字段1,字段2)values(字段1值,字段2值)
2.删除表数据
delete from 表名 where 范围 #删除符合条件的内容
delete from 表名 #清空表里的内容,不释放空间,id继续增加
truncate table 表名 #清空表数据,释放空间
drop table 表名 #整张表被删除,使用该表必须重建
3.修改表数据
update 表名 set 字段名='新值' where 范围
4.查询表数据
select * from table where 范围 #查询数据
selecr count(*) from table where 范围 或 selecr count(distinct(字段)) from table where 范围 #查总数(distinct可去重)
select sum(字段) from table where 范围 #求和
select avg(字段) from table where 范围 #求平均
select max(字段) from table where 范围 #求最大
select min(字段) from table where 范围 #求最小
select * from table where 范围 order by 排序字段名 desc(asc) #排序desc逆序/asc正序
5.复杂查询
嵌套查询:多个查询语句嵌套在一起查询,一般嵌套的查询语句放在where或having的后面。例如:
select * from table1 where status in(select status from table2)
多表连接查询:
table1
id | username |
---|---|
1 | 小花 |
2 | 小红 |
3 | 小白 |
table2
id | job |
---|---|
1 | 老师 |
2 | 学生 |
4 | 工人 |
(1)内联查询inner join + on
select * from table1 a inner join table2 b on a.id = b.id
查询结果为:
id | username | id | job |
---|---|---|---|
1 | 小花 | 1 | 老师 |
2 | 小红 | 2 | 学生 |
(2)左外联查询 left outer join + on
select * from table1 a left outer join table2 b on a.id = b.id
查询结果为:
id | username | id | job |
---|---|---|---|
1 | 小花 | 1 | 老师 |
2 | 小红 | 2 | 学生 |
3 | 小白 | null | null |
(3)右外联查询 right outer join + on
select * from table1 a right outer join table2 b on a.id = b.id
查询结果为:
id | username | id | job |
---|---|---|---|
1 | 小花 | 1 | 老师 |
2 | 小红 | 2 | 学生 |
null | null | 4 | 工人 |
(4)全外联查询 full outer join + on
select * from table1 a full outer join table2 b on a.id = b.id
查询结果为:
id | username | id | job |
---|---|---|---|
1 | 小花 | 1 | 老师 |
2 | 小红 | 2 | 学生 |
3 | 小白 | null | null |
null | null | 4 | 工人 |
6. group by 分组
根据某一个或多个列表字段进行分组统计,例如
table1
id | name | course | score |
---|---|---|---|
1 | 小花 | 语文 | 90 |
2 | 小红 | 语文 | 99 |
3 | 小白 | 数学 | 98 |
4 | 小白 | 语文 | 70 |
5 | 小花 | 数学 | 95 |
查询每个用户的最高成绩
select name,max(score) as max_score from table1 group by name
查询结果:先按用户名分组,再在每个组中查询找到最高分数
id | name | max_score |
---|---|---|
1 | 小花 | 95 |
2 | 小红 | 99 |
3 | 小白 | 98 |
查询全班每科课程平均分
select course,avg(score) as avg_score from table1 group by course
查询结果:先按课程分组,再在每个组中查询找到平均分数
id | course | avg_score |
---|---|---|
1 | 语文 | 99 |
2 | 数学 | 98 |
having的用法:同where用法,having与group by连用。where是筛选单个记录,having 是筛选分组(先分组,后筛选)