1
web测试
web测试..............................................................................................................................1
1. 分类及测试要点..........................................................................................................7
1.1. 功能测试...............................................................................................................7
1.1.1. 测试方面.......................................................................................................7
1.1.2. 测试点.........................................................................................................15
1.2. 性能测试.............................................................................................................20
1.2.1. 工具.............................................................................................................20
1.2.2. 分类.............................................................................................................21
1.3. 安全性测试.........................................................................................................35
1.3.1. 类型.............................................................................................................36
1.3.2. 工具.............................................................................................................44
1.4. 兼容性测试.........................................................................................................44
1.4.1. 浏览器兼容性.............................................................................................44
1.4.2. 系统兼容.....................................................................................................45
1.4.3. 显示分辨率.................................................................................................45
1.4.4. 插件兼容.....................................................................................................46
1.5. 其他测试.............................................................................................................46
1.5.1. 接口测试.....................................................................................................46
1.5.2. 易用性测试等.............................................................................................48
2. web自动化................................................................................................................48
2.1. 类型.....................................................................................................................48
2.1.1. UI自动化......................................................................................................49
2.1.2. 接口自动化.................................................................................................49
2.2. 自动化框架实践.................................................................................................49
2.2.1. 自动化框架.................................................................................................49
2.2.2. 自动化项目实施.........................................................................................50
2.2.3. GIT源代码管理............................................................................................50
2.2.4. 持续集成(CI) ..........................................................................................51
2.3. 单元测试.............................................................................................................51
2.3.1. unittest.........................................................................................................51
2.3.2. 断言方法.....................................................................................................51
2.3.3. 单元测试用例的设计.................................................................................51
2.3.4. 用例执行顺序的控制.................................................................................51
2.3.5. 测试脚本分析.............................................................................................52
2.4. 自动化测试模型.................................................................................................52
2
2.4.1. 自动化测试模型.........................................................................................52
2.4.2. 模块驱动测试.............................................................................................52
2.4.3. 关键字驱动测试.........................................................................................52
2.4.4. 数据驱动测试与实例.................................................................................52
2.4.5. 模块化测试模型实例.................................................................................52
2.5. 自动化测试深度开展.........................................................................................52
2.5.1. html测试报告..............................................................................................52
2.5.2. 测试报告的制定和维护.............................................................................52
2.5.3. 邮件的推送.................................................................................................53
2.6. Page Object .........................................................................................................53
2.7. Selenium Grid2....................................................................................................53
2.7.1. Selenium Server ...........................................................................................53
2.7.2. Selenium Grid ..............................................................................................53
2.7.3. Remote.........................................................................................................53
2.7.4. WebDriver驱动............................................................................................53
2.8. 自动化测试基础.................................................................................................53
2.8.1. 分层的自动化测试.....................................................................................53
2.8.2. 自动化工具对比.........................................................................................53
2.8.3. selenium介绍...............................................................................................53
2.9. 自动化环境的部署.............................................................................................54
2.9.1. python的环境部署......................................................................................54
2.9.2. selenium工具集...........................................................................................54
2.9.3. selenium环境搭建.......................................................................................54
2.9.4. 浏览器驱动的部署.....................................................................................54
2.9.5. webdriver的入门.........................................................................................54
2.10. 定位元素.........................................................................................................54
2.10.1. 定位元素(id、name等) .....................................................................55
2.10.2. 快速定位元素插件..................................................................................55
2.10.3. 浏览器操作..............................................................................................55
2.10.4. 鼠标、键盘事件......................................................................................55
2.10.5. 验证信息的获取......................................................................................55
2.10.6. 元素的等待..............................................................................................55
2.10.7. 表单、窗口切换......................................................................................55
2.10.8. cookies的操作.........................................................................................55
2.10.9. 验证码的处理..........................................................................................55
2.10.10. 截图..........................................................................................................55
3. 需要掌握的知识.......................................................................................................55
3.1. 理解web..............................................................................................................56
3
3.1.1. 1、网络基础知识.......................................................................................56
3.1.2. 2、web系统基础........................................................................................63
3.1.3. 3、web核心技术........................................................................................63
3.2. 网络协议.............................................................................................................64
3.2.1. 网络协议模型.............................................................................................64
3.2.2. 2、TCP/IP协议.............................................................................................69
3.2.3. 3、HTTP/HTTPS协议...................................................................................76
3.3. web开发技术....................................................................................................104
3.3.1. 客户端开发技术.......................................................................................105
3.3.2. 服务器端开发技术...................................................................................105
3.4. web测试技术....................................................................................................106
3.4.1. 软件测试原理...........................................................................................106
3.4.2. 测试技术...................................................................................................106
3.4.3. web性能....................................................................................................108
3.4.4. 安全...........................................................................................................123
3.5. 服务器及部署知识...........................................................................................149
3.5.1. apache........................................................................................................150
3.5.2. tomcat........................................................................................................150
3.5.3. ant ..............................................................................................................150
3.5.4. git ...............................................................................................................150
3.5.5. maven等工具............................................................................................150
3.6. 浏览器机制.......................................................................................................150
3.6.1. 理解浏览器在处理javascript及渲染CSS的机制......................................150
3.6.2. 了解IE与其他浏览器的差异....................................................................150
3.6.3. 为什么兼容性测试时需要特别关注IE ....................................................150
3.6.4. 浏览器在加载javascript,CSS有时在前面有时在后面,为什么?......150
3.6.5. 加载顺序会对视觉和使用上有什么影响呢? .......................................150
3.6.6. 常见内核和对应的浏览器.......................................................................151
3.7. web架构............................................................................................................153
3.7.1. 软件出错时怎么个报警法?是否有详尽的log记录? ..........................153
3.7.2. 服务器缓存机制如何? ...........................................................................153
3.7.3. 数据库如何主从同步,如何备份的? ...................................................153
3.7.4. 集群如何处理session的?........................................................................153
3.8. 其他需要掌握技能...........................................................................................153
3.8.1. Linux...........................................................................................................154
3.8.2. 脚本语言等...............................................................................................156
3.9. SEO ....................................................................................................................156
3.9.1. XML sitemap的意义,可以让搜索引擎了解你的网站地图..................157
4
3.9.2. 了解 robots.txt 和搜索引擎爬虫是如何工作的.....................................157
3.9.3. 友好的搜索引擎URL.................................................................................157
3.9.4. 重定向301和302 .......................................................................................157
3.9.5. 网页Meta信息中title,description等的重要性......................................158
3.10. 用户体验.......................................................................................................158
3.10.1.
访问网站的用户操作行为是怎么样的?页面的访问频率占比如何?
因为测试的精力和侧重点也要根据这个数据而定.............................................158
3.10.2. 网站部署时是否会影响到用户使用,如何避免?............................159
3.10.3. 不要直接显示不友好的错误提示,是否有友好的提示信息?........159
3.10.4. web应用不能泄漏用户的隐私信息.....................................................159
3.10.5. 页面是在当前页打开还是另开一个tab? ..........................................159
3.10.6. 页面元素的布局如何影响到用户体验的?........................................159
3.11. ORACLE/SQL ..................................................................................................159
3.11.1. 简单查询语句........................................................................................159
3.11.2. 限制性查询和数据的排序....................................................................159
3.11.3. 常用的SQL*PLUS语句...........................................................................160
3.11.4. 单行函数................................................................................................160
3.11.5. NULL值的处理、逻辑操作和函数嵌套...............................................160
3.11.6. 分组函数................................................................................................161
3.11.7. 多表查询................................................................................................161
3.11.8. 子查询....................................................................................................162
3.12. 使用工具.......................................................................................................162
3.12.1.
HttpWatch,基于IE的网络数据分析工具,包括网页摘要,Cookies管
理,缓存管理,消息头发送/接受,字符查询,POST 数据和目录管理功能等
163
3.12.2. FireBug,用途同上,基于firefox的.....................................................163
3.12.3.
Yslow,前端网站性能工具,显示测试结果的分析,分为等级、组件
、统计信息.............................................................................................................163
3.12.4.
Fiddler,强大的web前端调试工具,它能记录/拦截所有客户端和服
务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据,也
可用于安全测试.....................................................................................................163
3.12.5. Chrome扩展程序:浏览器兼容性检测工具,分析网站的兼容性情况
163
5
3.12.6.
ShowIP:显示访问网站的IP,web测试中你是否经常因为访问的网站
IP不对,而被开发人员BS呢?它能帮助到你。..................................................163
3.12.7. 网络限速等工具:netlimiter................................................................163
6
7
1. 分类及测试要点
1.1.功能测试
1.1.1. 测试方面
1、链接测试
8
1)测试所有链接是否按指示的那样确实链接到了该链接的页面
2)测试所链接的页面是否存在
3)测试web应用系统上没有孤立的页面
2、表单测试
表单一般指在界面进行数据提交操作的,包括新增和修改数据
1)输入框测试
——
长度、数据类型、必填、重复、空格、sql注入以及一些业务相关约束
9
2)下拉框测试
——
默认值、数据完整性/正确性、第一个/最后一个/中间一个选取、手动
输入值模糊匹配、联动选择;业务常见选取的操作
3)图片、视频、excel、txt等文件上传测试
——大小、尺寸、格式、数量、文件内容规则验证
4)表单提交按钮测试
——
是否支持回车/单击、快速多次点击是否重复提交表单、网络中断(弱
网)提交、提交之后是否有提示、提交后内容是否加密、提交是否做权
限校验控制、多人针对表单同时操作的场景测试
3、搜索测试
10
搜索条件一般为2种情况:输入框、下拉框
1)任单个条件查询
模糊搜索、超长搜索、不存在与之匹配的条件、为空
2)任两个组合查询
确保任两个组合查询的正确性,验证两个组合的所有情况。
3)三个组合查询
11
不需要测试三个组合的全部级组合。因为前面针对所有单个条件的搜索
、两个组合的所有组合进行测试了,那么在这里选择2-
3组三种组合进行测试即可。
4)全条件组合查询
确保最大组合的正确性。
5)默认条件查询
补充默认条件查询的用例
6)根据需求或者业务规则选取重点条件组合查询
时间输入框
12
1)开始时间<=结束时间,测试一个小时、跨时、当天、跨天、跨月、跨
年的数据
2)开始时间大于/小于当前时间,若是针对出生年月搜索,验证大于的
情况;若是定时任务时间搜索验证小于的情况
3)只输入开始时间/结束时间
4)开始时间、结束时间都不输入
5)结束时间早于开始时间
6)手动输入时间,注意时间格式验证
4、删除测试
1)没选择数据,点击删除
13
—是否有友好提示
2)选择一条数据,点击删除
—是否提示删除确认信息,需二次确认
3)删除一条数据后,点击添加
—是否可以添加相同的数据
3)连续删除多个产品,选择批量删除
14
—是否支持
4)选择全选,点击删除
—注意是否把所有的数据删除
5)删除一个有关联性的数据,(如删除QQ分组,组下好友会有提示)
6)所有删除数据操作,要注意相应查询页面及其关联界面的数据是否及时
更新
5、cookies、session测试
cookies/session通常用来存储用户信息,Cookie通过在客户端记录信息确定
用户身份,session通过在服务器端记录信息确定用户身份
15
1)打开WEB系统后,在浏览器默认存储cookies的目录下看此cookies目录
是否存在。
2)已知cookies的保存时间,测试时间范围之内和之外的cookies文件是否
正常
3)将浏览器下的所有cookies文件全部删除。再次登录web系统,会怎么
处理
6、数据库测试
在web应用技术中,数据库就是一个“仓库”,我们在进行功能测试的任何操
作都可以归溯到是对于数据库的增删改查
1、数据库脚本执行—数据库表添加、修改是否正常
2、页面提交表单、修改、查询、删除 —数据库表信息是否正常
1.1.2. 测试点
16
页面部分
(1)页面清单是否完整(是否已经将所需要的页面全部列出来了)
(2)页面是否显示(在不同分辨率下页面是否存在,在不同浏览器版本中
页面是否显示)
(3)页面在窗口中的显示是否正确,美观(在调整浏览器窗口大小时,屏
幕刷新是否正确)
(4)页面特殊效果(如特殊字体效果,动画效果是否显示)
(5)页面特殊效果显示是否正确
页面元素部分
17
(1)页面元素清单(为实现功能,是否将所需要的元素全部都列出来了,
如按钮,单选框,复选框,列表框,输入框等)
(2)元素是否显示(元素是否存在)
(3)元素是否显示正确(针对文字,图形,签章等)
(4)元素的外形,摆放位置是否合理(如按钮,单选框,复选框,列表框
,输入框等)
(5)元素基本功能是否实现(如文字特效,动画特效,按钮,超链接等)
(6)元素的容错性列表(如输入框,时间列表或日历)
(7)元素的容错性是否正确或存在
功能部分
(1)数据初始化是否执行
(2)数据初始化是否正确
18
(3)数据处理功能是否执行或正确
(4)数据保存是否执行或正确
(5)是否对其他功能有影响
(6)如果影响其他功能,系统能否做出正确的反应
(7)对模块的具体功能进行测试时可以列出功能模块所有的功能,进行排
列组合,测试所有情况
(8)查询功能分2种--
验证操作结果,打开页面时自动显示结果,则不需要特别强调;需要手工
操作进行查询,则每次在其他功能完成后进行
提示信息
(1)成功,失败提示
(2)操作结果失败
(3)确认提示
(4)危险操作,重要操作提示
(5)返回页面提示后显示的页面
19
容错性
(1)为空,非空
(2)唯一性
(3)字长,格式
(4)数字,邮编编码,电话,电子邮件,ID号,密码
(5)日期,时间
(6)特殊字符(对于数据库),英文单词,单双引号
权限部分
(1)功能:指定用户可以使用哪些功能,不能使用哪些功能
(2)数据:指定用户可以处理哪些数据,不可以处理哪些数据
(3)操作:在逻辑关系上,操作前后顺序,数据处理情况
(4)权限变化
20
键盘操作
(1)Tab键
(2)上下方向键
(3)Enter键
(4)系统设定快捷键
1.2.性能测试
1.2.1. 工具
21
Loadrunner
Jmeter等
1.2.2. 分类
前端性能
web优化的黄金法则
22
80%的最终用户响应时间花在前端程序上,而其大部分时间则花在各种页
面元素,如图像、样式表、脚本和Flash等,的下载上。减少页面元素将
会减少HTTP请求次数。这是快速显示页面的关键所在
web前端性能关注点
加载时间
a. Time to First Impression
23
表示从用户在浏览器键入url按下回车键一刻开始到页面开始有反应(
用户可以在页面中看见一点点内容)为止。经常能感觉到的一个信号
就是网页开始显示title。
b.Time to onLoad Event
表示从页面开始显示内容,到浏览器开始触发OnLoad函数这一时间段
。只有当初始的文本和所引用的对象加载完成,浏览器才开始触发O
nLoad函数
c.Time to Fully Loaded
表示从上一时间段末到整个网页完全加载完成(所有OnLoad函数以及
相关的动态资源加载完成)。在网页中含有timeout或定时刷新之类
处理时较为难判断结束点。
资源情况
24
网页由初始的html文本中嵌入图片以及通过XHR或者修改dom树动态加
载的内容组成,css负责样式,js负责行为。所以当网页资源过多为了下
载资源,客户端和服务器的网络来回就更多。
a. Total Number of Requests
包括html网页请求,css、js资源下载及其它网络请求。优化的目标
之一是要尽量减少请求数。
b. Total Number of HTTP 300s/400s/500s
表示返回状态为300(重定向)、400(客户端错误)、500(服务
器端错误)的http请求。尽量避免这些请求,以提高页面load的时
间。造成这些状态的原因经常是服务器的实施、配置和部署问题。
c. Total Size of Web Site
25
构成网页元素总的大小。图片或者js库的增加都会对下载时间造成
重要的影响。
d. Total Size of Images/CSS/JS
image、css、js在网页元素大小中占主要比例。
e. Total Number of XHR(XMLHttpRequest) Requests
通过js异步从服务器端获得数据的请求数。一些js框架提供了跟服务
器端的更新机器,就是XHR请求。通过配置可以减少XHR请求的数
目
网络连接
26
浏览器底层的网络连接对资源的下载速度有很大影响。资源的下载过程
分为很多阶段
a. DNS Time
dns
查询的时间。网页请求会产生一次寻找该网页资源所在主机的dns
查询。在同个域名进行网页切换不会造成新的dns查询。
b. Connect Time
指浏览器和服务器之间建立tcp/ip连接的时间,对于ssl连接包括握
手的时间。网络连接过慢、使用ssl、使用短连接而非常连接都是造
成connect time较多的原因。
c. Server Time
27
指收到请求后服务器逻辑处理的时间
d. Transfer Time
这一指标与浏览器和服务器之间的连接速度相一致,通过减小传输
内容或使用cdn来降低Transfer Time。
e. Wait Time
等待时间和同一个域中服务资源的数量直接相关。每个域的浏览器
的物理网络的限制,导致资源等待可用的连接。减少资源的数量,
或将资源散布在不同的域,能将这一时间降低。平均等待时间的大
小更能反映等待时间是否需要注意。
28
f. Number of Domains / Single Resource Domains
部署网站资源的域主机数量是很重要的,因为它影响的DNS,连接
和等待时间。
专门用户资源下载的域是必要的,他将直接减少等待时间。应避免
单一的资源域,否则你将为dns查询以及资源下载付出昂贵的代价
服务器性能
常见指标
29
时间指标
服务器响应时间(Server Response Time)
客户端发送一个HTTP请求至收到HTTP响应头信息消耗的时间。
页面响应时间(Page Response Time)
客户端从Web服务器请求一个完整的页面(包括内嵌对象)所消耗的时
间。
往返时间(Round Trip Time)
建立TCP连接时,从客户端发送SYN请求到服务器返回SYN/ACK的时间
。
30
TCP连接建立时间
客户端发出访问请求后,与Web服务器成功建立TCP连接所需的时间
。
系统容量指标
并发用户数(Concurrent Users)
Web服务器能够同时正确及时地服务的用户数。
每秒用户数(User Per Second)
单位时间(1s)内成功连接到Web服务系统的新用户的个数。
31
并发连接数(Simultaneous Connections)
Web服务器能够与客户端建立并保持同时打开的TCP连接数,最大并
发连接数反映了Web服务器所对其客户多个连接的处理能力。
连接速率(Connect ion Rate)
客户端与Web服务器在单位时间(1s)新建立的TCP新建连接的个数。
事务处理次数(Cumulative Transactions)
Web服务器处理HTTP Transaction的累计总数定义为事务处理次数。
事务处理速率(Transactions Per second)
在单位时间(1s)内成功响应HTTP Transaction的个数。
资源利用率指标
32
资源利用率是指Web服务器不同资源(如服务器的CPU,内存、磁盘、
网络带宽等)的使用程度,它常常用占资源的最大可用量的百分比来衡
量。Web服务器资源利用率指标包括CPU占用率、内存占用率、磁盘占
用率、可用网络带宽。
测试关注点
a. web服务的连接速度如何?
b. 每秒的点击数如何?
c. Web服务能允许多少个用户同时在线?
d. 如果超过了这个数量,会出现什么现象?
e. Web服务能否处理大量用户对同一个页面的请求?
f. 如果web服务崩溃,是否会自动恢复?
g. 系统能否同一时间响应大量用户的请求?
33
h. 打压机的系统负载状态
测试方法
并发性能测试
负载测试
确定在各种工作负载下系统的性能,通过在被测系统上不断增加压力
,直到性能指标超过预定指标或某种资源使用已经达到饱和状态。主
要目的:寻找Web服务器的处理能力极限,包括支持的最大用户、业
34
务等处理能力的约束;了解Web系统性能容量;配合Web系统进行调
优。测试角度可以是并发用户数、业务量、数据量等不同方面的负载
。
压力测试
通过确定一个系统的瓶颈或者不能再接收的极限点,来获得系统所能
提供的最大服务级别的测试。压力测试方法测试Web服务器在资源处
于饱和或超负荷的情况下(例如CPU、内存等在饱和状态下),系统
能够处理的HTTP请求或用户会话的能力以及系统是否会出现错误。其
主要意义是通过测试、调优保证系统即使在用户的极端压力下也不会
出错甚至或者导致系统崩溃。因此可以认为是一种在极端压力下的稳
定性测试。
疲劳强度测试
35
疲劳强度测试也称持久度测试(durability),可以被当作是一个长期的负
载或压力测试,它是选择Web服务器稳定运行情况下能够支持的最大并
发用户数,持续执行一段时间业务,通过综合分析交易执行指标和资源
监控指标来确定系统处理最大工作量强度性能的过程。疲劳强度测试可
以采用工具自动化生成的方式进行测试,也可以手工编写程序测试,其
中后者占的比例较大。
一般情况下以Web服务器能够正常稳定响应请求的最大并发用户数进行
一定时间的疲劳测试,获取交易执行指标数据和系统资源监控数据。如
出现错误导致测试不能成功执行,则及时调整测试指标,例如降低用户
数、缩短测试周期等。还有一种情况的疲劳测试是对当前系统性能的评
估,用系统正常业务情况下并发用户数为基础,进行一定时间的疲劳测
试。
1.3.安全性测试
36
1.3.1. 类型
1.跨站脚本(XSS)
37
XSS又叫CSS(CROSS SET
SCRIPT),跨站脚本攻击。它指的是恶意攻击者往WEB页面里插入恶意的h
tml代码,当用户浏览该页面时,嵌入其中的html代码会被执行,从而达到
恶意用户的特殊目的;(钓鱼、盗取cookie、操纵受害者的浏览器、蠕虫
攻击)
2.反射型跨站(Reflected XSS)
服务器端获取http请求中的参数,未经过滤直接输出到客户端。如果这些
参数是脚本,它将在客户端执行(钓鱼常见)。
3.存储型跨站(Stored XSS)
用户输入的数据存在服务器端(一般存在数据库中),其他用户访问某个
页面时,这些数据未经过滤直接输出。这些数据可能是恶意的脚本,对其
他用户造成危害。(挂马常见)
38
在允许上传文件的应用中,攻击者上传一个包含恶意代码的html或者txt文
件,用户浏览这些文件执行恶意代码;
一般的应用中上传图片最普遍,如果图片中包含恶意代码的html或者txt文
件,,低版的IE直接请求这个图片时,将忽略Content-
Type执行图片中的代码。
4.DOM跨站(DOM-Based XSS)
攻击者构造一个包含恶意Javascript的URL,然后引诱用户请求这个URL。服
务器收到请求后没有返回恶意的Javascript。
浏览器在处理URL中的数据时,执行恶意代码。
5.跨站请求伪造(CSRF)
强迫受害者的浏览器向一个易受攻击的Web应用程序发送请求,最后达到攻
击者所需要的操作行为。
恶意请求会带上浏览器的Cookie。受攻击的Web应用信任浏览器的Cookie。
6.SQL注入
39
用户输入的数据未经验证就用来构造SQL
查询语句,查询数据库中的敏感内容,绕过认证添加、删除、修改数据、拒
绝服务。
7.XML注入
和SQL注入原理一样,XML是存储数据的地方,如果在查询或修改时,如果
没有做转义,直接输入或输出数据,都将导致XML注入漏洞。攻击者可以
修改XML数据格式,增加新的XML节点,对数据处理流程产生影响。
8.URL跳转
Web应用程序接收到用户提交的URL参数后,没有对参数做”可信任URL”的
验证,就向用户浏览器返回跳转到该URL的指令。(钓鱼攻击)
40
9.文件系统跨越
文件系统中../代表上级目录,通过一个或多个../跨越目录限制。
10.系统命令
用户提交的参数用于执行系统命令的参数。
使用”|”或”;”执行多条命令。
11.文件上传
Web应用程序在处理用户上传的文件时,没有判断文件的扩展名是否在允
许的范围内,或者没检测文件内容的合法性,就把文件保存在服务器上,
41
甚至上传脚本木马到web服务器上,直接控制web服务器。(未限制扩展名
、未检查文件内容、病毒文件)
12.任意文件下载
下载附件等功能
Apache虚拟目录指向
Java/PHP读取文件
下载数据库配置文件等
目录浏览
13.权限控制
有没有权限
42
有些系统不需要权限控制
有没有设置权限
有了强大的权限系统,但是没有使用
有没有偷工减料权限
URL级别
菜单级别
14.访问控制
水平权限
Web应用程序接收到用户请求,修改某条数据时,没有判断数据的所属
人,或判断数据所属人时,从用户提交的request参数(用户可控数据)
43
中,获取了数据所属人id,导致恶意攻击者可以通过变换数据ID,或变换
所属人id,修改不属于自己的数据。
垂直权限
由于web应用程序没有做权限控制,或仅仅在菜单上做了权限控制,导致
的恶意用户只要猜测其他管理页面的URL,就可以访问或控制其他角色拥
有的数据或页面,达到权限提升目的。
15.Session Expires
会话过期
浏览器过期
服务器30分钟无动作过期
服务器24小时强制过期
保持会话
44
1.3.2. 工具
端口扫描:NMAP工具
操作系统漏洞扫描工具:Nessus
协议健壮性测试:Codenomicon、Peach
web漏洞扫描:Appscan、Burpsuite(可抓取、拦截web报文并进行修改)
数据库漏洞扫描:Nessus、NGS
fiddler工具:可抓取web报文,并可构造报文,进行web接口测试
1.4.兼容性测试
1.4.1. 浏览器兼容性
45
主流浏览器:IE,FireFox、Chrome、Safari等,浏览器的差异主要体现在java
Script、ActiveX和HTML解码方法处理不同,因此需要在web系统测试时注意
,尤其是通过某个控件跳转浏览器时更需要注意。
1.4.2. 系统兼容
主要的操作系统 window XP ,windows 7、windows
8,mac系统。在测试过程中需要关注被测试对象在不同操作系统上的表现、
尤其是有数据交互时。
1.4.3. 显示分辨率
不同的显示分辨率可能会导致web页面变形,严重时会导致功能无法使用,
因此需要测试在不同分辨率下的系统表现。常见的分辨率:1280X1024、102
4X768、800X600等,即使在某些分辨率下不能工作,也需要给出提示信息。
46
1.4.4. 插件兼容
在web系统应用了一些控件,如文本编辑器,文件上传下载,这些控件也需
要考虑在不同的操作系统,不同的分辨率下的应用表现。
1.5.其他测试
1.5.1. 接口测试
分类
47
服务器接口
测试浏览器与服务器的接口。用户输入的数据是输入到的前端页面上,
怎样把这些数据传递的后台的呢?通过http协议的get与post请求来实现
前后端的数据传递。这也可认为是接口测试。
外部接口
第三方接口,这个很典型的例子就是第三方支付,比如在我们应用中在
充流量时,交话费时,都会调用第三方支付接口。
测试要点
48
请求是否正确,默认请求成功是200,如果请求错误也能返回404、500等。
检查返回数据的正确性与格式;json是一种非常常见的格式。
接口的安全性,一般web都不会暴露在网上任意被调用,需要做一些限制
,比如鉴权或认证。
接口的性能,这直接影响用户的使用体验。
1.5.2. 易用性测试等
2. web自动化
2.1.类型
49
2.1.1. UI自动化
2.1.2. 接口自动化
2.2.自动化框架实践
2.2.1. 自动化框架
需求分析、概要设计
框架的详细设计与实现:页面管理
50
公共模块
用例仓库
用例控制器
用例执行
2.2.2. 自动化项目实施
测试用例设计与实现
脚本的设计
测试的实施
2.2.3. GIT源代码管理
GIT项目的创建
51
GIT代码的提交
2.2.4. 持续集成(CI)
GIT代码的提交
持续集成的实施
2.3.单元测试
2.3.1. unittest
2.3.2. 断言方法
2.3.3. 单元测试用例的设计
2.3.4. 用例执行顺序的控制
52
2.3.5. 测试脚本分析
2.4.自动化测试模型
2.4.1. 自动化测试模型
2.4.2. 模块驱动测试
2.4.3. 关键字驱动测试
2.4.4. 数据驱动测试与实例
2.4.5. 模块化测试模型实例
2.5.自动化测试深度开展
2.5.1. html测试报告
2.5.2. 测试报告的制定和维护
53
2.5.3. 邮件的推送
2.6.Page Object
2.7. Selenium Grid2
2.7.1. Selenium Server
2.7.2. Selenium Grid
2.7.3. Remote
2.7.4. WebDriver驱动
2.8.自动化测试基础
2.8.1. 分层的自动化测试
2.8.2. 自动化工具对比
2.8.3. selenium介绍
54
2.9.自动化环境的部署
2.9.1. python的环境部署
2.9.2. selenium工具集
2.9.3. selenium环境搭建
2.9.4. 浏览器驱动的部署
2.9.5. webdriver的入门
2.10. 定位元素
55
2.10.1. 定位元素(id、name等)
2.10.2. 快速定位元素插件
2.10.3. 浏览器操作
2.10.4. 鼠标、键盘事件
2.10.5. 验证信息的获取
2.10.6. 元素的等待
2.10.7. 表单、窗口切换
2.10.8. cookies的操作
2.10.9. 验证码的处理
2.10.10. 截图
3. 需要掌握的知识
56
3.1.理解web
3.1.1. 1、网络基础知识
57
IP地址
分类的IP地址
A类:A类地址规定网络号字段为1字节,第一位固定为0来标识该类别,
只有7位可供使用,有=126个可指派的网络号。其中有2个特殊的网络号
,一个是网络号字段为全0,它是保留地址,意思是“本网络”,如0.0.0.35
代表“在这个网络上主机号为35的主机”;另一个是127字段,保留用于环
回测试,例,常见的127.0.0.1代表本地主机。所以A类地址的网络号范围
为1~126。主机号3字节,最大主机数为,这里也要减去2。一个是主机
号全0,表示网络的地址,如,一主机IP为5.6.7.8,则该主机所在的网络
地址就是5.0.0.0。另一个是全1,表示该网络内的所有主机,如,125.255
.255.255代表了125.0.0.0这个网络上的所有主机。
58
B类:B类地址网络号字段为2字节,前两位固定为10,有14位可用来分配
,有个可指派的网络号。这里减1的原因是一般128.0.0.0是不指派的,B
类可指派的网络地址是128.1.0.0。
C类:C类地址网络号字段为3字节,前3位固定为110,有21为可用来分配
。
D类:E类地址网络号字段为4字节,前4位固定为1110
E类:E类地址网络号字段为5字节,前5位固定为11110
划分子网
59
IP地址::={<网络号>,<子网号>,<主机号>}
A类地址的默认子网掩码,255.0.0.0,B类地址的默认子网掩码255.255.0.
0,C类地址的默认子网掩码255.255.255.0。
网关
网关是一个网段的出入口。一个网络想要和这个网络外的网络进行通信,
必须通过网关
一个网段是可以没有网关,也可以没有DHCP服务器,即设置为静态IP,由
交换机、集线器等连接设备就可相互访问。但没有网关就意味着只能在这
个局域网内互相访问,不能访问局域网外的任何网络。很多局域网中都采
用了路由来接入网络,路由器的WAN口连接到外部网络上,LAN口IP设置为
网关。网关的地址可以是局域网段内主机地址的任意一个,不一定是设置
为192.168.1.0,它只是用来标识网关。
几种常见网络设备
60
中继器
信号在双绞线中传输的过程中信号的功率会逐渐衰减,当信号衰减到一
定程度时将造成信号失真,所以为了方便较远距离的两计算机进行通信
,就在这两个计算机之间安装一个中继器,让信号能传的更远。中继器
的作用就是整理已经衰减的信号,重新产生完整的信号再继续传送。中
继器工作在物理层,只是起到了扩展传输距离的作用,对高层是透明的
。
集线器
61
集线器实际上就是一种多端口的中继器,一般有4、8、16、24、32等数
量的接口。
网桥
网桥是早期的两端口的二层网络设备,网桥像是一个聪明的中继器,如
前所说,中继器只是简单的连接了两个网络,任何数据都可以通过中继
器发出,但网桥有所不同。网桥除了扩展网络的距离或范围,还能提高
网络的性能和安全性。
网桥可以连接两个网络,网桥A端口连接A子网,B端口连接B子网。网桥
中有一个信息表,我们可以把这个信息表看作两部分,一部分记录了A子
网中设备的MAC地址,另一部分记录了B子网中的MAC地址,当A发出一
个包,网桥可以查看目的地址到底是A中的还是B中的,若是A中的就不
进行转发,是B中的才进行转发。所以网桥与中继器不同的是隔离了两个
子网,而不是任意的转发,拥有了学习功能。
交换机
62
网桥只有两个端口,有着局限,所以为了实现多对多通信,产生了交换
机。集线器同样也是多对多通信,但集线器是广播的方式将数据包发到
目的主机上,交换机却不一样,交换机与网桥一样具有学习功能。
交换机也有一个表,它记录着每个端口对应的主机的MAC地址。当交换
机收到数据包后,可以解析出该数据包目的地址的MAC地址。然后根据
该MAC地址将包转发到对应的端口去。
交换机有很多的类型,我们常说的交换机一般指的是传统的交换机,它
工作在二层。但随着交换机的发展,出现了三层交换机,它除了拥有二
层交换机的交换技术外,还在三层实现了数据包的高速转发及路由功能
。
路由器
路由器中一般有个路由表来实现学习和翻译的功能。
调制解调器
63
俗称的“猫”。我们都知道,网线中一般传输的数字信号,0和1,而电话
线中传输的是模拟信号,这两种信号并不能直接进行通信,就需要调制
解调器进行“翻译”。
3.1.2. 2、web系统基础
网络体系结构
B/S与C/S的区别
web特点
3.1.3. 3、web核心技术
64
工作原理
客户端技术
服务器技术
3.2.网络协议
3.2.1. 网络协议模型
OSI分层(7层)
65
物理层:设备间接收或发送比特流;说明电压、线速和线缆等。
常见:中继器、网线、集线器、HUB等
协议:RJ45、CLOCK、IEEE802.3等
数据链路层:将比特组合成字节,进而组合成帧;用MAC地址访问介质;
错误可以被发现但不能被纠正
常见:网卡、网桥、二层交换机等
协议:PPP、FR、HDLC、VLAN、MAC等
网络层:负责数据包从源到宿的传递和网际互连
66
常见:路由器、多层交换机、防火墙等
协议:IP、ICMP、ARP、PARP、OSPF、IPX、RIP、IGRP等
运输层:可靠或不可靠数据传输;数据重传前的错误纠正。
常见:进程、端口(socket)
协议:TCP、UDP、SPX
会话层:保证不同应用程序的数据独立;建立、管理和终止会话。
常见:服务器验证用户登录、断点续传
协议:NFS、SQL、NetBIOS、RPC
表示层:数据表示;加密与解密、数据的压缩与解压缩、图像编码与解码
等特殊处理过程
常见:URL加密、口令加密、图片编解码等
67
协议:JPEG、MPEG、ASCII
应用层:用户接口
协议:FTP、DNS、Telnet、SNMP、SMTP、HTTP、WWW、NFS
TCP/IP分层(4层)
物理层
数据链路层
网络层
运输层
应用层
五层协议(5层)
68
应用层:通过应用进程间的交互来完成特定网络应用
数据:报文
协议:HTTP, SMTP(邮件), FTP(文件传送)
运输层:向两个主机进程之间的通信提供通用的数据传输服务。
数据:TCP:报文段,UDP:用户数据报
协议:TCP, UDP
网络层:为分组交换网上的不同主机提供通信服务
69
数据:包或IP数据报
协议:IP
数据链路层:
数据:帧
物理层:
数据:比特
3.2.2. 2、TCP/IP协议
70
特点
面向连接的运输层协议。
点对点(一对一)通信。
可靠交付。
全双工通信(TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双
向通信的数据)。
面向字节流。
TCP的三次握手
71
1、客户端TCP向服务端TCP发送一个特殊的TCP报文段,不包含应用层数据
,报文中SYN=1,设置一个初始号client_isn,记录在报文段的序列号seq中。
2、SYN报文段到达服务器后,为该TCP链接分配缓存和变量,并向客户端
发送允许链接的报文段。其中,SYN = 1, ACK = client_isn+1,seq =
server_isn;
3、客户端收到允许连接的报文后,客户端也给连接分配缓存和变量,客户
端向服务端发送一个报文段,其中ACK = server_isn+1,SYN =
0,并且由于连接已经建立所以现在可以携带应用层数据。
72
TCP四次挥手
1. 客户端发送连接释放报文段,报文中FIN = 1, seq = u;
2. 服务端接收到连接释放报文后发出确认报文,其中ACK = 1; seq = v; ack =
u + 1;
3. 服务端在发送完数据后,发送连接释放报文FIN = 1, seq = w, ack = u +
1;并停止向客户端发送数据。
4. 客户端收到连接释放报文后,发送确认报文, ACK = 1; seq = u + 1; ack =
w +
1;并且进入等待2MSL,防止服务端没有接收到确认报文,重传报文。并且
使连接产生的报文都消失。
73
TCP拥塞控制
拥塞控制和流量控制的区别
流量控制针对的是点对点之间的(发送方和接收方)之间的速度匹配服
务,因为接收方的应用程序读取的速度不一定很迅速,而接收方的缓存
74
是有限的,就需要避免发送的速度过快而导致的问题。拥塞控制是由于
网络中的路由和链路传输速度限制,要避免网络的过载和进行的控制
拥塞控制算法
1.慢启动
慢开始算法的思路就是,不要一开始就发送大量的数据,先探测一下网
络的拥塞程度,也就是说由小到大逐渐增加拥塞窗口的大小。一般一开
始为1个MSS,之后翻倍这样来增加,呈指数增长。其中1、慢启动过程
有一个阈值ssthresh,一旦到达阈值就进入拥塞避免模式。这是第一种
离开结束慢启动的方式2、如果收到了一个丢包提示,就将cwnd设为1
并且重新开始慢启动过程,这时要把阈值ssthresh设为当前cwnd值的一
半。3、如果收到了三次冗余的ACK,就执行一次快速重传并且进入快
速恢复状态,这是最后一种结束慢启动的过程。
75
2.拥塞避免
进入拥塞避免说明cwnd值大约是上一次遇到拥塞是的一半,这时候不
能翻倍,而是将cwnd的值每次增加一个MSS。结束的过程有两种可能:
1、当出现超时时,将cwnd值设为1个MSS,并且将ssthresh阈值设为当
前cwnd值的一半。2、当收到三个冗余ACK时,将ssthresh阈值设为当前
cwnd值的一半,并且将cwnd值设为当前cwnd值的一半加3,即ssthresh
阈值加3,并且进入快速恢复状态
3.快速恢复
快速恢复就是指进入快速恢复前的一系列操作,即将ssthresh阈值设为
当前cwnd值的一半,并且将cwnd值设为当前cwnd值的一半加3,即ssth
resh阈值加3,之后进入拥塞避免状态,即每次cwnd的值加1个MSS
虚拟机的应用
76
虚拟机部署
虚拟机网络的讲解
镜像的应用
虚拟机网络排查
3.2.3. 3、HTTP/HTTPS协议
http协议
77
主要特点
客户/服务器模式,基于请求与响应模式;
简单快速:
客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的
有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。
由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快
。
灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-
Type加以标记。
无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完
客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节
省传输时间。
(——keep alive产生由来,Keep-Alive
功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求
时,Keep-Alive 功能避免了建立或者重新建立连接)
无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记
忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传
,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需
78
要先前信息时它的应答就较快。(——
cookie与session的产生由来,为了解决此问题)
URL
格式
http://host[":"port][abs_path]
http表示要通过HTTP协议来定位网络资源;
host表示合法的Internet主机域名或者IP地址;
port指定一个端口号,为空则使用缺省端口80;
79
abs_path指定请求资源的URI;如果URL中没有给出abs_path,那么当
它作为请求URI时,必须以“/”的形式给出,通常这个工作浏览器自动
帮我们完成。
http请求
请求行
请求头部
空行
请求数据
http响应
状态行
80
消息报头
空行
响应正文
HTTP基本原理与机制
1、HTTP请求与响应机制
HTTP协议用于客户端与服务器之间的通信,在通信线路两端,必定一
端是客户端,另一端是服务器。客户端与服务器的角色不是固定的,一
端充当客户端,也可能在某次请求中充当服务器。这取决与请求的发起
端。
HTTP协议属于应用层,建立在传输层协议TCP之上。客户端通过与服务
器建立TCP连接,之后发送HTTP请求与接收HTTP响应都是通过访问Sock
et接口来调用TCP协议实现
81
2、HTTP 请求/响应的步骤
1)
客户端连接到Web服务器:一个HTTP客户端,通常是浏览器,与Web服
务器的HTTP端口(默认为80)建立一个TCP套接字连接。例如,http://
www.oakcms.cn。
2)
发送HTTP请求:通过TCP套接字,客户端向Web服务器发送一个文本的
请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分
组成。
3)
服务器接受请求并返回HTTP响应:Web服务器解析请求,定位请求资
源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状
态行、响应头部、空行和响应数据4部分组成。
4) 释放连接TCP连接:若connection
模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放
TCP连接;若connection
模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收
请求;
5)
客户端浏览器解析HTML内容:客户端浏览器首先解析状态行,查看表
82
明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下
为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据
HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。
HTTPS协议
概述
HTTP+加密+数据完整性保护+认证=HTTPS
HTTP+SSL=HTTPS (在TCP与HTTP之间多了一层SSL/TSL协议)
加密方式
83
对称加密&非对称加密
对称加密:加密和解密使用相同密钥的加密算法,称为对称加密。
非对称加密:加密和解密使用不同密钥的加密算法,称为非对称加密。
非对称加密需要2个密钥(一对):公钥、私钥(公钥为对外公开的密
钥,所有人都可以获取到;私钥不对外公开,只有持有者知道)。使用
公钥加密,只能使用私钥解密,反之亦然。
HTTPS采用混合加密机制(对称+非对称):HTTPS的通信过程使用对称
加密技术(优点:比非对称加密处理速度快),而使用非对称加密技术
用于交换通信过程使用的对称密钥Master
secret。(使用非对称加密技术传输对称密钥,保证对称密钥安全,从
而保证对称加密通信的安全性)
数字签名&数字证书
数字签名
84
“数字签名”过程
发送者:消息明文-->hash运算-->摘要值A-->私钥加密--
>数字签名(数字签名+消息原文-->接受者)
接受者:数字签名-->发送者公钥解密-->摘要值A,消息原文--
>hash运算-->摘要值B,摘要值A<--对比-->摘要值B
数字签名”的作用
证明发送方的身份,确定是否由发送方签名并发出来的,因为别人
假冒不了发送方的签名;
确保消息的完整性;
85
数字证书
数字证书颁发过程
用户首先产生自己的密钥对,将公钥及个人信息发送给第三方认证
机构(CA),CA经过一些必要操作对用户身份进行核实,核实后将
给用户签发数字证书。数字证书组成包括:用户个人信息及用户公
钥+CA的数字签名。
客户端验证服务端证书有效性
客户端拿到服务器的数字证书后,首先使用CA的公钥(浏览器会默
认内置CA根证书公钥,可对CA及其子机构颁发的证书签名进行解密
)对签名解密
86
CA机构名称不存在或伪造:浏览器不认识,直接认为是危险证书;
CA机构名称存在,但无法解密CA签名,认为是危险证书;
可对CA签名解密,解密后的摘要值A与客户端计算的摘要值B不相等
,说明证书信息被篡改,认为是危险证书
可对CA签名解密,解密后的摘要值A与客户端计算的摘要值B相等,
说明证书是有效的且证书信息完整,客户端直接获取证书内服务端
的公钥,从而保证公钥确实是服务端的不是别人的,以此来验证服
务器身份,确保与服务端的安全通信;
证书过期失效验证;
HTTPS握手与协商过程(SSL/TSL握手过程)
1、【客户端】client hello
2、【服务端】server_hello+server_certificate+server_hello_done
3、【客户端】证书校验
4、【客户端】Client_key_exchange+change_cipher_spec+encrypted_hand
shake_message
87
5、【服务端】change_cipher_spec+encrypted_handshake_message
6、建立加密通信:开始使用协商密钥Master
secret与对称加密算法进行加密通信
7、单项认证
88
8、双向认证
89
90
HTTPS的缺点
91
通信慢:和HTTP相比,SSL/TSL通信部分消耗网络资源。而SSL/TSL通信部
分,又因为要对通信进行处理,所以时间上又延长了;
资源消耗导致处理速度慢:由于HTTPS还需要做服务器、客户端双方加密
及解密处理,因此会消耗CPU和内存等硬件资源;
什么是GET, POST, session, cookie等
GET
简介
从指定的资源请求数据
92
特性
GET 请求可被缓存
GET 请求保留在浏览器历史记录中
GET 请求可被收藏为书签
GET 请求不应在处理敏感数据时使用
GET 请求有长度限制
GET 请求只应当用于取回数据
POST
简介
93
向指定的资源提交要被处理的数据
特性
POST 请求不会被缓存
POST 请求不会保留在浏览器历史记录中
POST 不能被收藏为书签
POST 请求对数据长度没有要求
Cookie
94
简介
Cookie(复数形态:Cookies)是指某些网站为了辨别用户身份、进行se
ssion跟踪而储存在用户本地终端上的数据(通常经过加密)。
Cookie是由服务端生成的,发送给客户端(通常是浏览器)的。Cookie
总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和
硬盘Cookie:
内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其
存在时间是短暂的。
硬盘Cookie保存在硬盘里,有一个过期时间,除非用户手工清理或到了
过期时间,硬盘Cookie不会被删除,其存在时间是长期的。所以,按存
在时间,可分为非持久Cookie和持久Cookie。
工作原理
1、创建Cookie
95
①该用户生成一个唯一的识别码(Cookie
id),创建一个Cookie对象;
②默认情况下它是一个会话级别的cookie,存储在浏览器的内存中,
用户退出浏览器之后被删除。如果网站希望浏览器将该Cookie存储在
磁盘上,则需要设置最大时效(maxAge),并给出一个以秒为单位
的时间(将最大时效设为0则是命令浏览器删除该Cookie);
③将Cookie放入到HTTP响应报头,将Cookie插入到一个 Set-Cookie
HTTP请求报头中。
④发送该HTTP响应报文。
2、设置存储Cookie
浏览器收到该响应报文之后,根据报文头里的Set-
Cookied特殊的指示,生成相应的Cookie,保存在客户端。该Cookie里
面记录着用户当前的信息。
3、发送Cookie
96
当用户再次访问该网站时,浏览器首先检查所有存储的Cookies,如果
某个存在该网站的Cookie(即该Cookie所声明的作用范围大于等于将
要请求的资源),则把该cookie附在请求资源的HTTP请求头上发送给
服务器
4、读取Cookie
服务器接收到用户的HTTP请求报文之后,从报文头获取到该用户的C
ookie,从里面找到所需要的东西
作用
1、记住密码,下次自动登录。
2、购物车功能。
97
3、记录用户浏览数据,进行商品(广告)推荐。
缺陷
①Cookie会被附加在每个HTTP请求中,所以无形中增加了流量。
②由于在HTTP请求中的Cookie是明文传递的,所以安全性成问题。(
除非用HTTPS)
③Cookie的大小限制在4KB左右。对于复杂的存储需求来说是不够用的
。
Session
简介
98
Session代表服务器与浏览器的一次会话过程,这个过程是连续的,也
可以时断时续的。Session是一种服务器端的机制,Session
对象用来存储特定用户会话所需的信息。
Session由服务端生成,保存在服务器的内存、缓存、硬盘或数据库中
。
工作原理
1、创建Session
当用户访问到一个服务器,如果服务器启用Session,服务器就要为该
用户创建一个SESSION,在创建这个SESSION的时候,服务器首先检查
这个用户发来的请求里是否包含了一个SESSION
ID,如果包含了一个SESSION
99
ID则说明之前该用户已经登陆过并为此用户创建过SESSION,那服务
器就按照这个SESSION
ID把这个SESSION在服务器的内存中查找出来(如果查找不到,就有
可能为他新创建一个),如果客户端请求里不包含有SESSION
ID,则为该客户端创建一个SESSION并生成一个与此SESSION相关的SES
SION ID。这个SESSION
ID是唯一的、不重复的、不容易找到规律的字符串,这个SESSION
ID将被在本次响应中返回到客户端保存,而保存这个SESSION
ID的正是COOKIE,这样在交互过程中浏览器可以自动的按照规则把这
个标识发送给服务器。
2、使用Session
我们知道在IE中,我们可以在工具的Internet选项中把Cookie禁止,那
么会不会出现把客户端的Cookie禁止了,那么SESSIONID就无法再用了
呢?找了一些资料说明,可以有其他机制在COOKIE被禁止时仍然能够
把Session id传递回服务器。
经常被使用的一种技术叫做URL重写,就是把Session
id直接附加在URL路径的后面一种是作为URL路径的附加信息,表现形
式为:
http://…./xxx;jSession=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEn
LerjQ99zWpBng!-145788764;
100
另一种是作为查询字符串附加在URL后面,表现形式为:
http://…../xxx?jSession=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYE
nLerjQ99zWpBng!-145788764
还有一种就是表单隐藏字段。就是服务器会自动修改表单,添加一个
隐藏字段,以便在表单提交时能够把Session id传递回服务器
作用
1、判断用户是否登录。
2、购物车功能。
Get与Post的区别
GET在浏览器回退时是无害的,而POST会再次提交请求。
GET产生的URL地址可以被Bookmark,而POST不可以。
GET请求会被浏览器主动cache,而POST不会,除非手动设置。
101
GET请求只能进行url编码,而POST支持多种编码方式。
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被
保留。
GET请求在URL中传送的参数是有长度限制的,而POST没有。
对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感
信息。
GET参数通过URL传递,POST放在Request body中
session与cookie的区别
1、存放位置不同
Cookie保存在客户端,Session保存在服务端。
2 、存取方式的不同
102
Cookie中只能保管ASCII字符串,假如需求存取Unicode字符或者二进制数
据,需求先进行编码。Cookie中也不能直接存取Java对象。若要存储略微
复杂的信息,运用Cookie是比拟艰难的。
而Session中能够存取任何类型的数据,包括而不限于String、Integer、Lis
t、Map等。Session中也能够直接保管Java
Bean乃至任何Java类,对象等,运用起来十分便当。能够把Session看做
是一个Java容器类。
3、安全性(隐私策略)的不同
Cookie存储在浏览器中,对客户端是可见的,客户端的一些程序可能会
窥探、复制以至修正Cookie中的内容。而Session存储在服务器上,对客
户端是透明的,不存在敏感信息泄露的风险。
假如选用Cookie,比较好的方法是,敏感的信息如账号密码等尽量不要
写到Cookie中。最好是像Google、Baidu那样将Cookie信息加密,提交到
服务器后再进行解密,保证Cookie中的信息只要本人能读得懂。而假如
103
选择Session就省事多了,反正是放在服务器上,Session里任何隐私都能
够有效的保护。
4、有效期上的不同
只需要设置Cookie的过期时间属性为一个很大很大的数字,Cookie就可以
在浏览器保存很长时间。
由于Session依赖于名为JSESSIONID的Cookie,而Cookie
JSESSIONID的过期时间默许为–
1,只需关闭了浏览器(一次会话结束),该Session就会失效。
5、对服务器造成的压力不同
Session是保管在服务器端的,每个用户都会产生一个Session。假如并发
访问的用户十分多,会产生十分多的Session,耗费大量的内存。而Cooki
e保管在客户端,不占用服务器资源。假如并发阅读的用户十分多,Cook
ie是很好的选择。
6、 跨域支持上的不同
104
Cookie支持跨域名访问,例如将domain属性设置为“.baidu.com”,则以“.b
aidu.com”为后缀的一切域名均能够访问该Cookie。跨域名Cookie如今被
普遍用在网络中。而Session则不会支持跨域名访问。Session仅在他所在
的域名内有效。
什么是无状态?
HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺
少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导
致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它
的应答就较快。(——cookie与session的产生由来,为了解决此问题)
3.3.web开发技术
105
3.3.1. 客户端开发技术
html
javascript
css
其他前端技术
3.3.2. 服务器端开发技术
106
java
php
ajax
其他后端技术
3.4.web测试技术
3.4.1. 软件测试原理
3.4.2. 测试技术
107
测试的对象与目的
测试的原则
测试的停止依据
软件测试模型
测试计划
测试环境
测试数据的筛选与准备
108
软件测试策略
测试用例的设计与编写
白盒测试
BUG的提交与维护
单元测试
集成测试
系统测试
测试报告的编写
3.4.3. web性能
页面级性能优化
109
1. 减少 HTTP请求数
(1). 从设计实现层面简化页面
保持页面简洁、减少资源的使用时最直接的
(2). 合理设置 HTTP缓存
110
缓存的力量是强大的,恰当的缓存设置可以大大的减少 HTTP请求
原则很简单,能缓存越多越好,能缓存越久越好
(3). 资源合并与压缩
尽可能的将外部的脚本、样式进行合并,多个合为一个。另外, CSS、
Javascript、Image
都可以用相应的工具进行压缩,压缩后往往能省下不少空间。
(4). CSS Sprites
合并 CSS图片,减少请求数的又一个好办法。
(5). Inline Images
111
使用 data: URL scheme的方式将图片嵌入到页面或
CSS中,如果不考虑资源管理上的问题的话,不失为一个好办法。如果
是嵌入页面的话换来的是增大了页面的体积,而且无法利用浏览器缓存
。使用在 CSS中的图片则更为理想一些
(6). Lazy Load Images
这条策略实际上并不一定能减少
HTTP请求数,但是却能在某些条件下或者页面刚加载时减少
HTTP请求数。
2. 将外部脚本置底
最简单可依赖的方法就是将脚本尽可能的往后挪,减少对并发下载的影
响。
3. 异步执行 inline脚本
112
建议将执行时间较长的
inline脚本异步执行,异步的方式有很多种,例如使用 script元素的defer
属性(存在兼容性问题和其他一些问题,例如不能使用
document.write)、使用setTimeout ,此外,在HTML5中引入了 Web
Workers的机制,恰恰可以解决此类问题。
4. Lazy Load Javascript
随着
Javascript框架的流行,越来越多的站点也使用起了框架。不过,一个框
架往往包括了很多的功能实现,这些功能并不是每一个页面都需要的,
如果下载了不需要的脚本则算得上是一种资源浪费 -
既浪费了带宽又浪费了执行花费的时间。目前的做法大概有两种,一种
是为那些流量特别大的页面专门定制一个专用的
mini版框架,另一种则是 Lazy Load。
5. 将 CSS放在 HEAD中
113
如果将 CSS放在其他地方比如
BODY中,则浏览器有可能还未下载和解析到
CSS就已经开始渲染页面了,这就导致页面由无 CSS状态跳转到
CSS状态,用户体验比较糟糕。除此之外,有些浏览器会在
CSS下载完成后才开始渲染页面,如果
CSS放在靠下的位置则会导致浏览器将渲染时间推迟。
6. 异步请求 Callback
在某些页面中可能存在这样一种需求,需要使用
script标签来异步的请求数据。
7. 减少不必要的 HTTP跳转
对于以目录形式访问的 HTTP链接,很多人都会忽略链接最后是否带
’/',需要注意,这其中很可能隐藏了 301跳转,增加了多余请求。
8. 避免重复的资源请求
114
这种情况主要是由于疏忽或页面由多个模块拼接而成,然后每个模块中
请求了同样的资源时,会导致资源的重复请求
9. 精简Javascript和CSS
精简就是将Javascript或CSS中的空格和注释全去掉,
代码级性能
1. Javascript
115
(1). DOM
a. HTML Collection
需要遍历 HTML
Collection的时候,尽量将它转为数组后再访问,以提高性能。即使不
转换为数组,也请尽可能少的访问它,例如在遍历的时候可以将
length属性、成员保存到局部变量后再使用局部变量。
b. Reflow & Repaint
116
DOM操作还需要考虑浏览器的 Reflow和Repaint
,因为这些都是需要消耗资源的
(2). 慎用 with
使用
with相当于增加了作用域链长度。而每次查找作用域链都是要消耗时间
的,过长的作用域链会导致查找性能下降。
除非能肯定在 with代码中只访问 obj中的属性,否则慎用
with,替代的可以使用局部变量缓存需要访问的属性。
(3). 避免使用 eval和 Function
每次 eval 或 Function
构造函数作用于字符串表示的源代码时,脚本引擎都需要将源代码转换
117
成可执行代码。这是很消耗资源的操作 —— 通常比简单的函数调用慢
100倍以上。
eval 函数效率特别低,由于事先无法知晓传给 eval
的字符串中的内容,eval在其上下文中解释要处理的代码,也就是说编
译器无法优化上下文,因此只能有浏览器在运行时解释代码。这对性能
影响很大。
Function 构造函数比 eval略好,因为使用此代码不会影响周围代码
;但其速度仍很慢。
此外,使用 eval和 Function也不利于Javascript 压缩工具执行压缩。
(4). 减少作用域链查找
这一点在循环中是尤其需要注意的问题。如果在循环中需要访问非本作
用域下的变量时请在遍历之前用局部变量缓存该变量,并在遍历结束后
再重写那个变量,这一点对全局变量尤其重要,因为全局变量处于作用
域链的最顶端,访问时的查找次数是最多的。
(5). 数据访问
118
Javascript中的数据访问包括直接量 (字符串、正则表达式
)、变量、对象属性以及数组,其中对直接量和局部变量的访问是最快
的,对对象属性以及数组的访问需要更大的开销。
a. 对任何对象属性的访问超过 1次
b. 对任何数组成员的访问次数超过 1次
另外,还应当尽可能的减少对对象以及数组深度查找。
(6). 字符串拼接
在 Javascript中使用"+"
号来拼接字符串效率是比较低的,因为每次运行都会开辟新的内存并生
成新的字符串变量,然后将拼接结果赋值给新变量。与之相比更为高效
的做法是使用数组的
join方法,即将需要拼接的字符串放在数组中最后调用其
join方法得到结果。不过由于使用数组也有一定的开销,因此当需要拼
接的字符串较多的时候可以考虑用此方法。
2. CSS选择符
3. HTML
119
4. Image压缩
优化方法
网页内容
减少http请求次数
减少DNS查询次数
避免页面跳转
缓存Ajax
120
延迟加载
提前加载
减少DOM元素数量
根据域名划分内容
减少iframe数量
避免404
服务器
使用CDN
添加Expries或Cache-Control报文头
Gzip压缩传输文件
配置ETags
尽早flush输出
使用GET Ajax请求
121
避免空的图片src
Cookie
减少Cookie大小
页面内容使用无cookie域名
CSS
将样式表置顶
避免CSS表达式
用代替@import
避免使用Filters
Javascript
122
将脚本置底
使用外部Javascript和CSS
精简Javascript和CSS
去除重复脚本
减少DOM访问
使用智能事件处理
图片
优化图像
优化CSS Sprite
不要在HTML中缩放图片
使用小且可缓存的favicon.ico
移动客户端
保持单个内容小于25kb
123
打包组建成符合文档
3.4.4. 安全
SQL注入测试与防止SQL注入
SQL注入
SQL注入原理
124
对于WEB应用来说,用户数据等都是存储在数据库中的。SQL注入就是
攻击者通过构造一些恶意的SQL查询语句,让后台的数据库去解析,从
而达到入侵目标网络,获取敏感信息的攻击手段
SQL的危害
一旦数据库被入侵的话,黑客们可以搞得事情就多了,例如(拖库),
就是把你整个数据库拿下来,这就意味着你所有的用户信息泄露。这些
被获取到用户信息可以可能会被倒卖,二次利用
SQL注入的分类
错误回显
125
错误回显是通数据库的报错信息来获取一些数据库的基本信息。错误
回显最基础的注入就是单引号【'】
布尔注入
布尔注入的思路主要是以下三点。1、提前闭合语句。2、利用OR和A
ND构造特殊情况,例如恒为正确。3、注释后面多余的SQL语句
时间盲注
盲注是不能通过直接显示的途径来获取数据库数据的方法。在盲注中
,攻击者根据其返回页面的不同来判断信息(可能是页面内容的不同
,也可以是响应时间不同)。
UNION 注入
126
UNION 操作符用于合并两个或多个 SELECT
语句的结果集。请注意,UNION 内部的 SELECT
语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,
每条 SELECT
语句中的列的顺序必须相同。所以你如果想要使用union查询来进行
注入,你首先要猜测后端查询语句中查询了多少列,哪些列可以回显
给用户。
SQL注入预防
确定SQL漏洞的方法
127
1、错误提示
如果目标Web网站开启了错误显示,攻击者就可以通过反复调整发送
的参数、查看页面打印的错误信息,推测出Web网站使用的数据库和
开发语言等重要信息。
2、盲注
除非运维人员疏忽,否则大部分的Web运营网站应该都关闭了错误提
示信息,此时攻击者一般会采用盲注的技巧来进行反复的尝试判断。
128
我们之前的查看会员详情页面的url地址为userinfo.php?username=plh
win,此时黑客分别访问userinfo.php?username=plhwin' AND 1=1--
hack和userinfo.php?username=plhwin' AND 1=2--
hack,如果前者访问能返回正常的信息而后者不能,就基本可以判断
此网站存在SQL注入漏洞,因为后者的1=2这个表达式永远不成立,所
以即使username传入了正确的参数也无法通过,由此可以推断这个页
面存在SQL注入漏洞,并且可以通过username参数进行注入。
防御SQL注入的方法
1、检查变量数据类型和格式
只要是有固定格式的变量,在SQL语句执行前,应该严格按照固定格
式去检查,确保变量是我们预想的格式
2、过滤特殊符号
129
对于无法确定固定格式的变量,一定要进行特殊符号过滤或转义处理
。
3、绑定变量,使用预编译语句
绑定变量使用预编译语句是预防SQL注入的最佳方式,使用预编译的S
QL语句语义不会发生改变,在SQL语句中,变量用问号?表示,黑客即
使本事再大,也无法改变SQL语句的结构
跨站脚本攻击(XSS)及如何测试与防范XSS
定义
指利用网站漏洞从用户那里恶意盗取信息。
成因
130
XSS漏洞成因是由于动态网页的Web应用对用户提交请求参数未做充分的
检查过滤,允许用户在提交的数据中掺入代码,然后未加编码地输出到
第三方用户的浏览器,这些攻击者恶意提交代码会被受害用户的浏览器
解释执行。
XSS生效方式
(1)构造URL
XSS攻击者通过构造URL的方式构造了一个有问题的页面;当其他人点
击了此页面后,会发现页面出错,或者被暗中执行了某些js脚本,这时
,攻击行为才真正生效。
131
(2)发布内容式
构造URL攻击方式传播范围有限,被攻击者只要有基本的安全意识就可
以避免,因此这种手段的危险性比较小。相比之下,通过发表内容构造
的XSS的危害就大了很多。
在可以发表内容的论坛、讨论区、吧、博客、微博等网站上,用户发表
的内容会保存起来,允许其他用户浏览。这些保存的内容显示在页面上
的时候,如果没有经过正确的处理,也会把攻击者精心构造的内容显示
出来,访问该内容的用户就此中招。如果该页面流传广泛,则影响会更
加深远。
(3)蠕虫式
最暴力的方式是使用蠕虫——
就是首先发一个有问题的文章,浏览者阅读时会被暗中执行恶意代码,
发表一篇新的文章的,该文章也含有同样的恶意代码。这样有可能在最
132
快时间内将攻击铺满整个网站。蠕虫式攻击将暗中偷偷摸摸的攻击行为
变成了光明正大的攻城拔寨,极容易被发现和修复。
XSS攻击实例
(1)XSS偷取用户信息
(2)XSS盗取Cookie
(3)XSS钓鱼网站
(4)XSS蠕虫攻击
XSS的破坏方式
(1)破坏页面结构:用户输入的内容包含了html的标签,与前面的标签
等闭合,导致页面的DIV结构发生变化,页面错乱。
(2)破坏显示内容:用户输入的内容包含了单引号或双引号,与前面的
单引号或双引号匹配,导致后面的内容丢失,显示不出来。
(3)破坏JS:用户产生的内容直接输出到js片断中,但仅转义少数字符
不能保证排除攻击,所以容易导致JS被破坏
133
XSS攻击 绕过过滤的一些简单方法
1、大小写绕过
这个绕过方式的出现是因为网站仅仅只过滤了