一、测试概论
1.软件的生命周期
软件的生命周期,也指软件的生产周期,是软件从生产到报废的一个过程。
1.计划:确认软件的总目标,软件的实现不能存在任何的技术故障,明确开发周期和推向市场。
如果是一个新项目,这个时候是不需要软件测试工程师的参与
如果是一个集团公司,需要开辟一个新的项目,就有这个团队,这个时候软件测试工程 师参与可以明确一些风险问题和建设性意见。
2.需求分析:是指软件要做的功能。
需要明确本次需要做什么功能,并形成SRS---软件需求说明书。
3.设计:主要是指文档设计和界面设计
文档设计(开发文档):概要设计和详细设计
概要设计:把软件定义各个模块
详细设计:把各个模块定义详细内容
界面设计:像图纸(定义软件的效果图、交互图、原型图)
4.编码:开发人员编码--实现软件的产品功能
5.测试:测试软件是否达到客户的要求,测试项目中的所有任务
6.运维:将软件产品发布到最新的用户环境,让用户使用到最新的软件
2.项目组的架构
项目经理:管理整个项目,按时按质量完成项目的开发任务,确保软件产品的正常上线
产品经理:把控每次版本的迭代需求,规划产品的发展方向
开发人员:实现软件产品的需求功能
前端:一般是指客户端,看得见摸得着的,web端。iOS端、app端
后端:一般是指服务器,后台管理是管理前端的
测试人员:项目组中所有需要上线的任务都要测试--全栈测试
运维人员:主要是查看产品在用户市场的使用情况,发现问题反馈并解决相关问题
UI设计师:需要设计所有软件中的界面图,包含原型图,效果图
3.一次迭代需要做的事情
一次迭代就是一次更新,常规的软件一般是两周(11天)迭代一次
软件的版本也需要更新:明确版本的命名
例:
V4.6.0(版本号)
V(sersion):就是版本的意思
4:代表主版本号,一般这个软件需要大改才需要改这个版本号
6:代表次版本号,一般是指软件小改需要改的版本号
0:代表备用版本号,也可以作为软件的小改,也可以作为备用的版本号
软件的版本一次迭代:V4.6.0---->V4.6.1
下图:版本的更新内容就是指的这个版本的需求内容;
明确这11天,项目组成员需要做什么
4.软件测试的概念
有IEEE组织定义:使用人工和自动化的手段来运行或测试系统的过程,其目的是检测是否满足规定的需求,或是弄清预期结果和实际结果之间的差异
人工:就是指手工测试,测试活动由人工来完成
自动:是指自动化测试,利用自动化技术帮助人工进行测试,来提高测试效率
过程:软件测试是指整个项目环节都需要进行测试
满足规定的需求:测试产品和需求之间的差异
5.软件测试过程中的评审
需求评审:
谁组织:项目经理和产品经理
谁参与:项目组成员
评审目的:评审出需求中不明确的,存在问题的,需要完善的内容,最后需要形成一个标准的SRS
用例评审:测试用例本身就是包含所有的测试路径
谁组织:测试人员
谁参与:项目组成员
评审目的:评审测试用例是否覆盖所有的测试路径,是否需要完善
bug评审:你认为一切不爽的都是bug
谁组织:测试人员
谁参与:项目组成员
评审目的:明确哪些bug必须要修复,哪些bug可以推迟修复,哪些bug可以不用修复。
哪些bug可以推迟修复:当手机短信超过5000条后,再删除短信会出现概率性(50%)的奔溃;
哪些bug可以不修复:opshop电商项目不能在UC浏览器进行支付。 国外几乎不用UC。
6.软件测试的流程
1.需求分析/评审:梳理不明确或者不完善的需求,形成一个标准的SRS。
2.测试计划:本次迭代测试人员的具体工作安排。
3.制定测试方案:具体的测试方案--解决用例的设计
4.测试用例的设计:测试用例是包含了所有的测试路径,包含正常和异常的环境
5.执行测试:将发现的bug提交至bug管理工具,并跟踪
6.回归测试:验证提交的bug是否被修复,并验证这个bug是否会影响其他模块
7.验收测试:项目组验收,内测和公测
8.发布线上:将这个软件产品发布至用户环境,让用户使用到最新的产品
9.测试总结:总结本次版本的迭代情况,方便后续改进
口述:首先项目组成员会针对本次的迭代举行一个需求评审会议,测试人员在本次会议中提出针对需求存在的问题,然后最终形成一个标准的SRS,接下来测试组就根据这个需求说明书指定一个测试计划,安排好接下来的测试工作事宜,定好计划之后测试人员就需要根据这份计划来定一份测试方案,解决测试用例设计,测试用例是要覆盖到所有的测试路径的,设计好测试用例之后接下来就是执行测试了,那么测试人员就需要将发现的bug提交到bug管理工具中比如说禅道,提交上去之后开发人员针对这个bug进行修复,修复好之后测试人员就可以进行回归测试,重新验证这个bug是否被修复完成,并且还要验证这个bug会不会影响到其他模块,在这过程中回归测试是不断进行的,当验证完所有需要修复的bug都完成了修复之后,接下来就是项目组的验收,验收测试有包含内测版和公测版,内测版就是阿尔法测试,公测版就是贝塔测试,验收测试完成后就可以将软件产品发布上线,让客户用到最新的产品,最后测试人员需要根据本次迭代的情况,进行测试总结,方便后续的改进。
7.软件测试的工作原则
1.测试应该尽早介入,越早介入成本越低,效果越好
2.测试是一个不断进行的过程,不是某一次的活动
3.测试的出发点是要证明程序存在错误
4.程序员应该避免检查自己的程序
5.设计测试用例时应考虑到合法和不合法的输入以及各种边界条件,特殊情况下还要制造极端状态和意外状态,如网络异常,电源断电等
6.某个功能部件已发现的缺陷越多,找到它的更多未发现缺陷的可能性就越大
7.穷尽测试时不可能的
**软件测试的重点就是指------** **异常测试**。
对于登录模块而言:
正常测试:输入正确的账户和密码登录。 ------------正常一条;
异常测试:输入错误的账户登录,输入冻结的账户登录,输入密码为空登录-----异常多条。
异常测试:需要特别强调--测试思维,尽可能考虑软件的所有操作行为。
二、系统测试
1.计算机知识
B是代表字节Byte,字节是计算机存储单位,也是唯一的存储单位
在计算机规定中:1Byte=8bits,是指的二进制八位
在计算机中,一个字母就是一个字节。因为一个字节能够存储2^8=256种数据类型,能够满足英文的需求,必须占用两个字节;2^16=65536
1KB=1024B
1MB=1024KB
例如:看小说,10M的小说,就有10*1024*1024/2=500万左右汉字
2.软件测试阶段的划分
一般定为四个阶段:
- 单元测试:测试系统的单个模块,测试代码,属于白盒测试,依据是根据详细设计文档LLD
- 集成测试:测试模块和模块之间的数据通讯,属于灰盒测试,也叫接口测试,依据HLD
- 系统测试:测试软件在系统上的综合表现,属于黑盒测试,依据是SRS
系统测试是在实际运行环境中进行的测试
1.做APP测试--必须在手机上进行测试,不能在模拟器上测试,因为模拟器上很多功能没有(例如电话,短信,视频,语音等)
2.做web测试--电脑上的web端
3.做手机web网页测试--就可以在电脑上进行测试,但是网址是m.xxx.com
- 验收测试:内测版本α测试和公测版本Beta测试
项目组验收:由项目组成员进行验收
项目经理:需要验收产品的所有功能
产品经理:因为本次版本的迭代是产品经理提出的,所以产品经理验收最新的功能
开发和测试:验收产品的基本功能和核心业务
UI设计师:验收产品的基本规格是否符合效果图
α(alpha)测试:内测版本,是指在开发者环境中进行测试,环境可控,用户较少,时间集中,是小范围的测试
β(Beta)测试:公测版本,是对所有用户开放的测试,环境不可控,用户比较多,时间不集中,大范围的测试
3.系统测试的依据
SRS:软件说明书(标准情况)
实际情况
1.如果需求文档清晰明确--系统测试的依据(最好的情况)
2.如果没有需求文档--系统测试的依据是软件的常规操作习惯(结合行业标准)
4.系统测试类型
(1)常用类型
1. 功能测试:
验证产品的功能是否符合需求,也需要验证产品是否符合软件的常规操作习惯。
2. 性能测试
包含客户端的性能和服务器的性能
客户端的性能测试:测试客户端的CPU占用,内存占用,启动app的时间,切换时间。
服务器的性能测试:响应时间,并发用户(大量用户同时使用),吞吐率,查看服务器CPU,内存,磁盘占用等
性能测试必须要有工具的支持,如loadrunner和jmeter(这两个工具是可以产生大量用户的)。
3.安全测试:项目的保护机制是否能够保证项目不受到非法的入侵
一些安全性的功能问题:
- 没有口令是否可以登录到系统中
- 各级用户权限划分是否合理
- 密码是否加密传输
- xss攻击--脚本攻击
(2)还有其他测试类型
GUI测试 健壮性测试 可用性测试 压力测试 容量测试 安装测试
配置测试 异常测试(恢复性测试) 备份测试 文档测试 在线帮助测试
网络测试 压力测试
5.系统测试执行的活动(指系统测试我们需要做什么)
1.搭建系统测试环境
如:需要测试宝贝计划,先要部署宝贝计划的项目环境,部署完成后,测试人员可以直接使用宝贝计划,测试需要在这个环境中测试,将发现的bug提交,用bug管理工具
2.系统测试预测试(冒烟测试)
也叫做开发中的自检,目的是为了确保这个软件能够正常的运行和测试。
案例:如登录模块,登录模块的冒烟测试就是指:输入正确的账户和密码能够登录成功,如果这一条用力执行失败了,就说明冒烟测试没通过,那就没有必要执行大规模的测试。
冒烟测试就是指测试软件中的基本功能。
3.执行系统测试,进行系统测试记录,填写测试日报
(通过测试的手段来发现软件中的bug,需要将这个bug提交至bug管理工具。
在系统中,需要不断地执行测试,也需要不断地进行回归测试
在测试的后期,开发人员修复的bug>测试人员提交的bug)
4.提交缺陷报告并反馈和跟踪缺陷解决,进行缺陷管理
5.编写并评审系统测试报告
三、bug管理工具--禅道
1.完善禅道
1.修改项目的名字:在组织中修改公司
2.项目中没有模块的名字:在产品--模块中修改
3.影响的版本:在项目中--版本进行修改
4.修改操作系统和浏览器:后台--自定义--bug中修改
2.bug的属性
1.bug的ID:ID一般是自动生成的,能够统计bug的数量,通过bug的ID进行跟踪和管理
2.bug的标题:一句话来介绍或描述bug,尽量 不要超过两个逗号
3.缺陷的严重程度:主要是指对用户造成的影响有多大
致命(非常高)
严重(高)
一般(中)
轻微(低)
4.缺陷的优先级:一般情况下优先级和严重程度是相对应的
5.缺陷的重现步骤:把发现bug的步骤描述出来,一般不超5步
3.bug的生命周期
BUG的生命周期,就是芷一个BUG从被发现到关闭的过程
生命周期中缺陷状态:新建-->指派-->已解决-->待验-->关闭
发现BUG-->提交BUG-->指派BUG-->研发确认BUG-->研发去修复BUG-->回归验证BUG-->是否通过验证-->关闭BUG
如果验证没有通过,就需要重新打开--指派—已解决—待验,循环这个过程。
1.bug首先是由测试人员提交的
2.开发人员来解决bug
3.开发人员在解决bug时,会存在以下几种方案:设计如此、重复bug、外部原因、已解决、无法重现、延期处理、不予解决。
4.开发人员修复bug后,bug转给测试人员进行验证
四、Linux系统
1.认识操作系统和Linux
(1)操作系统
操作系统:是一个特殊的系统软件
特殊:操作系统可以直接运行在“裸机”上,为普通的软件和硬件提供中间平台
普通软件运行在对应的操作系统,操作系统又直接运行在计算机硬件上
常见的操作系统
PC端:
Windows:面向消费者市场(Windowsxp/7/8/10/11)
面向企业服务器市场(Windows server系列)
服务器就是计算机
macOS X:苹果电脑的操作系统,是基于Unix的操作系统
Unix:也是一个操作系统,macOS是在Unix的基础上进行二次开发的
移动端:
Android:基于Linux做二次开发
iOS:基于Unix进行二次开发的操作系统
塞班
鸿蒙(HarmonyOS)
(2)Linux
广义上:Linux是基于Unix内核的操作系统
狭义上:Linux是由众多发行版共同构成的操作系统
发行版
Windows是闭源的(封闭源代码),所以Windows的各种版本都是有微软自己在研发维护
Linux是开源(开发源代码),部分有实力的厂商,获取到Linux源码后,能够在这基础上,进行二次开发,不同的厂商,会各自维护不同的Linux版本
国际上的Linux发行版:
centos:Linux的发行版之一
Ubuntu:Linux的发行版之一
Android:也是Linux的发行版之一
国产Linux发行版:
deepin:国产Linux系统之一
2.Linux的目录和文件操作
(1)常用的目录操作
目录就是文件夹
Linux的基本目录操作
查看/切换/新建/删除/复制/移动/重命名
1.查看目录:ls--查看当前目录
蓝色:代表目录
黑色:代表普通文件,可以用于写文字
荧光绿:代表链接文件,相当于Windows内的快捷方式
红色:压缩包文件
绿色:有执行权限的文件
常用选项:
-a:查看目录下的所有内容(包括隐藏的)
-l:以列表的形式查看目录,可以缩写为:ll
例:drwxr-xr-x. 2 tian liaocong 6 5月 24 2020 Desktop
每一行的第一个字符,代表文件的类型
d:代表目录
l:代表链接文件
-:代表普通文件
-la:以列表的形式查看目录下的所有内容(包括隐藏的)
1)切换目录
格式:1.cd 目录名
2.cd 完整的路径
~:代表当前用户的主目录
.:代表当前目录
..:代表当前目录的上一级目录
/:代表根目录,相当于Windows的C盘D盘E盘,是Linux最上层的目录,不能再往上
2)新建目录
格式:mkdir 目录名
3)删除目录
1.删除空目录:
格式:rmdir 空目录名
2.删除非空目录:
格式:rm -rf 目录名(这种方式可是删除任意目录或文件)
-r:迭代删除
-f:强制删除,忽略提示的意思
4)复制目录
1.复制到当前目录:
格式:cp -r 要复制的目录名 新目录名
2.复制到其他目录:
格式:cp -r 要复制的目录名 复制到哪里的路径
5)移动目录
格式:mv 要移动的目录 移动的路径
6)重命名
格式:mv 要重命名的目录 新目录名
移动和重命名的区别:
如果第2个参数是已经存在的目录,则是移动
如果第2个参数是不存在的目录,则是重命名
两个快速敲命令的技巧:
1.tab键能够快速补全文件或目录名
2.上下键能够在历史输入的命令中切换
(2)常用的文件操作
新建/查看/删除/复制/移动/重命名/编辑
1)新建文件
格式:1.新建空文件:touch 文件名
2.新建非空文件:echo "文件内容">文件名
添加文件内容:
格式:echo "文件内容">>文件名
2)查看文件
格式:
1.cat 文件名(正向查看文件内容)
2.tac 文件名(逆向查看文件内容)
3.tail -f 文件名(动态查看文件的变化)
4.head -5 文件名(查看前5行)
5.tail -5 文件名 (查看后5行)
6.ctrl+c(退出动态查看)
7.more 文件名(分页查看文件)
8.less 文件名(打开新的临时窗口查看文件)
q(退出临时窗口)
3)删除文件
格式:
1.删除文件:rm 文件名
2.删除任意文件或目录:rm -rf 文件名或目录名
4)复制文件
格式:
1.复制到当前目录:cp 要复制的文件 新文件名
2.复制到其他目录:cp 要复制的文件 复制的具体路径
5)移动
格式:mv 要移动的文件 移动的具体路径
移动文件和移动目录基本一致
6)重命名
格式:mv 要重命名的文件 新文件名
重命名和移动的区别:
1.如果第2个参数是已经存在的目录,则是移动
2.如果第2个参数是不存在的文件,则是重命名
3.如果第2个参数是已经存在的文件,则是重命名并覆盖旧的同名文件
7)编辑
格式:vi 文件名
三种模式:
1.一般模式(命令模式):这种模式下不允许修改文件
i:切换到编辑模式,光标在当前位置插入
l:光标跳转到行首插入
a:光标往后退一个插入
A:光标跳转到行尾插入
o:光标往下插入一个空行并切换到编辑模式
O:光标往上插入一个空行并切换到编辑模式
8)一般模式下的常见命令
dd:删除光标所在行
yy:复制光标所在行,nyy复制n行
p:粘贴
u:撤销
shift+4:跳转到光标所在行的行尾
0:跳转到光标所在行的行首
shift+g:光标跳转到文件的最后一行
shift+9:光标跳转到文件的第一行
9)编辑模式(插入模式)
这种情况可以任意修改文件
在一般模式下:按i/a/A/o/O都可以切换到编辑模式
在编辑模式下,按esc,可以切换到一般模式
10)末行模式
这种模式下,可以保存退出文件
切换到一般模式,输入:,可以切换到末行模式
w:保存
q:退出
wq:保存后退出
!:强制
q!:强制退出
3.Linux课堂练习
1.打开终端,查看当前所处的路径
pwd
2.查看目录下的所有内容
ls -a
- 以列表的方式,查看目录
ls -l
- 以列表的方式,查看目录下的所有内容
ls -la
- 查看目录
ls
- 查看历史执行过哪些命令
history
- 查看根目录下的所有内容
1.cd /
2.ls -a
- 以列表的方式,查看Music目录的所有内容
1.cd ~/Music
2.ls -la
- 切换到Music目录的上一级,并查看目录
1.cd ..
2.ls
- 在主目录下的Public目录新建一个test目录,然后删除它
1.cd ~/Pubilc
2.mkdir test
3.rm -rf test
或:rm test
- 在主目录下的Downloads目录内新建一个test目录,并在test内新建一个test1,然后删除test
1.cd ~/Downloads
2.mkdir test
3.cd test
4.mkdir test1
5.cd ..
6.rm -rf test
- 在Public目录内新建test2目录,并复制到当前目录目录起名外test3目录
1.cd ~/Public
2.mkdir test2
3.cp -r test2 test3
- 把test2和test3复制到主目录的Pictures目录内
1.cp -r test2 ~/Pictures
2.cp -r test3 ~/Pictures
- 在Pictures目录内,新建一个test5和test6目录,然后把test6移动到test5内
1.cd ~/Pictures
2.mkdir test5 test6
3.mv test6 test5
- 把上题的test5移动到主目录的Music目录内
mv test5 ~/Music
- 在主目录下新建一个report目录,然后在report目录内新建一个report1目录
1.cd ~
2.mkdir report
3.cd report
4.mkdir report1
- 把report1重命名为report2
mv report1 report2
- 在report目录内新建一个report3目录,并把report2移动到report3目录内
1.mkdir report3
2.mv report2 report3
- 把report3移动到主目录的Downloads目录内
mv report3 ~/Downloads
- 在Music目录内,新建test10文件,查看文件
1.cd ~/Music
2.touch test10
3.cat test10
- 在Music目录内,新建test11文件并写入内容:Hello,Linux,然后查看文件
1.echo "holle,Linux">test11
2.cat test11
- 在主目录下新建test7文件,并写入内容:111111
1.cd ~
2.echo "11111">test7
- 并动态查看该文件,然后给该文件追加内容:22222
1.tail -f test7
2.echo "22222">>test7
- 查看文件最后1行
tail -1 test7
- 在Music目录下新建一个文件test20并写入内容:Hello
1.cd ~/Music
2.echo "holle">test20
- 查看test20,然后删除test20
1.cat test20
2.rm test20
- 在Music目录内新建test21文件,然后使用第2种方式删除test21
1.touch test21
2.rm -rf test21
- 在Public目录内新建2个文件test15,test16,并写入任意内容
1.cd ~/Public
2.echo "renyineirong">test15
3.echo "renyineirong">test16
- 把test15复制为test17到当前目录,查看test17
1.cp test15 test17
2.cat test17
- 把test16复制到主目录下的Music目录,查看Music目录内的test16
1.cp test16 ~/Music
2.cd ~/Music
3.cat test16
- 在Music目录内,新建test30目录
1.cd ~/Music
2.mkdir test30
- 在test30目录内,新建test1文件并写入1111,查看test1
1.echo "1111"test1
2.cat test1
- 在test30目录内,新建test2文件并写入2222,查看test2
1.cd test30
2.echo "2222">test2
3.cat test2
- 把test1重命名为test2,然后查看test2
1.mv test1 test2
2.cat test2
- 把test2重命名为test3
mv test2 test3
- 把test3移动到主目录的Public目录内
mv test3 ~/Public
- 在主目录下使用vi新建一个文件test30,并写入10行内容,然后保存退出
1.cd ~
2.vi test30
3.i
4.输入内容
5.摁esc键
6.摁:键
7.wq
- 使用vi编辑test30,删除最后一行的内容,然后保存退出
1.vi test30
2.i
3.删除最后一行
4.摁esc键
5.摁:键
6.wq
4.Linux的常用命令
(1)查找文件
1)根据文件名来查找文件
格式:
文件名精准查找:find 路径 -name "文件名"
查找test开头的文件:find 路径 -name "test*"
查找包含test的文件:find 路径 -name "*test*"
查找test结尾的文件:find 路径 -name "*test"
*可以代表0个或多个字符串
2)根据文件类型来查找文件
格式:find 路径 -type 文件类型
文件类型:
d:代表目录
f:代表普通文件
l:代表链接文件
(2)查找内容文本
作用:类似于vi末行模式下的:/关键字,可以用于查找文件的指定关键字
格式:grep 关键字 要查找的文件
(3)链接文件
相当于Windows的快捷方式
格式:ln -s 原文件名 链接文件名
例:ln -s test test-1
(4)|:管道符
作用:连接两个命令,把上一个命令的输出结果,作为下一个命令的输入参数
例:ls -l|grep test
ls -l:输出了当前路径下的文件
|:管道符连接了前后两个命令
grep test:在ls -l的输出结果内,查找test的关键字
5.Linux的压缩包管理
(1)压缩
Linux的压缩文件类型:.tar.gz
.tar
.gz
.bz
.bz2
.zip
格式:
tar -czvf 压缩包名 要压缩的文件目录
-c:create,创建压缩文件
-z:gzip的压缩指令
-v:verbose,显示压缩的过程
-f:file,用于指定压缩的文件
(2)解压
格式:
tar -xzvf 要解压的压缩包名
-x:extract,解压
-czvf和-xzvf中的v可以省略
6.Linux用户管理
Linux是支持多用户的操作系统
root用户:超级管理员,Linux最高权限的用户
root用户的主目录:/root
其他用户的主目录:/home
(1)切换用户
格式:su 用户名
(2)新建用户
如果是root用户环境下:useradd 用户名
如果是普通用户环境下:sudo useradd 用户名
如何判断用户是否新增成功:
查看系统配置文件:cat /etc/passwd
注意:不要通过查看/home的内容来判断用户是否新增
(3)修改/设置用户密码
sudo passwd 用户名
(4)删除用户
userdel -r 用户名
-r:删除用户的同时,删除该用户的主目录
7.Linux的权限管理
权限:某个用户对某个文件或者目录的操作权限
例:rwx r-x r-x:
第一组权限:rwx,主属用户(文件拥有者或创建者),代表主属用户拥有读、写、执行的权限
第二组权限:r-x,组内用户的权限,组内用户拥有读和执行的权限,没有写的权限
第三组权限:r-x,其他用户(组外用户)的权限,其他用户(组外用户)拥有读和执行的权限,没有写的权限
操作权限:
r:read,读
w:write,写
x:excute,执行
-:没有权限
(1)修改文件权限
格式:
1.chmod 用户+/-权限 文件名
例:chmod u+r test:给主属用户增加test文件的读权限
u:主属用户
g:组内用户
o:组外用户或其他用户
a:所有用户
+:增加权限
-:去掉权限
=:覆盖权限
2.chmod 八进制权限码 文件名
八进制:0,1,2,3,4,5,6,7,
4:读
2:写
1:执行
0:没有权限
例:chmod 751 文件名
7:4+2+1,读+写+执行
5:4+1,读+执行
1:执行
rwx:4+2+1=7
r-x:4+0+1=5
--x:0+0+1=1
8.Linux的进程管理
进程:进行中的程序
对于Windows来说,查看进程用任务管理器
(1)查看进程
1.ps -ef:查看所有进程(关注pid)
pid:进程号(每一个进程,在启动的时候,操作系统都会随机生成一个id给到这个进程)
ppid:父进程号
CMD:命令/进程名
2.ps -aux:查看所有进程(关注进程的资源占用)
pid:进程号
%CPU:CPU的占用率
%MEM:内存的占用率
command:命令/进程名
3.查看指定进程:
ps -ef|grep 进程名
ps -aux|grep 进程名
4.动态查看进程:
top:会根据CPU的占用来降序排序
按q退出
pid
%CPU
%MEM
COMMAND
(2)终止进程
kill -9 pid号
-9:彻底终止进程
终止某个进程的思路:
1.获取对应的进程号(pid号):ps -ef|grep 进程的关键字
2.kill -9 pid号
9.课堂练习
1.使用vi新建一个文件,写入任意20行内容,至少有8行包含dev的关键字,然后查找dev关键字
1. vi test
2.输入内容
3.:/dev
- 在Music目录新建4个文件:123test, 666test,abctest,test,查找Music目录下test结尾的文件
1.cd ~/Music
2.touch 123test 666test abctest test
3.find -name "*test*"
- 查找主目录下的所有文件
find ~ -type f
- 查找主目录下的所有目录
find ~ -type d
- 使用vi在主目录下新建一个test31文件,并写入任意15行内容,要求至少有8行包含report关键字,然后查找report关键字
1.cd ~
2.vi test31
3.grep report test31
- 给上题的test31新建一个链接文件test32,然后查看test31和test32
1.ln -s test31 test32
2.ll
- 在Music目录,新建一下文件:test1,1test,2test,test3
1.cd Music
2.touch test1 1test 2test test3
- 配合管道符,查找包含test的文件
ls|grep test
- 在主目录下新建一个test34文件并写入任意内容
1.cd ~
2.vi test34
- 压缩test34文件为: test34.tar.gz
tar -czvf test34.tar.gz test34
- 压缩主目录下的Public目录:Public.tar.gz
tar -czvf Public.tar.gz Public
- 删除Public目录,然后重新解压Public.tar.gz
1.rmdir -rf Public
2.tar -xzvf Public.tar.gz
- 切换到root用户,然后查看当前路径
1.su root
2.pwd
- 切换到root用户的主目录,然后查看当前路径
1.cd ~
2.pwd
- 切换到tian用户,查看当前路径
1.su tian
2. pwd
- 切换到tian用户的主目录,查看当前路径
1.cd ~
2.pwd
- 使用root用户新建一个用户:user5,并查看该用户是否新增成功
1.su root
2.useradd user5
3.cat /etc/passwd
- 使用tian用户新建一个用户:user6,并查看该用户是否新增成功
1.su tian
2.sudo useradd user6
3.cat /etc/passwd
- 给user5设置密码,然后切换到user5用户,然后在切换到user5用户的主目录
1.sudo passwd user5
2.su user5
3.cd ~
- 切换到tian用户
su tian
- 使用tian用户删除上题的user5用户,并删除该用户的主目录
sudo userdel -r user5
- 写出以下文件权限:
1. rwx--xr--:主属用户可读可写可执行,组内用户可执行,组外用户可读
2. --x---r--:主属用户可执行,组内用户没有权限,组外用户可读
3. r--rw--wx:主属用户可读,主内用户可读可写,组外用户可写可执行
1. 给test1文件的组内用户增加写入的权限
chmod g+w test1
2. 给test1文件的其他用户增加读写的权限
chmod o+rw test1
3. 给test1文件的其他用户去掉读的权限
chmod o-r test1
4. 给test1文件的主属用户去掉所有权限
chmod u-rwx test1
5. 给test1文件的主属用户和组内用户同时添加读写权限
chmod ug+rw test1
6. 给test1文件的所有用户去掉所有权限
chmod a-rwx test1
chmod a=- test1
7. 给test1文件的所有用户添加读的权限
chmod a+r test1
18. 写出下面权限的8进制权限码:
r-x--xrw-:516
rwx------:700
r--r--r--:444
rw-rw-r-x:665
---r---w-:042
rwxrwxrwx:777
rw-----w-:602
19. 写出下面权限码对应的权限:
742: rwxr---w-
775: rwxrwxr-x
706: rwx---rw-
461: r--rw---x
111: --x--x--x
000: ---------
353:-wxr-x-wx
- 使用两种方式查看所有进程
1.ps-ef
2.ps-aux
- 查看bash进程
ps -ef|grep bash
- 打开一个终端,然后使用Kill终止这个终端
ps -ef|grep bash
kill -9 6906
五、搭建Linux系统平台
1.secureCRT远程连接服务器
1.先卸载之前安装好的,删除电脑本地的centos文件中的所有内容,重新解压centos压缩包
2.在Linux中,在右上角网络改成有线状态
3.在右上角点击用户名字,点击设置,打开隐私,关掉锁屏
4.输入“ifconfig”,查看IP号
5.打开secureCRT,用IP号连接
6.点击选项--会话选项--外观--字符编码改成UTF-8
(1)什么是服务器
服务器就是一台电脑,一台提供用户服务的电脑,部署服务器软件后,就可以直接提供用户服务。
如果是大公司:网易,华为等。-------会部署自己的服务器。
如果是中小型公司:------------------会买服务器。阿里云服务器,华为云,腾讯云,百度云。。。
买服务器/租服务器:制定一个ip(公网ip),分配你一个账户(root)和密码(私发)。
买/租需要买:地区,CPU,内存,系统,磁盘,带宽,时长。(项目的情况来选配置)
通过远程工具:xshell,CRT进行连接访问即可。
服务器软件:Tomcat(Tom猫)。 直接从网上下载的是压缩包的形式。
1.使用Tomcat解压就可以使用。
2.要求环境配置JDK;
Bin目录:存放一些启动的文件。
Conf目录:主要是配置项目的端口port。
Webapps目录:主要是存放项目文件目录,项目文件一般是.war包。 案例:启动服务器后------可以直接访问这个图片;
怎么通过URL来访问的:http://172.30.50.125:8080/liaocong/hg.jpg URL的组成:协议+ip+port+路径+具体的文件。
页面的URL和接口的URL; 乐鲜登录页面的URL:http://172.30.63.23:8080/LexianMall/sc/login.html 乐鲜接口的URL: http://172.30.63.23:8080/LexianMall/user/remLogin.do
接口的URL是由系统框架配置的,接口的URL一般是没有后缀的。
以后大家的网站:ip是公网的ip-------只要存在网络就可以访问; 172.30.63.23-----这是局域网的ip,只能在一个局域网中访问,我们一个教室就是一个局域网。 域名:为了方便用户记忆而取的一个名字。 域名也要购买:新网,西部世界 http://172.30.63.23:8080/LexianMall/sc/login.html----这是一个url,但是很难记。 www.lexian.com ----这个域名就是买的。 访问这个域名就在访问上面的URL
2.安装jdk,配置JAVA环境变量
1.在secureCRF环境里新建一个software的目录:mkdir software
2.点击secureFX
3.打开对应的文件夹(左边是OA项目的文件夹,右边是新建的software目录(/usr/local/software))
4.把OA文件夹里面对应的文件和压缩包都拉到software文件夹里面
5.解压jdk文件:
tar -xzvf jdk-8u201-linux-x64.tar.gz
6.备份profile文件:
cp /etc/profile /home/
7.修改profile文件:
vi /etc/profile
8.修改内容:
export JAVA_HOME=/usr/local/software/jdk1.8.0_201
export PATH=$JAVA_HOME/bin:$PATH
9.更新path目录:
source /etc/profile
10.验证jdk是否安装成功:输入java和javac
3.安装mysql数据库
1.查询Linux系统中已安装的
rpm -qa|grep mar(查询安装的所有文件)
rpm -qa|grep mysql(查询是否安装mysql)
rpm -qa(查询所有安装的文件)
2.卸载原来的mysql5.5:
rpm -e --nodeps mariadb-libs-5.5.41-2.el7_0.x86_64
3.解压Mysql文件包:
unzip MySQL-5.6.39-1.el6.x86_64.rpm-bundle.zip
4.进入Mysql文件:
cd MySQL-5.6.39-1.el6.x86_64.rpm-bundle/
5.安装三个文件:
client devel server 一个个安装:
rpm -ivh MySQL-client-5.6.39-1.el6.x86_64.rpm
rpm -ivh MySQL-devel-5.6.39-1.el6.x86_64.rpm
rpm -ivh MySQL-server-5.6.39-1.el6.x86_64.rpm
4.启动mysql数据库
1.重启mysql:
service mysql restart
2.切换到software文件,查看mysql默认密码:
cat /root/.mysql_secret
3.登录mysql,修改密码为:123456,进入数据库修改,退出
1.登录mysql:mysql -uroot -p 密码(复制原始密码)
2.(在mysql>后面输入:set password=password("123456");
3.在mysql>后面输入:exit
4.用新密码登录进入mysql:
mysql -uroot -p123456
5.开启远程访问:
update mysql.user set host="%"where host="localhost"and user="root";
6.刷新权限:
flush privileges;
7.退出mysql:
exit
5.安装Apache-Tomcat
将项目OA源代码放到Tomcat的webapps
1.切换回software目录下:
cd software
2.解压Tomcat文件:
tar -xzvf apache-tomcat-8.0.38.tar.gz
3.解压OA文件:
unzip oa.zip
4.将OA文件移至webapps文件夹(在apache-tomcat-8.0.38文件夹里面):
1.mv oa apache-tomcat-8.0.38/webapps
2.cd apache-tomcat-8.0.38/webapp
5.切换回software文件路径:
1.cd ..
2.cd ..
3.ll
6.建立数据库连接
执行相应的sql脚本,创建项目的数据库和表结构
1.导入mysql数据:
1.mysql -uroot -p<redmoonoa.sql
输入密码:123456
2.mysql -uroot -p<cwbbs.sql
输入密码:123456
2.登录mysql查看是否存在上面两个数据
1.mysql -uroot -p123456
2.在mysql>后面输入:show databases;
3.exit
3.修改文件:
1.vi /usr/my.cnf
4.在【mysql】下面增加内容:
skip-grant-tables
lower-case-table-name=1
5.重启数据库
service mysql restart
6.进入WEB-INF/文件中修改proxool.xml文件: 将默认的密码修改为:123456
1.cd apache-tomcat-8.0.38/webapps/oa/WEB-INF
2.vi proxool.xml
7.在当前目录修改log文件:
1.先找出文件名:
2.find -name log4j.properties(或者:find -name log4*)
3.vi log4j.properties
3.修改路径:/root/software/oa.log(是指要把OA的日志文件存到哪个路径,自由选择)
7.启动Tomcat
22.启动Tomcat
1.cd apache-tomcat-8.0.38
2.cd bin
3../startup.sh
23.访问OA:
1.复制OA网址
2.在Linux环境中点击应用程序
3.打开火狐
4.复制网址
8.Linux环境搭建总结
面试问题:
1.配置服务器JDK,需要明确JAVA_HOME
2.安装服务器数据库
3.配置服务器Tomcat,将OA项目环境部署至OA中
4.重启数据库服务器,启动Tomcat,就可以通过URL直接访问
测试环境如何搭建
1. 首先使用xshell,secureCRT,xftp工具远程连接服务器;
2. 安装jdk,配置java环境变量;
3. 安装数据库软件(oracle,mysql,selserver等),启动数据库服务;
4. 建立数据库连接,执行相应的sql脚本,创建项目的数据库和表结构;
5. 安装Apache-Tomcat,将项目OA源代码放到Tomcat的webapps;
6. 修改相关的配置文件(数据库连接配置文件)
7. 启动Tomcat(Linux是点startup.sh windows是点start.bat)
六、MySQL语句
1.数据库的操作
1.创建数据库:
create database 数据库名;
2.查看数据库:
show databases;
3.切换/选择/使用数据库:
use 数据库名;
4.查看正在使用的数据库:
select database();
5.删除数据库:
drop database 数据库名
2.表的操作
1.建表
create table 表名(
字段名 类型,
字段名 类型,
...
字段名 类型
);
2.常用的数据类型
1.整数:int(范围-2147483648~2147483647)
2.小数:decimal(5,3)(整体长度最多5位,小数后最多3位,整数最多2位)
3.字符串:
varchar(20)(长度最多能输入20个字符)
enum('男','女')(提供可选择的性别,只能从该集合里面选值)
datetime:2019-02-14 14:51:12
date:2020-08-14
time:14:51:12
例如:创建学生表,字段要求如下: 学生ID(整数),学生姓名(长度20),分数(整体长度4位,小数1位),生日(格式YYYY-MM-DD),性别(只能填男或女)
create table student(
id int,
name varchar(20),
grade decimal(4,1),
birth date,
xb enum('男','女')
);
4.约束
主键约束:primary key(不能为空也不能重复)
非空约束:not null(不能为空)
唯一约束:unique(可以为空不能重复)
默认值:default(不赋值时用默认值)
外键约束:foreign key(与主键取值一致,主键表为主表,外键表为子表)
例如:创建学生表,字段要求如下: 学号(整数,主键),姓名(长度20,不能为空),分数(总长度4位,小数1位,默认值0),生日(格式YYYY-MM-DD),邮件(长度50,不能重复),性别(只能填男或女)
create table student(
xh int primary key,
xm varchar(20) not null,
fs decimal(4,1) default '0',
sr data,
yj varchar(50) unique,
xb enum('男','女')
);
外键约束
create table yjb(
xh int,
yj varchar(50),
foreign key(xh) references student(xh)
);
5.显示数据库中所有的表
show tables;
6.显示表结构
desc 表名;
7.修改表名
alter table 旧表名 rename to 新表名;
8.修改字段名
alter table 表名 change 旧字段名 新字段名 新字段的数据类型;
9.添加字段
alter table 表名 add 字段名 字段的数据类型;
10.删除字段
alter table 表名 drop 字段名;
11.删除表
drop table 表名;
3.数据的操作--查询
1.查询所有字段
select * from 表名
2.查询部分字段
select 字段1,字段2 from 表名;
3.给表起别名
select * from 表名 as 别名;
4.给字段起别名
select 字段1 as 别名1,字段2 as 别名2 from 表名;
5.去重
select distinct 字段1,字段2 from 表名;
(给字段1个字段2该列的数据去重)
6.加条件
select 字段1,字段2 from 表名 where 条件;
比较运算:
大于(>),小于(<),等于(=),不等于(!=或<>)
逻辑运算:
and:且,多个条件同时成立
or:或,多个条件成立一个即可
not:非,对某个条件取反
例1:查询李四的年龄
select nl from xsb where xm='李四';
例2:查询年龄小于20的女同学
select * from xsb where nl<20 and xb='女';
7.模糊查询 例1:查询姓名含冰的学生
select * from xsb where xm like '%冰%';
例2.查询姓王且名字是一个字的学生
select * from xsb where xm like '王_';
8.范围查询
in:表示在一个非连续的范围内
between 值1 and 值2:要求取值在值1和值2之间
例1.查询家乡是北京或上海或广东的学生
select * from xsb where jg='上海' or jg='北京' or jg='广东';
select * from xsb jg in('北京','上海','广东');
例2:查询年龄为18至20的学生
select * from xsb where nl between 18 and 20;
9.排序
select * from 表名 order by 字段1 asc/desc,字段2 asc/desc;
例:查询所有学生信息,按年龄从大到小排序,年龄相同时,再按学号从小到大排序
select * from xsb order by nl desc,xh asc;
select * from xsb order by nl desc,xh;
10.空判断 例1:查询课程名为空值的记录
select * from kcb where kcm is null;
例2:查询课程名不为空值的记录
select * from kcb where kcm is not null;
10.限制返回结果
select * from 表名 limit 开始,结束;
start 索引从0开始
例1:查询前3行学生信息
select * from xsb limit 0,3;
select * from xsb limit 3;
11.数据的更新
update 表名 set 字段1=值1,字段2=值2 where 条件;
例1.将成绩表里所有人的成绩减2分
update cjb set cj=cj-2;
例2:将002号学员的分数增加2分
update cjb set cj=cj+2 where xh=002;
例3:将001号学员的01号课程的分数增加2分
update cjb set cj=cj+2 where xh=001 and kch=01;
例4:将李四的性别更新为女,年龄更新为21岁
update xsb set xb='女',nl='21' where xm='李四';
12.数据的删除
delete from 表名 where 条件;
例1:删除08号课程记录
delete from kcb where kch='08';
注意:如果存在子表,需要先删除子表的相关记录,才能删除主表的相关记录
例2:删除成绩表所有记录
delete from cjb;
13.聚合函数
avg(字段):平均值
count(字段):某列的行数
max(字段):最大值
min(字段):最小值
sum(字段);总和
例1:查询所有学员的平均分
select avg(cj) from cjb;
例2:查询001号学员的平均分
select avg(cj) from cjb where xh=001;
例3:查询001号学员的成绩总分
select sum(cj) from cjb where xh='001';
14.数据分组
select 字段1,字段2,函数(字段)from 表名 group by 字段1,字段2;
例1:统计每个班级学员的人数?
select bj,count(*)from xsb group by bj;
mysql语句练习
use student;
-- 给kcb表起别名k
select * from kcb as k;
-- 给课程表里的Kcm起别名“课程名”
select Kcm as 课程名 from kcb;
select distinct bj from xsb;
-- 去掉性别和班级的重复信息
select distinct xb,bj from xsb;
-- 查询学号是002的学生年龄
select nl from xsb where xh='002';
-- 查询学号是007的身份证号信息
select sfzh from xsb where xh='007';
-- 查询1班的学生信息
select * from xsb where bj!='1班';
-- 查询年龄大于20岁的学生的姓名和性别
select xm,xb from xsb where nl>'20';
-- 查询来自河南或者河北的学生信息
select * from xsb where jg='河南' or jg='河北';
-- 查询来自上海的2班的学生信息
select * from xsb where bj='2班' and jg='上海';
-- 查询年龄20岁以外的学生信息
select * from xsb where not nl='20';
-- 查询1班或2班的女同学信息
select * from xsb where(bj='1班' or bj='2班') and xb='女';
-- 查询名字是两个字的学生信息
select * from xsb where xm like '__';
-- 查询名字姓刘的和年龄大于20的学生信息
select * from xsb where xm like '刘%' and nl>'20';
-- 查询学号以1结尾的学生
select * from xsb where xh like '%1';
-- 查询年龄在18或19或20的女生
select * from xsb where nl between 18 and 20 and xb='女';
select * from xsb where nl in('18','19','20') and xb='女';
-- 查询年龄在20到25以外的学生
select * from xsb where not nl between 20 and 25;
select * from xsb where nl<20 or nl>25;
-- 查询奖金comm为空的记录
select * from emp where comm is null;
-- 查询有经理mgr管理的员工是哪些人
select * from emp where mgr is not null;
-- 查询所有学生信息,按班级从小到大排序,班级相同时,再按学号从小到大排序
select * from xsb order by bj,xh;
-- 查询所有学生信息,按班级从大到小排序,班级相同时,再按学号从大到小排序
select * from xsb order by bj desc,xh desc;
-- 查询第4行到第6行的学生信息
select * from xsb limit 3,3;
-- 查询成绩表中成绩前三的记录
select * from cjb order by cj desc limit 3;
-- 将范冰的姓名修改为范冰冰,年龄修改为18岁
update xsb set xm='范冰冰', nl=18 where xm='范冰';
-- 删除03号课程的记录
delete from cjb where kch=03;
delete from kcb where kch=03;
-- 查询1班学员的平均年龄
select avg(nl) from xsb where bj='1班';
-- 查询课程表的平均分数
select avg(cj) from kcb;
-- 查询学号003号的平均分数
select avg(cj) from cjb where xh=003;
-- 统计1班有多少人
select count(*) from xsb where bj='1班';
-- 查询学生的平均年龄,学生人数,最大年龄和最小年龄
select avg(nl),count(xm),max(nl),min(nl) from xsb;
-- 统计每个岗位job的平均工资
select job,avg(sal) from emp group by job;
-- 统计除30号部门以外的人数和部门每月应发工资并且按每月应发工资进行降序排序
select deptno,count(*),sum(sal) from emp where deptno!=30 group by deptno order by sum(sal) desc;
-- 查询平均薪酬达到1500美元的岗位有哪些
select job from emp group by job having avg(sal)>=1500;
七、网络技术和web测试技术
1.认识网络协议
协议:对签订协议的双方或多方,都需要遵循的规定
网络协议:规定了互联网上要进行通信的计算机,必须遵守的协议
2.OSI 七层模型&概念模型
一、应用层:最上层的网络协议,直接面向用户提供服务的应用程序
HTTP: HyperText Transimission Protocol :超文本传输协议
超文本:规定了网络可以传输普通文件、图片、链接、视频等等
FTP: File Transimission Protocol : 文件传输协议
作用:用于传输各种文件格式
SMTP:邮件传输协议
DNS:域名解析服务
作用:把域名解析为IP
二、表示层:负责对网络传输的数据进行编码,压缩等工作(相当于是翻译官)
三、会话层:用于管理和维护链接的建立、终止等
比如电话连接,包括拨打电话到接通电话,挂断电话
四、传输层:负责端到端的传输:TCP和UDP
五、网络层:
IP协议:Internet Protocol : 网络互联协议
规定了互联网上通信的计算机,必须要有IP地址
比如,要和百度网站的服务器通信,要有百度的IP
为什么浏览器上输入域名网址,没有IP,也能和百度服务器通信?
DNS把域名解析成IP
六、数据链路层
七、物理层
物理概念模型:
由于OSI 网络模型过于复杂,所以对OSI模型进行了简化抽象,形成了TCP/IP四层概念模型
应用层 传输层 网络层 网络接口层
3.TCP和UDP协议
TCP协议
TCP : Transmission Control Protocol : 传输控制协议
特点:
1.建立连接,三次握手
第一次握手:客户端发送一个网络报文给到服务器,告诉服务器客户端想和服务器建立连接
网络报文:SYN=1,seq=x
第二次握手:服务端响应一个网络报文给到客户端,告诉客户端可以建立连接
网络报文:SYN=1,ack=x+1,seq=x+1
第三次握手:客户端发送一个网络报文给到服务器,告诉服务器正式建立连接
网络报文:SYN=1,ack=y+1,seq=x+1
三次握手建立连接后,数据就开始传输了,数据传输完以后,需要断开连接
2.断开连接:四次挥手
第一次挥手:客户端发送一个断开连接的报文给到服务器
网络报文:FIN=1,seq=x
第二次挥手:服务器响应网络报文给到客户端可以断开连接,但是断开连接需要一些准别工作
网络报文:FIN=1,ack=x+1,seq=y
第三次挥手:服务器响应网络报文告诉客户端,断开连接的准备工作已经完成,可以断开连接
网络报文:FIN=1,ack=x+1,seq=z
第四次挥手:客户端在发送网络报文给服务器,告诉服务器彻底断开连接
网络报文:FIN=1,ack=z+1,seq=h
第四次挥手后,客户端和服务器彻底断开连接,数据停止传输
三次握手和四次挥手,共同保证了数据传输的可靠性和稳定性,但是TCP比较占用资源
可靠性体现:数据传输无差错,不重复,不丢失
应用场景:网页、APP应用
UDP协议
UDP协议User Datagram Protocol:用户数据报协议
特点:
udp是无连接的协议
udp协议会尽最大的努力进行数据交付,但不保证数据不会丢失
udp协议是不可靠的,不保证数据传输的稳定性和可靠性,但是传输速度相对TCP而言较快
不可靠:数据可能会出现差错、丢失等
UDP协议应用场景:游戏,音频和多媒体
TCP和UDP协议的区别:
TCP:
优点:面向连接,建立连接需要三次握手,断开连接需要四次挥手,保证了数据传输的稳定可靠
缺点:比较占用资源,传输速度较慢
UDP:
优点:速度较快,节省资源
缺点:不可靠,数据传输可能会出差错或丢失
4.HTTP协议和Fiddler抓包
HTTP协议
HTTP协议(HyperText Transmisson Projocol):超文本传输协议,用于各种超文本(包括图片,视频,链接,文字等)
抓包:抓取网络数据包
网络数据包:例如用户登录页面填写了账号密码
fiddler是一个抓包工具,能够抓取http和https的协议和网络请求
HTTP协议是请求响应式的:
请求:
1.Requests URL: 请求URL: 规定了网络请求要发送到哪个地址
2.Requests Header : 请求头:
Host: 172.30.63.23:8080(主机ip地址和端口号port)
Ip中存在两个特殊的ip:localhost和127.0.0.1------这两个都是指的本机ip;(只有服务器在本机才能用这个ip)
Connection: keep-alive
Connection:连接
keep-alive:长连接、持久连接
连接方式:http默认是短连接----加keep-alive就是长链接。
如果没有设置keep-alive,网页上的每一个请求,都需要建立tcp连接,都需要三次握手四次挥手。设置了keep-alive后,浏览器和服务器会建立长连接,等页面所有请求加载完毕,再断开连接
Content-Length:75
请求正文的长度--就是指请求的内容为75个字节。
Accept: application/json, text/javascript, q=0.01(接收的文本类型,客户端需要告诉服务器,我能接收哪种类型的文本)
X-Requested-With: XMLHttpRequest(发送请求的一种方式)
同步的操作;----什么时候登录就是什么时候出结果。
异步,不登录也能看到结果。----注册时输入完账户就看到账户ok/已注册
User-Agent: Mozilla/5.0(Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55Safari/537.36Edg/96.0.1054.34
客户端标识信息(客户端使用的操作系统,浏览器版本信息)
Content-Type: application/x-www-form-urlencoded; charset=UTF-8(规定了请求的文本类型,客户端发送的请求文本类型)
r"Origin:http://172.30.63.23:8080"(网站服务器的主机信息)
Referer:r" http://172.30.63.23:8080/LexianMall/sc/login.html"(请求来自哪个页面)
Accept-Encoding: gzip, deflate
接收的编码类型
Accept-Encoding: gzip, deflate(接收的编码类型)
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6(接受的语言)
3. Requests Method: 请求方式
Post: 用于修改服务器的资源,比如增加修改删除数据库的数据(insert,delete,update),post请求的请求参数是放在请求Body内,不会被限制长度,并且相对安全
Get: 用于获取服务器的资源,比如查询数据库的数据(select)
get请求的请求参数是放在请求URL内的,不够安全,浏览器会对请求URL长度做限制,通常限制长度是2048个字节,超出长度的部分会被浏览器截取掉,导致请求参数丢失
4. 请求参数:
通常是用户填写在页面上的数据
面试问题:post请求有几种方式? 4种。
application/x-www-form-urlencoded--原生表单形式提交。
Application/json--json的形式提交,比较友好。(json可以当做Python中的字典,也是键值一一对应的。)
Form-data的形式--主要是指提交一些文件/图片的上传
text/xml的格式--主要是返回的数据json+xml的格式,这种情况比较少
响应:
1. 状态码:
1**: 代表服务器接收到请求,需要客户端继续进行操作
2**: 代表请求是正常:指的是网络传输层面的正常 : 200
正常: 客户端把数据发送给到了服务器,服务器也把响应给到了客户端
输入了正确的账号错误的密码,服务返回了:登录失败。状态码是200吗?
是。客户端把正确的账号错误的密码发送给了服务器,并且服务器把判断
结果返回给了客户端,客户端 和服务器之间数据传输是正常的,所以是200
3**:代表重定向请求
4**:代表前端的请求异常
404: 找不到页面
5**: 代表后端的异常
500: 服务器异常
问题1:如果访问某页面出现了404----要不要提bug?
响应码404是指找不到页面
如果:url地址输入错误或者资源找不到就是我们自己的问题--就不能提bug
如果某文件必须存在,但是访问时却没有-------这种情况就要提bug
问题2: 301和302有什么区别?
301是指永久性重定向,302是指临时性重定向
2. 响应头
3. 响应数据
服务器处理请求以后,把客户端需要的数据,返回给前端
目前要求:
抓包能够抓取HTTP协议的请求和响应,能够分辨哪些是请求头,哪些是请求参数,哪
些是响应数据等等
响应:
1.状态码:
1**:代表服务器接收到请求,需要客户端继续进行操作
2**:代表请求是正常,指的是网络传输层面的正常:200
正常:客户端把数据发送给到了服务器,服务器也把响应给到了客户端
例:输入了正确的账号和错误的密码,服务器返回了:登录失败。状态码也 是200,因为客户端把正确的账号错误的密码发送给了服务器,并且服务器 判断结果犯规给了客户端,客户端和服务器之间数据传输是正常的。
3**:代表重定向请求
4**:代表前段的请求异常。例:400:找不到页面
5**:服务器异常
2.响应头
3.响应数据:服务器处理请求以后,把客户端需要的数据,返回给前端
网络架构:
BS架构
B===请求===》S
请求URL,请求头,请求参数,请求方式
B===《响应===S
响应状态码,响应头,响应数据
(测试人员在接口测试中需要重点关注的是请求参数和响应数据)
HTTP协议是无状态的:
无状态指的是不同的HTTP请求之间,互不关联
例:登录和添加商品到购物车两个请求互不关联,那就意味着添加商品到购 物车时,不知道用户有没有登录,为了解决这个问题,引入了Cookie和Session
Cookie:存储在本地浏览器的一小段文本;
不同的网站,cookie互相隔离,互不影响
cookies的生命周期:
1.服务器设置cookie到浏览器本地(设置的时候会规定的有效时 间
2.cookies过期后,会被浏览器自动销毁
作用:
1.用于存储用户的身份标识(登录态)
2.用于记录用户的行为,从而分析用户的喜好,做进一步的广告推送登 服务
Session:会话
存储在服务器的,用于服务器区分请求是哪一个用户
有了session,网站能区分用户的身份信息
session一旦被销毁,网站就不知道用户是谁了,需要用户重新登录
用户如果长时间未访问网站,服务器会销毁掉session。
例如:用户长时间未操作网站,会自动退出登录
登录时会,服务器会创建session,并设置cookie给客户端,退出登录 或者长时间未操作网站时,服务器自动销毁session,cookies过期后, 浏览器会自动销毁过期的cookie
5.链接测试
单个链接:验证链接的文本,链接的地址,链接图片,css样式
多个链接:xenu(链接检测工具),可以自动检查页面的链接是否可以正常打开,但是文本没办法检测,文本需要用到自动化
6.表单测试
表单:给用户填写信息
比如注册表单,用于提供给用户填写信息,注册账户使用
软件的质量属性:衡量一个软件的质量,需要考虑哪些方面
功能性:
界面:
兼容性:
易用性:
安全性:
性能:验证多个用户并发下,系统功能是否正常
可移植性:验证软件的代码能否移植到不同的系统平台
可维护性:验证软件崩溃后,能否快速恢复运行的能力
注册表单,怎么测试?(以51testing的注册表单为例)
功能性测试:
一、提取功能点
1.用户名长度格式限制
2.密码长度格式限制
3.确认密码和密码的一致性
4.邮箱长度格式的限制
5.验证问答校验答案
6.验证码
7.提交
8.用户协议勾选
二、编写测试点
1.1.用户名长度是否在3-15个字符之间
1.2.用户名格式校验:空格,特殊字符(取决于需求文档的规定)
1.3.用户名唯一性校验,已经注册的用户,是否不允许再注册一个相同的用户
2.1.密码长度是否在规定的长度范围内
2.2.密码格式的校验:是否允许空格,特殊字符等
2.3.密码是否加密提示
3.1.确认密码和密码不一致,是否会提示用户
3.2.确认密码和密码一致,是否显示正常
4.1.是否符合邮箱格式:邮箱用户名@邮箱后缀:1002794646@qq.com
4.2.邮箱是否允许和已注册用户的邮箱重复
5.1.是否能加载出验证问答的题目和答案
5.2.用户输入答案,是否能判断答案的准确性
5.3.刷新是否能刷新题目和答案
5.4.验证问答过了时效,再输入对应的答案,是否提示答案错误并自动刷新验证答 案
5.5.验证问答输入了答案又刷新题目,是否能够判断输入的答案是否符合最新的验 证问答
6.1.用户输入验证码,是否能够判断验证码的准确性
6.2.验证码过了时效再输入,是否提示验证码错误并自动刷新验证码
6.3.验证码是否能正常加载
6.4.是否能刷新验证码
6.5.输入了验证码答案又刷新验证码,是否能够判断输入的验证码是否符合最新的 验证码
7.1.输入正确的数据,点击提交注册,能够正常注册一个用户
7.2.输入已注册的用户名,提交注册,是否会提示“该用户已存在”
8.1.不勾选协议,是否会提示用户勾选协议
8.2.不勾选协议,是否不能注册
8.3.勾选协议后,输入正确的信息,能否注册成功
8.4.点击协议链接,是否能够展示对应的协议内容
界面:
开发人员开发页面时,是根据UI设计人员画出来的图,进行开发的
界面样式外观是否符合UI设计
例:用户输入错误时,输入框是否变红
兼容性:
1.不同的浏览器及版本==>浏览器内核
IE内核(Trident):已IE浏览器为首,包括360安全浏览器
Chrome内核(Webkit):以谷歌浏览器为首,包括Edge,360急速浏览器,搜狗高速浏览器等
Firefox内核(Gecko):火狐浏览器
2.不同的操作系统(Windows,Linux,MaxOS等)
3.不同的分辨率
易用性:
易于用户使用,站在用户的角度去考虑,不同的用户群体,对于易用性的需求不一样
例:老人希望网页字体大一点,青少年希望网页酷炫好看一点
易用性测试,要求测试人员,需要分析清楚网站是面向哪种用户群体的
51testing的注册表单:
针对互联网开发和测试人员,通常希望界面简洁,方便用户学习
是否有字段填写错误提示
安全性:信息安全
密码是否加密显示
性能:多个用户同时注册,能否成功注册
可移植性:表单的代码是否能够快速移植到不同的平台
可维护性:服务器崩溃后,能否快速恢复,给用户提供注册
7.数据库测试
数据库测试:
增:增加数据
例注册功能,会插入一条用户信息的数据,需要校验插入的数据是否正确
删:删除数据
删除用户,会删除对应的用户数据,需要确认是否删除成功
如何确认用户是否删除成功:可以通过数据查询该用户是否还存在
改:修改数据
修改用户姓名,修改以后,需要去数据库确认是否修改成功
查:查看数据
例页面查看的用户信息,是否和数据库一致