- 441.35 KB
- 2022-07-28 发布
- 1、本文档由用户上传,淘文库整理发布,可阅读全部内容。
- 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,请立即联系网站客服。
- 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细阅读内容确认后进行付费下载。
- 网站客服QQ:403074932
一自我介绍我是吴靓,口天吴,靓(jing)是多音字,也读靓(靓)本科学历,工科学士,2015年毕业,有两年的软件测试及相关工作经验这次的求职意向是软件测试工程师二公司简介兰州佳华电子科技工程有限公司,地址是兰州市城关区甘南路黄楼写字楼2楼100人以下,4个测试,19个开发,公司业务分为两块:工业软件设计、调试、维护;常用软件的开发三项目简介(WEB)最近完成的项目是一个数据库分析系统,主要的功能是使不熟悉数据库的行政人员可以高效的完成数据处理,减轻他们日常工作的繁琐系统的可分四层:1应用层,DBMS与终端用户和应用程序的界面、处理层2语言翻译层,对数据库语言的各类语句进行语法分析3数据存取层,处理对象单个元组,将上层的集合操作转换为单记录操作4操作系统,提取存取原语句和基本的存取方法,是DBMS存储层接口系统的组成:WEB服务器:Apache数据库服务器(一为存储数据、信息所用,一为备份数据、信息)个人PC端数据库的算法:1.NestedLoopJoin(嵌套循环联结)算法:思路直接和简单对于关系R的每个元组r将其与关系S的每个元组s在Join条件的字段上直接比较并筛选出符合条件的元组代价:被联结的表所处内层或是外层的顺序对磁盘I/O开销有着非常重要的影响。CPU开销相对来说影响较小,主要是元组读入内存以后的开销2.SortMergeJoin(排序合并联结)78\n算法:基本思路是数据结构中的合并排序,主要步骤:a.按Join字段进行排序b.对两组已排序集合进行合并排序,从来源端各自去得数据列后加以比较,需要根据是否在Join字段有重复值做特殊的“分区”处理代价:Join字段是否已排序和Join字段上的重复值有多少多少*最好的情况下两列都已排序且至少有一列没有重复值:O(m+n)只需要对两个集合各扫描一遍,如果对m,n都能用到索引就更好了*最差的情况下两列都未排序且两列上的所有值相同:O(n*logn+m*logm+n*m)两次排序以及一次全部元组间的笛卡尔积1.HashJoin(哈希联结)*避免大数据的HashJoin,适合低并发情况,占内存和CPU巨大*尽量将其转换为1,2。可使用有表结构设计、索引调整设计、SQL优化、业务设计优化。相关词语解释:1.字段:某一个事物的一个特征,或者说是属性,列的别称2.记录:事物特征的组合,可以描述一个具体的事物,元组的别称3.表:记录的组合,表示同一类事物的组合4.主键:能唯一标识信息的事物5.外键:一个执行另个一个表的指针6.JOIN分为:内连接、相等连接、自然连接、交叉连接,如下: a、显式的内连接与隐式连接(innerjoin==join) 显示连接:SELECT*fromemployeejoindepartmentonemployee.DepartmentID=department.DepartmentID 等价于: 隐式连接:SELECT*fromemployee,departmentWHEREemployee.DepartmentID=department.DepartmentID 注:当DepartmentID不匹配,就不会往结果表中生成任何数据。 b、相等连接 提供了一种可选的简短符号去表达相等连接,它使用USING关键字。 SELECT*fromemployeejoindepartmentusing(DepartmentID) 注:与显式连接不同在于:DepartmentID只显示一列 c、自然连接 比相等连接的进一步特例化。两表做自然连接时,两表中的所有名称相同的列都将被比较,这是隐式的。 自然连接得到的结果表中,两表中名称相同的列只出现一次.78\n select*fromemployeenaturaljoindepartment 注:在Oracle里用JOINUSING或NATURALJOIN时,如果两表共有的列的名称前加上某表名作为前缀, 则会报编译错误:"ORA-25154:columnpartofUSINGclausecannothavequalifier" 或"ORA-25155:columnusedinNATURALjoincannothavequalifier". d、交叉连接(又称笛卡尔连接) 如果A和B是两个集合,它们的交叉连接就记为:A×B. 显示连接: select*fromemployeecrossjoindepartment 等价于 隐式连接: select*fromemployee,department系统的实现(内部逻辑):DDL命令DDL编译器查询、更新查询编译器执行引擎事事物命令元事物命令数查询计划据统计数据事物管理器元数据对索引、文件、记录78\n并发控制的请求索引、文件/记录管理器缓冲区/管理器存储管理器存储日志和恢复页面令、数据元素、索引锁表缓冲区读写页四项目一详情①需求人员收集需求→生成需求文档→内部评审(所有人员均参加)②开发人员编写开发计划→生成文档测试组长编写测试计划→各自提取所负责模块的测试项③开发编写代码测试人员编写用例④开发编写完代码→测试执行用例→交付客户项目周期总时长6个月,有7个版本。用例的总数根据需求版本来定,总共1000来条,一个月迭代完成78\nBug数也根据需求而定,前期版本较多,后期较少,总共180个Bug为何这样少?开发测试人员对需求的理解较一致;开发人员完成某一功能的代码后,就会拿给测试看,所以前期研发就避免了许多问题;测试前会先做冒烟测试。注:冒烟测试,随机的测试,不依据测试用例。针对核心业务模块现多数功能走不下去(大概20%),则冒烟测试结束。如果冒烟测试不能通过,一般不会进行启动测试计划。这样可以最大程度地节约成本。Bug为何这样多?web类测试时涉及的兼容性和界面问题比较多五软件支付给客户的标准①版本覆盖所有的需求②测试用例中高、中、低级均已执行③以前版本遗留的致命、严重缺陷均已被解决④剩余的缺陷(8%左右),不影响用户的正常使用六项目二详情CAD看图软件工具,主要作用是方便查看CAD图纸,同时支持闪开和内置云盘的功能①需求人员收集需求→生成需求文档→内部评审(所有人员均参加)②开发人员编写开发计划→生成文档测试组长编写测试计划→各自提取所负责模块的测试项③开发编写代码测试人员编写用例④开发编写完代码→测试执行用例→交付客户项目总长5个月,有4个版本,用例的总数约510条,25天迭代完成Bug总数约80个,前期的版本较多,后期较少Bug数为何这样少?开发测试人员对需求的理解较一致;78\n开发人员完成某一功能的代码后,就会拿给测试看,所以前期研发就避免了许多问题;测试前会先做冒烟测试。注:冒烟测试,随机的测试,不依据测试用例。针对核心业务模块现多数功能走不下去(大概20%),则冒烟测试结束。如果冒烟测试不能通过,一般不会进行启动测试计划。这样可以最大程度地节约成本。Bug为何这样多?APP类项目测试中包含的用户体验较多,然后按键方面的要求比较多七软件测试质量的提高前期做的冒烟测试和后期做的交互性测试都可以提高软件测试的质量单元测试:为了验证某个过程或是一批过程逻辑的正确性,编写测试用例执行它们并验证检测与预期结果是否吻合交互性测试:需要程序与人的交互,于是又为了程序添加了供操作的组件软件测试中的漏测:测试漏测是指软件产品在测试结束后出现了在测试过程中没发现的bug。我们知道,漏测是每一个软件测试者最头疼的事,一旦出现漏测,首先给客户带来非常不好的影响,特别是严重的功能性bug;其次增加bug修复的成本,包括人力和物力上;再者给自己的测试团队也带来不利影响,容易被人质疑能力不足,难以取得信任。漏测有哪些显而易见的原因:⑴最初的需求评审质量太低。大家对需求都不是事百分之百的清楚,导致开发上、测试上都是得过且过,最终客户不满意。⑵需求频繁的变更。需求变更的次数多了,影响范围比较广,很容易导致某些地方没有考虑完全。⑶测试用例功能点覆盖没有100%,并且异常流考虑的较少。⑷测试人员思维局限,没有跳出一个框框,没有做破坏性的测试。⑸测试人员对bug的质量意识不足,有可能认为bug不是bug,故而忽略。漏测是很正常的现象,没有一个测试人员能做到百分之百的不漏测,但是对于一些等级比较高的bug被漏测了,那么我们自己就要好好反思了。为了有效得避免软件测试中的“漏测”现象,以下几点需要注意:78\n㈠需求分析做到位。开发之前应该将产品、开发、测试人员一起开会探讨整个需求,开发中间有需求的任何变更应通知到具体人员。㈡已出现漏测时,测试人员要分析原因,思考总结和吸取经验教训,后续的测试避免该方向的漏测。㈢严格按照设计的测试用例执行㈣交叉测试㈤破坏测试我们应该做到:⑴拒绝出现明显的bug。⑵拒绝出现功能性bug。在涉及到钱的项目绝对不能有金额方面的bug。附:19个因bug引起的巨大灾难①1962年的MarinerBug(1850万美元)航空软件bug直接导致Marine1号火箭在发射不久后就偏离了预期运行的轨道,任务控制中心在其发射293秒后就摧毁了火箭。原因:一名程序员将公式错误得录入到计算机代码中,直接导致计算机错误得计算了火箭的运行轨道。②1978年哈得福特市竞技场塌陷(7000万美元)经过:在几千名球迷离开哈得福特市的竞技场后,由于湿雪等原因造成钢架结构的竞技屋倒塌原因:由于CAD软件程序员习惯性地认为钢架结构屋顶的支持仅承受纯压力,所以当其中的某个支撑点因大雪垮塌后,引起了连锁反应,导致屋顶的其他部分相继倒塌。③1982年苏联的石油管道事件(给苏联的经济造成了重大的损失)经过:控制软件出现了故障,导致西伯利亚输气管道产生巨大压力,成为历史上最大的人为非原子核破坏事件。美国CIA为其工作的间谍在苏联购买了用于控制跨西伯利亚管道的加拿大计算机系统中植入了一个bug。④1983年差点发生的第三次世界大战经过:早期,苏联政府的报警系统错误的报出美国发射了5枚弹道导弹,幸运的是苏联执勤员推断如果真是美国政府袭击他们的话,发射的导弹肯定不止5枚,所以他推断这是一场虚惊。原因:苏联软件的一个bug,因为阳光反射云顶,给出了错误的报警信息78\n①八web测试和app测试的区别单论从功能测试层面上,web和APP测试在流程上没有区别,但两者的载体不同,主要区别如下:①系统结构方面Web项目是B/S架构,基于浏览器,只需要更新服务端,客户端就会同步响应APP项目是C/S架构,服务器更新以后,客户端手动进行更新②性能方面Web测试需要响应时间、内存、CPU、吞吐量、并发数APP测试需要响应时间、内存、CPU、消耗电量、流量③兼容性方面Web测试主要考虑浏览器和操作系统APP测试主要考虑手机品牌、型号、尺寸、分辨率、版本④测试工具方面自动化测试:web一般用selenium,手机用APPnium性能测试:web一般用LR,手机用Jmeter相对web手机APP测试还需关注:1.干扰测试:来电、短信、通话、关机、重启2.不同网络下的测试,网络切换的测试,无网的测试3.安装、卸载、更新4.权限测试九B/S与C/S架构区别C/S架构是客户与服务器结构,需要安装专业的客户端软件,优点是:a响应速度快b可以实现客户的个性化需求;缺点是:a无法快速部署,需要安装软件b兼容性差c开发维护成本高B/S架构是浏览器与服务器结构,不需要安装专门的软件,可以在任何地方进行操作78\n优点是:a分布式的b开发成本及维护成本低c业务扩展方便缺点是:a响应速度慢b无法实现客户的个性化需求c功能弱化十测试工具自动化测试的优点:假如你执行过人工测试,你一定了解人工测试的缺点,人工测试非常浪费时间而且需要投入大量人力,使用人工测试的结果,往往是在应用程序交付前,无法对应用程序的所有功能做过完整的测试。使用QuickTest可以加速整个测试的过程,并且在建置完新版本的应用程序或者网站后,可以重复使用测试脚本进行测试。以QuickTest执行测试,就像人工测试一样,QuickTest会模仿鼠标的动作和键盘的输入,不过QuickTest比人工测试快多了。自动化测试的好处:快速:QuickTest执行测试比人工测试速度快多了可靠:QTP的每一次测试都能正确的执行相同的动作,可以避免人工测试的错误可重复:QTP可以重复执行相同的测试可程序化:QTP以程序的方式撰写测试脚本,以带出隐藏在应用程序中的错误信息广泛的:QTP可以建立在广泛的测试脚本,涵盖应用程序的所有功能。可再使用:QTP可以重复使用测试脚本,即使应用程序的接口已经改变。自动化测试流程:1.准备Testcase,生成内容文档化2.配置QTP,环境不同就要选择合适的Add-in进行加载3.录制脚本4.修改、增强脚本5.回放脚本6.脚本维护性能定义:百度的专业解释:性能是指器物的性质和效用;简单理解为:78\n性能是用来评判软件或产品的使用效率;---性能是来关注软件的抗压能力;手机和电脑:快;开机快;用软件很流畅---性能:硬件配置有关系软件:流畅、不卡;长时间玩不卡清晰使用者的感受:快;服务提供者:服务端和客户端:客户端:自己服务端:阿里等等用比较少资源去提供给更多的人来使用;用比较少的成本提供给更多人的来使用性能指标:1.响应时间:指的是从客户端发出请求开始,到接收到服务端的响应为止;响应时间=网络传输时间+服务端的处理时间+浏览器的解析时间(非常短的,可以直接忽略)咱们的关注:(测试和开发)服务端的处理时间;性能执行的时候:希望响应时间尽量被服务端的处理时间给占用了;弱化的浏览器解析时间和网络传输时间如何弱化网络传输时间:前期测试尽量在局域网中测试;优化公司局域网的网速;晚上做测试(LR有定时器)等等性能需求:参照性能需求来做测试;假如:响应时间<=5s,也可以参考:258原则:<=2s;很快的;用户很满意2<<=5s用户满意5s<<=8s用户还能接受忍受>8s必须优化响应时间:5s网络传输时间+服务端的处理时间响应时间:2s网络传输时间+服务端的处理时间响应时间:10s网络传输时间+服务端的处理时间2.用户数:可以给用户来使用;负载测试:闲时负载量78\n容量测试:忙时负载量压力测试:极限负载量性能需求:需要支持5000用户一起使用;评判性能不能只用一个指标来评判,一定是多个指标综合评判。3.资源占用情况:常见的:CPU、内存;--服务端的网络IO、磁盘iO等等服务端是windows操作系统:(server2003server2008等等);LR工具可以来收集资源的值;服务端是命令行模式的操作系统(linux、unix、solaris等等):可以用命令;可以使用:nmon工具(开源的;)4.吞吐量:处理的数据量;网络中:单位时间内处理的数据量(字节)性能工具中:单位时间内处理的事务数等等;响应时间:从使用效率;从快慢;资源占用:从能耗来评判吞吐量:从处理能力;性能测试的目的:发现性能的bug;希望满足用户的性能需求;性能需求:支持5000人使用,使用时响应时间<=3;cpu使用率<=70%;内存使用率:<=60%实际结果:响应时间5s;性能满足不了要求:提升性能1.从代码上来优化:举例:响应时间5s;--处理时间偏大慢,慢在什么地方;-----打点来找出慢在哪儿1000行代码打印时间:系统时间精确到毫秒级2.从数据库来优化:SQL优化3.从硬件上来优化----要增加成本;性能测试的原理;----协议78\nHTTP协议:请求:从客户端发给服务端的---这个是我们需要去做的响应:从服务端返回给客户端的;双11:很多人;5000w人---->请求人的作用产生请求;不用人,可以用工具来产生;工具模拟很多人产生请求;即:产生很多的请求500w人---->请求B/S架构:客户端:浏览器服务端:功能测试:关注功能要能正常用---自动化测试工具:模拟的一个人性能测试:关注的抗压能力--性能测试工具:模拟的很多人实际情况性能:双11;很多人登录淘宝网站;在网站上进行操作;每个人感受时间;服务端那边统计资源使用情况;等等用工具模拟:能模拟很多人操作;统计响应时间;统计资源占用;统计性能指标;xxxxxxLR工具介绍:由三大部件:VUG:virtualusergenerator(虚拟用户生成器):生成性能测试脚本的;点击“create/editscripts”controller:控制器:做性能执行的,做加压测试的;收集性能指标数据;点击“RunLoadTests”analysis:分析器:将性能指标数据生成数据报告,可以进行简单的分析;点击“AnalyzeTestResults”小的部件:LoadGenerator:放到控制器中;生成虚拟用户的;性能测试的原理:a.模拟人的操作;---用VUG来录制人的操作变成脚本;b.模拟多个人----控制器中来实现c.能收集性能指标---控制器中来收集78\nd.模拟操作的先后顺序,请求之间先后顺序----用VUG来录制人的操作变成脚本;e.模拟不同的人用不同数据来操作----用vug中的参数化来实现等等用LR测试性能的过程:1.启动VUG:准备好性能测试脚本通过录制人在页面上的操作,变成脚本的;录制脚本:点击新建脚本-->选择协议(根据实际情况选)--->启动录制;填写被测网站的网址----->点击启动;进行录制;正常在网站上操作--->停止录制;协议:客户端与服务端的通信协议;---问开发单协议:多协议:录制的内容:ecshop首页、登录页面、登录操作2.controller:控制器;先在VUG中保存脚本;启动controller;场景:手工场景;去掉复选框;选择刚刚录制的脚本;点击OK;启动controller进行配置;Design:设计配置用户数(startvusers);配置运行时间(Duration)run:运行点击“Start”3.分析器:生成数据报告;看结果;建议直接在controller中启动:results-->analyzeResults(启动分析器的同时,来分析性能测试结果,将数据结果生成数据报告;)最后可以导出来;----------------------------------------------------------------第一大部件:VUGVUG:准备性能测试脚本;VUG中的三大功能:1.录制脚本--->2.修改脚本(最复杂的:添加事务、添加检查点、参数化、集合点等等)--->3.回放脚本(验证脚本是否有问题?)一、录制脚本:点击新建脚本-->选择协议(根据实际情况选)--->启动录制;填写被测网站的网址----->点击启动;进行录制;正常在网站上操作--->停止录制;常见的函数:vuser_init():初始化的函数;一些准备操作;例如:登录;申请内存等等----只会执行一次78\nAction():将真正要测试性能的操作的脚本录到这个函数中;---是需要反复执行多次的;vuser_end():收尾的函数;一些收尾操作;例如:退出;释放内存等等;----只会执行一次例子:1.测试注册的性能;vuser_init():空的Action():录制注册;vuser_end():空的2.测试购买的性能vuser_init():录制登录Action():录制购买;查询商品、浏览商品、放入购物车、结账vuser_end():退出3.测试登录的性能;vuser_init():Action():登录4.测试查询商品的性能;vuser_init():可以空的,可以录制登录Action():查询的操作vuser_end():如果3个函数中都有:先从init开始录制;顺序往下录制:init--》action--》endweb_url():发送请求的函数;主要是get请求;url=web_submit_data():发送请求的函数;主要是post请求;有自己的数据要提交;关注自己提交的数据itemdataweb_custom_request():发送请求的函数;有数据提交的;数据是开发来控制;并没有让用户去填写VUG中有三种模式:1.任务模式(tasks):2.脚本模式(script):代码脚本78\n3.树模式(tree):图形化的模式;来看录制的操作;备注:录制的时候汉字是乱码;解决:tools--->在录制选项中-->advanced--》选择字符集(UTF-8)三、回放脚本;测试一下脚本OK?回放成功就代表OK;回放失败还得继续修改;重点关注回放结果:a.查看回放日志;----如果回放日志没有任何错误信息就代表成功;如果有错误信息(红色)就代表失败推荐的b.在任务模式下可以查看回放结果:Replay-->VerifyReplay-->要扫描回放结果直观c.view-->TestResults:比较直观timeout120s;----工具:判断为超时失败;120s修改配置:把LR中的超时时间改大;默认是120s;在runtimesetting运行时设置-->(InternetProtocol)preferences--》options---》stepdownloadtimeoutlr_think_time(参数):思考时间;单位是s;在页面上的停留时间;两个操作之间的间隔时间;---模拟实际情况:不同的人操作的速度不一样;停留不一样;思考时间默认是忽略的;--代表操作之间没有任何间隔;没有停留常见的配置选项:1.支持汉字;recordingoptions2.思考时间的配置;runtimesetting-->(General)thinktime配置选项:a.ignorethinktime:忽略思考时间;b.启动思考时间:1)asrecorded:脚本中是多少,就停留多少秒2)multiply:在录制的基础上*n3)在一定的范围进行随机取值;默认的是:录制的50%~录制的150%之间随机取---更贴近实际情况;c.limit:限制成多少秒;78\n3.迭代:iteration指的是Action跑的次数;默认的时候:1个迭代;Action()中的脚本跑多次:性能指标取平均值;runtimesetting-->(General)Runlogic;4.迭代之间的间隔;runtimesetting-->(General)pacinga)无间隔:上一个迭代结束了立马开始下一个迭代;b)有间隔:上一个迭代结束之后间隔多久,然后开始下一个迭代;固定间隔:同样的间隔随机间隔:从一个范围内随机取值进行间隔;c)有间隔:上一个迭代开始之后,间隔多久,开始下一个迭代;固定值:随机值:5.日志开关a.不打印任何日志;b.启用日志:默认的1)只打印错误日志;-----真正跑性能执行时候2)一直打印日志:---调试脚本时a)标准日志;b)扩展日志禅道管理流程:作为一个软件测试工程师来说,最主要的工作是给开发人员提交BUG。常用的bug管理工具有QC、BUGfree、Jira1.在浏览器中输入禅道的访问地址,进入欢迎页面,选择开源版2.选择语言:简体3.登陆页面登陆4.点击【测试】按钮→【bug】按钮→模块栏点击【提交bug】按钮→bug编辑页面→点击【保存】禅道安装步骤:1.在官网上下载禅道安装包,以.exe结尾,解压至根目录下78\n1.选择路径(建议不要安装到C盘)2.进入安装目录,双击start.bat启动控制面板,弹出【禅道集成运行环境】框3.点击【启动禅道】按钮,系统会自动启动禅道所需要的Apache和mysql服务4.启动成功后,点击【访问禅道】,即可打开禅道环境的首页十一LinuxLinux环境下oracle安装与配置1.2.3.4.5.6.7.8.9.系统信息 arch显示机器的处理器架构(1) uname-m显示机器的处理器架构(2) uname-r显示正在使用的内核版本 dmidecode-q显示硬件系统部件-(SMBIOS/DMI) hdparm-i/dev/hda罗列一个磁盘的架构特性 hdparm-tT/dev/sda在磁盘上执行测试性读取操作 cat/proc/cpuinfo显示CPUinfo的信息 cat/proc/interrupts显示中断 cat/proc/meminfo校验内存使用 cat/proc/swaps显示哪些swap被使用 cat/proc/version显示内核的版本 cat/proc/net/dev显示网络适配器及统计 cat/proc/mounts显示已加载的文件系统 lspci-tv罗列PCI设备 lsusb-tv显示USB设备 date显示系统日期 cal2007显示2007年的日历表 78\ndate041217002007.00设置日期和时间-月日时分年.秒 clock-w将时间修改保存到BIOS 关机(系统的关机、重启以及登出) shutdown-hnow关闭系统(1) init0关闭系统(2) telinit0关闭系统(3) shutdown-hhours:minutes&按预定时间关闭系统 shutdown-c取消按预定时间关闭系统 shutdown-rnow重启(1) reboot重启(2) logout注销 文件和目录 cd/home进入'/home'目录' cd..返回上一级目录 cd../..返回上两级目录 cd进入个人的主目录 cd~user1进入个人的主目录 cd-返回上次所在的目录 pwd显示工作路径 ls查看目录中的文件 ls-F查看目录中的文件 ls-l显示文件和目录的详细资料 ls-a显示隐藏文件 ls*[0-9]*显示包含数字的文件名和目录名 tree显示文件和目录由根目录开始的树形结构(1) lstree显示文件和目录由根目录开始的树形结构(2) mkdirdir1创建一个叫做'dir1'的目录' mkdirdir1dir2同时创建两个目录 mkdir-p/tmp/dir1/dir2创建一个目录树 rm-ffile1删除一个叫做'file1'的文件' rmdirdir1删除一个叫做'dir1'的目录' rm-rfdir1删除一个叫做'dir1'的目录并同时删除其内容 rm-rfdir1dir2同时删除两个目录及它们的内容 mvdir1new_dir重命名/移动一个目录 cpfile1file2复制一个文件 cpdir/*.复制一个目录下的所有文件到当前工作目录 cp-a/tmp/dir1.复制一个目录到当前工作目录 cp-adir1dir2复制一个目录 ln-sfile1lnk1创建一个指向文件或目录的软链接 lnfile1lnk1创建一个指向文件或目录的物理链接 78\ntouch-t0712250000file1修改一个文件或目录的时间戳-(YYMMDDhhmm) filefile1outputsthemimetypeofthefileastext iconv-l列出已知的编码 iconv-ffromEncoding-ttoEncodinginputFile>outputFilecreatesanewfromthegiveninputfilebyassumingitisencodedinfromEncodingandconvertingittotoEncoding. find.-maxdepth1-name*.jpg-print-execconvert"{}"-resize80x60"thumbs/{}"\;batchresizefilesinthecurrentdirectoryandsendthemtoathumbnailsdirectory(requiresconvertfromImagemagick) 文件搜索 find/-namefile1从'/'开始进入根文件系统搜索文件和目录 find/-useruser1搜索属于用户'user1'的文件和目录 find/home/user1-name\*.bin在目录'/home/user1'中搜索带有'.bin'结尾的文件 find/usr/bin-typef-atime+100搜索在过去100天内未被使用过的执行文件 find/usr/bin-typef-mtime-10搜索在10天内被创建或者修改过的文件 find/-name\*.rpm-execchmod755'{}'\;搜索以'.rpm'结尾的文件并定义其权限 find/-xdev-name\*.rpm搜索以'.rpm'结尾的文件,忽略光驱、捷盘等可移动设备 locate\*.ps寻找以'.ps'结尾的文件-先运行'updatedb'命令 whereishalt显示一个二进制文件、源码或man的位置 whichhalt显示一个二进制文件或可执行文件的完整路径 挂载一个文件系统 mount/dev/hda2/mnt/hda2挂载一个叫做hda2的盘-确定目录'/mnt/hda2'已经存在 umount/dev/hda2卸载一个叫做hda2的盘-先从挂载点'/mnt/hda2'退出 fuser-km/mnt/hda2当设备繁忙时强制卸载 umount-n/mnt/hda2运行卸载操作而不写入/etc/mtab文件-当文件为只读或当磁盘写满时非常有用 mount/dev/fd0/mnt/floppy挂载一个软盘 mount/dev/cdrom/mnt/cdrom挂载一个cdrom或dvdrom mount/dev/hdc/mnt/cdrecorder挂载一个cdrw或dvdrom mount/dev/hdb/mnt/cdrecorder挂载一个cdrw或dvdrom mount-oloopfile.iso/mnt/cdrom挂载一个文件或ISO镜像文件 mount-tvfat/dev/hda5/mnt/hda5挂载一个WindowsFAT32文件系统 mount/dev/sda1/mnt/usbdisk挂载一个usb捷盘或闪存设备 mount-tsmbfs-ousername=user,password=pass//WinClient/share/mnt/share挂载一个windows网络共享 磁盘空间 78\ndf-h显示已经挂载的分区列表 ls-lSr|more以尺寸大小排列文件和目录 du-shdir1估算目录'dir1'已经使用的磁盘空间' du-sk*|sort-rn以容量大小为依据依次显示文件和目录的大小 rpm-q-a--qf'%10{SIZE}t%{NAME}n'|sort-k1,1n以大小为依据依次显示已安装的rpm包所使用的空间(fedora,redhat类系统) dpkg-query-W-f='${Installed-Size;10}t${Package}n'|sort-k1,1n以大小为依据显示已安装的deb包所使用的空间(ubuntu,debian类系统) 用户和群组 groupaddgroup_name创建一个新用户组 groupdelgroup_name删除一个用户组 groupmod-nnew_group_nameold_group_name重命名一个用户组 useradd-c"NameSurname"-gadmin-d/home/user1-s/bin/bashuser1创建一个属于"admin"用户组的用户 useradduser1创建一个新用户 userdel-ruser1删除一个用户('-r'排除主目录) usermod-c"UserFTP"-gsystem-d/ftp/user1-s/bin/nologinuser1修改用户属性 passwd修改口令 passwduser1修改一个用户的口令(只允许root执行) chage-E2005-12-31user1设置用户口令的失效期限 pwck检查'/etc/passwd'的文件格式和语法修正以及存在的用户 grpck检查'/etc/passwd'的文件格式和语法修正以及存在的群组 newgrpgroup_name登陆进一个新的群组以改变新创建文件的预设群组 文件的权限-使用"+"设置权限,使用"-"用于取消 ls-lh显示权限 ls/tmp|pr-T5-W$COLUMNS将终端划分成5栏显示 chmodugo+rwxdirectory1设置目录的所有人(u)、群组(g)以及其他人(o)以读(r)、写(w)和执行(x)的权限 chmodgo-rwxdirectory1删除群组(g)与其他人(o)对目录的读写执行权限 chownuser1file1改变一个文件的所有人属性 chown-Ruser1directory1改变一个目录的所有人属性并同时改变改目录下所有文件的属性 chgrpgroup1file1改变文件的群组 chownuser1:group1file1改变一个文件的所有人和群组属性 find/-perm-u+s罗列一个系统中所有使用了SUID控制的文件 chmodu+s/bin/file1设置一个二进制文件的SUID位-运行该文件的用户也被赋予和所有者同样的权限 chmodu-s/bin/file1禁用一个二进制文件的SUID位 chmodg+s/home/public设置一个目录的SGID位-类似SUID78\n,不过这是针对目录的 chmodg-s/home/public禁用一个目录的SGID位 chmodo+t/home/public设置一个文件的STIKY位-只允许合法所有人删除文件 chmodo-t/home/public禁用一个目录的STIKY位 文件的特殊属性-使用"+"设置权限,使用"-"用于取消 chattr+afile1只允许以追加方式读写文件 chattr+cfile1允许这个文件能被内核自动压缩/解压 chattr+dfile1在进行文件系统备份时,dump程序将忽略这个文件 chattr+ifile1设置成不可变的文件,不能被删除、修改、重命名或者链接 chattr+sfile1允许一个文件被安全地删除 chattr+Sfile1一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘 chattr+ufile1若文件被删除,系统会允许你在以后恢复这个被删除的文件 lsattr显示特殊的属性 打包和压缩文件 bunzip2file1.bz2解压一个叫做'file1.bz2'的文件 bzip2file1压缩一个叫做'file1'的文件 gunzipfile1.gz解压一个叫做'file1.gz'的文件 gzipfile1压缩一个叫做'file1'的文件 gzip-9file1最大程度压缩 rarafile1.rartest_file创建一个叫做'file1.rar'的包 rarafile1.rarfile1file2dir1同时压缩'file1','file2'以及目录'dir1' rarxfile1.rar解压rar包 unrarxfile1.rar解压rar包 tar-cvfarchive.tarfile1创建一个非压缩的tarball tar-cvfarchive.tarfile1file2dir1创建一个包含了'file1','file2'以及'dir1'的档案文件 tar-tfarchive.tar显示一个包中的内容 tar-xvfarchive.tar释放一个包 tar-xvfarchive.tar-C/tmp将压缩包释放到/tmp目录下 tar-cvfjarchive.tar.bz2dir1创建一个bzip2格式的压缩包 tar-xvfjarchive.tar.bz2解压一个bzip2格式的压缩包 tar-cvfzarchive.tar.gzdir1创建一个gzip格式的压缩包 tar-xvfzarchive.tar.gz解压一个gzip格式的压缩包 zipfile1.zipfile1创建一个zip格式的压缩包 zip-rfile1.zipfile1file2dir1将几个文件和目录同时压缩成一个zip格式的压缩包 unzipfile1.zip解压一个zip格式压缩包 RPM包-(Fedora,Redhat及类似系统) rpm-ivhpackage.rpm安装一个rpm包 rpm-ivh--nodeepspackage.rpm安装一个rpm包而忽略依赖关系警告 78\nrpm-Upackage.rpm更新一个rpm包但不改变其配置文件 rpm-Fpackage.rpm更新一个确定已经安装的rpm包 rpm-epackage_name.rpm删除一个rpm包 rpm-qa显示系统中所有已经安装的rpm包 rpm-qa|grephttpd显示所有名称中包含"httpd"字样的rpm包 rpm-qipackage_name获取一个已安装包的特殊信息 rpm-qg"SystemEnvironment/Daemons"显示一个组件的rpm包 rpm-qlpackage_name显示一个已经安装的rpm包提供的文件列表 rpm-qcpackage_name显示一个已经安装的rpm包提供的配置文件列表 rpm-qpackage_name--whatrequires显示与一个rpm包存在依赖关系的列表 rpm-qpackage_name--whatprovides显示一个rpm包所占的体积 rpm-qpackage_name--scripts显示在安装/删除期间所执行的脚本l rpm-qpackage_name--changelog显示一个rpm包的修改历史 rpm-qf/etc/httpd/conf/httpd.conf确认所给的文件由哪个rpm包所提供 rpm-qppackage.rpm-l显示由一个尚未安装的rpm包提供的文件列表 rpm--import/media/cdrom/RPM-GPG-KEY导入公钥数字证书 rpm--checksigpackage.rpm确认一个rpm包的完整性 rpm-qagpg-pubkey确认已安装的所有rpm包的完整性 rpm-Vpackage_name检查文件尺寸、许可、类型、所有者、群组、MD5检查以及最后修改时间 rpm-Va检查系统中所有已安装的rpm包-小心使用 rpm-Vppackage.rpm确认一个rpm包还未安装 rpm2cpiopackage.rpm|cpio--extract--make-directories*bin*从一个rpm包运行可执行文件 rpm-ivh/usr/src/redhat/RPMS/`arch`/package.rpm从一个rpm源码安装一个构建好的包 rpmbuild--rebuildpackage_name.src.rpm从一个rpm源码构建一个rpm包 YUM软件包升级器-(Fedora,RedHat及类似系统) yuminstallpackage_name下载并安装一个rpm包 yumlocalinstallpackage_name.rpm将安装一个rpm包,使用你自己的软件仓库为你解决所有依赖关系 yumupdatepackage_name.rpm更新当前系统中所有安装的rpm包 yumupdatepackage_name更新一个rpm包 yumremovepackage_name删除一个rpm包 yumlist列出当前系统中安装的所有包 yumsearchpackage_name在rpm仓库中搜寻软件包 yumcleanpackages清理rpm缓存删除下载的包 yumcleanheaders删除所有头文件 yumcleanall删除所有缓存的包和头文件 DEB包(Debian,Ubuntu以及类似系统) 78\ndpkg-ipackage.deb安装/更新一个deb包 dpkg-rpackage_name从系统删除一个deb包 dpkg-l显示系统中所有已经安装的deb包 dpkg-l|grephttpd显示所有名称中包含"httpd"字样的deb包 dpkg-spackage_name获得已经安装在系统中一个特殊包的信息 dpkg-Lpackage_name显示系统中已经安装的一个deb包所提供的文件列表 dpkg--contentspackage.deb显示尚未安装的一个包所提供的文件列表 dpkg-S/bin/ping确认所给的文件由哪个deb包提供 APT软件工具(Debian,Ubuntu以及类似系统) apt-getinstallpackage_name安装/更新一个deb包 apt-cdrominstallpackage_name从光盘安装/更新一个deb包 apt-getupdate升级列表中的软件包 apt-getupgrade升级所有已安装的软件 apt-getremovepackage_name从系统删除一个deb包 apt-getcheck确认依赖的软件仓库正确 apt-getclean从下载的软件包中清理缓存 apt-cachesearchsearched-package返回包含所要搜索字符串的软件包名称 查看文件内容 catfile1从第一个字节开始正向查看文件的内容 tacfile1从最后一行开始反向查看一个文件的内容 morefile1查看一个长文件的内容 lessfile1类似于'more'命令,但是它允许在文件中和正向操作一样的反向操作 head-2file1查看一个文件的前两行 tail-2file1查看一个文件的最后两行 tail-f/var/log/messages实时查看被添加到一个文件中的内容 文本处理 catfile1file2...|command<>file1_in.txt_or_file1_out.txtgeneralsyntaxfortextmanipulationusingPIPE,STDINandSTDOUT catfile1|command(sed,grep,awk,grep,etc...)>result.txt合并一个文件的详细说明文本,并将简介写入一个新文件中 catfile1|command(sed,grep,awk,grep,etc...)>>result.txt合并一个文件的详细说明文本,并将简介写入一个已有的文件中 grepAug/var/log/messages在文件'/var/log/messages'中查找关键词"Aug" grep^Aug/var/log/messages在文件'/var/log/messages'中查找以"Aug"开始的词汇 grep[0-9]/var/log/messages选择'/var/log/messages'文件中所有包含数字的行 grepAug-R/var/log/*在目录'/var/log'及随后的目录中搜索字符串"Aug" sed's/stringa1/stringa2/g'example.txt将example.txt文件中的"string1"替换成"string2" sed'/^$/d'example.txt从example.txt文件中删除所有空白行 78\nsed'/*#/d;/^$/d'example.txt从example.txt文件中删除所有注释和空白行 echo'esempio'|tr'[:lower:]''[:upper:]'合并上下单元格内容 sed-e'1d'result.txt从文件example.txt中排除第一行 sed-n'/stringa1/p'查看只包含词汇"string1"的行 sed-e's/*$//'example.txt删除每一行最后的空白字符 sed-e's/stringa1//g'example.txt从文档中只删除词汇"string1"并保留剩余全部 sed-n'1,5p;5q'example.txt查看从第一行到第5行内容 sed-n'5p;5q'example.txt查看第5行 sed-e's/00*/0/g'example.txt用单个零替换多个零 cat-nfile1标示文件的行数 catexample.txt|awk'NR%2==1'删除example.txt文件中的所有偶数行 echoabc|awk'{print$1}'查看一行第一栏 echoabc|awk'{print$1,$3}'查看一行的第一和第三栏 pastefile1file2合并两个文件或两栏的内容 paste-d'+'file1file2合并两个文件或两栏的内容,中间用"+"区分 sortfile1file2排序两个文件的内容 sortfile1file2|uniq取出两个文件的并集(重复的行只保留一份) sortfile1file2|uniq-u删除交集,留下其他的行 sortfile1file2|uniq-d取出两个文件的交集(只留下同时存在于两个文件中的文件) comm-1file1file2比较两个文件的内容只删除'file1'所包含的内容 comm-2file1file2比较两个文件的内容只删除'file2'所包含的内容 comm-3file1file2比较两个文件的内容只删除两个文件共有的部分 字符设置和文件格式转换 dos2unixfiledos.txtfileunix.txt将一个文本文件的格式从MSDOS转换成UNIX unix2dosfileunix.txtfiledos.txt将一个文本文件的格式从UNIX转换成MSDOS recode..HTMLpage.html将一个文本文件转换成html recode-l|more显示所有允许的转换格式 文件系统分析 badblocks-v/dev/hda1检查磁盘hda1上的坏磁块 fsck/dev/hda1修复/检查hda1磁盘上linux文件系统的完整性 fsck.ext2/dev/hda1修复/检查hda1磁盘上ext2文件系统的完整性 e2fsck/dev/hda1修复/检查hda1磁盘上ext2文件系统的完整性 e2fsck-j/dev/hda1修复/检查hda1磁盘上ext3文件系统的完整性 fsck.ext3/dev/hda1修复/检查hda1磁盘上ext3文件系统的完整性 fsck.vfat/dev/hda1修复/检查hda1磁盘上fat文件系统的完整性 fsck.msdos/dev/hda1修复/检查hda1磁盘上dos文件系统的完整性 dosfsck/dev/hda1修复/检查hda1磁盘上dos文件系统的完整性 初始化一个文件系统 mkfs/dev/hda1在hda1分区创建一个文件系统 mke2fs/dev/hda1在hda1分区创建一个linuxext2的文件系统 78\nmke2fs-j/dev/hda1在hda1分区创建一个linuxext3(日志型)的文件系统 mkfs-tvfat32-F/dev/hda1创建一个FAT32文件系统 fdformat-n/dev/fd0格式化一个软盘 mkswap/dev/hda3创建一个swap文件系统 SWAP文件系统 mkswap/dev/hda3创建一个swap文件系统 swapon/dev/hda3启用一个新的swap文件系统 swapon/dev/hda2/dev/hdb3启用两个swap分区 备份 dump-0aj-f/tmp/home0.bak/home制作一个'/home'目录的完整备份 dump-1aj-f/tmp/home0.bak/home制作一个'/home'目录的交互式备份 restore-if/tmp/home0.bak还原一个交互式备份 rsync-rogpav--delete/home/tmp同步两边的目录 rsync-rogpav-essh--delete/homeip_address:/tmp通过SSH通道rsync rsync-az-essh--deleteip_addr:/home/public/home/local通过ssh和压缩将一个远程目录同步到本地目录 rsync-az-essh--delete/home/localip_addr:/home/public通过ssh和压缩将本地目录同步到远程目录 ddbs=1Mif=/dev/hda|gzip|sshuser@ip_addr'ddof=hda.gz'通过ssh在远程主机上执行一次备份本地磁盘的操作 ddif=/dev/sdaof=/tmp/file1备份磁盘内容到一个文件 tar-Pufbackup.tar/home/user执行一次对'/home/user'目录的交互式备份操作 (cd/tmp/local/&&tarc.)|ssh-Cuser@ip_addr'cd/home/share/&&tarx-p'通过ssh在远程目录中复制一个目录内容 (tarc/home)|ssh-Cuser@ip_addr'cd/home/backup-home&&tarx-p'通过ssh在远程目录中复制一个本地目录 tarcf-.|(cd/tmp/backup;tarxf-)本地将一个目录复制到另一个地方,保留原有权限及链接 find/home/user1-name'*.txt'|xargscp-av--target-directory=/home/backup/--parents从一个目录查找并复制所有以'.txt'结尾的文件到另一个目录 find/var/log-name'*.log'|tarcv--files-from=-|bzip2>log.tar.bz2查找所有以'.log'结尾的文件并做成一个bzip包 ddif=/dev/hdaof=/dev/fd0bs=512count=1做一个将MBR(MasterBootRecord)内容复制到软盘的动作 ddif=/dev/fd0of=/dev/hdabs=512count=1从已经保存到软盘的备份中恢复MBR内容 光盘 cdrecord-vgracetime=2dev=/dev/cdrom-ejectblank=fast-force清空一个可复写的光盘内容 78\nmkisofs/dev/cdrom>cd.iso在磁盘上创建一个光盘的iso镜像文件 mkisofs/dev/cdrom|gzip>cd_iso.gz在磁盘上创建一个压缩了的光盘iso镜像文件 mkisofs-J-allow-leading-dots-R-V"LabelCD"-iso-level4-o./cd.isodata_cd创建一个目录的iso镜像文件 cdrecord-vdev=/dev/cdromcd.iso刻录一个ISO镜像文件 gzip-dccd_iso.gz|cdrecorddev=/dev/cdrom-刻录一个压缩了的ISO镜像文件 mount-oloopcd.iso/mnt/iso挂载一个ISO镜像文件 cd-paranoia-B从一个CD光盘转录音轨到wav文件中 cd-paranoia--"-3"从一个CD光盘转录音轨到wav文件中(参数-3) cdrecord--scanbus扫描总线以识别scsi通道 ddif=/dev/hdc|md5sum校验一个设备的md5sum编码,例如一张CD 网络-(以太网和WIFI无线) ifconfigeth0显示一个以太网卡的配置 ifupeth0启用一个'eth0'网络设备 ifdowneth0禁用一个'eth0'网络设备 ifconfigeth0192.168.1.1netmask255.255.255.0控制IP地址 ifconfigeth0promisc设置'eth0'成混杂模式以嗅探数据包(sniffing) dhclienteth0以dhcp模式启用'eth0' route-nshowroutingtable routeadd-net0/0gwIP_Gatewayconfiguradefaultgateway routeadd-net192.168.0.0netmask255.255.0.0gw192.168.1.1configurestaticroutetoreachnetwork'192.168.0.0/16' routedel0/0gwIP_gatewayremovestaticroute echo"1">/proc/sys/net/ipv4/ip_forwardactivateiprouting hostnameshowhostnameofsystem hostwww.example.comlookuphostnametoresolvenametoipaddressandviceversa(1) nslookupwww.example.comlookuphostnametoresolvenametoipaddressandviceversa(2) iplinkshowshowlinkstatusofallinterfaces mii-tooleth0showlinkstatusof'eth0' ethtooleth0showstatisticsofnetworkcard'eth0' netstat-tupshowallactivenetworkconnectionsandtheirPID netstat-tuplshowallnetworkserviceslisteningonthesystemandtheirPID tcpdumptcpport80showallHTTPtraffic iwlistscanshowwirelessnetworks iwconfigeth1showconfigurationofawirelessnetworkcard hostnameshowhostname hostwww.example.comlookuphostnametoresolvenametoipaddressandviceversa 78\nnslookupwww.example.comlookuphostnametoresolvenametoipaddressandviceversa whoiswww.example.comlookuponWhoisdatabase GOTOPINDEX^ MicrosoftWindowsnetworks(SAMBA) nbtscanip_addrnetbiosnameresolution nmblookup-Aip_addrnetbiosnameresolution smbclient-Lip_addr/hostnameshowremotesharesofawindowshost smbget-Rrsmb://ip_addr/sharelikewgetcandownloadfilesfromahostwindowsviasmb mount-tsmbfs-ousername=user,password=pass//WinClient/share/mnt/sharemountawindowsnetworkshareWeb测试要点(功能、性能、可用性、兼容、安全)一、功能测试1、链接测试 (1)、测试所有链接是否按指示的那样确实链接到了该链接的页面; (2)、测试所链接的页面是否存在; (3)、保证Web应用系统上没有孤立的页面(所谓孤立页面是指没有链接指向该页面,只有知道正确的URL地址才能访问)。 2、表单测试(1)、注册、登陆、信息提交等,必须测试提交操作的完整性,以校验提交给服务器的信息的正确性;(2)、用户填写的出生日期与职业是否恰当,填写的所属省份与所在城市是否匹配等; (3)、检验默认值的正确性;(4)、如表单只能接受指定的某些值,测试时跳过这些字符,看系统是否会报错。78\n3、Cookies测试(session测试同)(1)、Cookies是否起作用; (2)、Cookies是否按预定的时间进行保存;(3)、刷新对Cookies有什么影响。 4、设计语言测试(1)、使用哪种版本的HTML;(2)、验证不同的脚本语言。例如Java、Javascrīpt、ActiveX、VBscrīpt或Perl等。5、数据库测试(1)、数据一致性错误:主要是由于用户提交的表单信息不正确而造成的;(2)、输出错误:主要是由于网络速度或程序设计问题等引起的。 二、性能测试1、连接速度测试(1)、Web系统响应时间;(2)、超时的限制。2、负载测试(1)、某个时刻同时访问Web系统的用户数量;(2)、也可以是在线数据处理的数量。3、压力测试78\n(1)、压力测试是测试系统的限制和故障恢复能力,也就是测试Web应用系统会不会崩溃,在什么情况下会崩溃。黑客常常提供错误的数据负载,直到Web应用系统崩溃,接着当系统重新启动时获得存取权。(2)、压力测试的区域包括表单、登陆和其他信息传输页面等。三、可用性测试1、导航测试(1)、导航是否直观(2)、Web系统的主要部分是否可通过主页存取 (3)、系统是否需要站点地图、搜索引擎或其他的导航帮助 (4)、Web应用系统的页面结构、导航、菜单、连接的风格是否一致 (5)、Web应用系统导航帮助要尽可能地准确。Web应用系统的层次一旦决定,就要着手测试用户导航功能。2、图形测试一个Web应用系统的图形可以包括图片、动画、边框、颜色、字体、背景、按钮等。图形测试的内容有: (1)、要确保图形有明确的用途,图片或动画不要胡乱地堆在一起,以免浪费传输时间;(2)、Web应用系统的图片尺寸要尽量地小,并且要能清楚地说明某件事情,一般都链接到某个具体的页面;(3)、验证所有页面字体的风格是否一致;(4)、背景颜色应该与字体颜色和前景颜色相搭配;(5)、图片的大小和质量也是一个很重要的因素,一般采用JPG或GIF压缩。3、内容测试检验Web应用系统提供信息的正确性、准确性和相关性。78\n信息的正确性是指信息是可靠的还是误传的。4、整体界面测试整体界面是指整个Web应用系统的页面结构设计,是给用户的一个整体感。例如:当用户浏览Web应用系统时是否感到舒适,是否凭直觉就知道要找的信息在什么地方?整个Web应用系统的设计风格是否一致?当然,对界面的整体测试并不能单靠个人直觉来评定;每个人的审美观、专业角度、系统面向的行业及用户、甚至性别与年龄等等,都是可能导致对界面作出不同评价的因素。所以要明白在对整体界面的测试过程中,其实是一个对最终用户进行调查的过程。一般Web应用系统采取在主页上做一个调查问卷的形式,来得到最终用户的反馈信息。四、兼容性测试1、平台测试在Web系统发布之前,需要在各种操作系统下对Web系统进行兼容性测试。2、浏览器测试(1)、浏览器是Web客户端最核心的构件,来自不同厂商的浏览器对Java,、Javascrīpt、ActiveX、plug-ins或不同的HTML规格有不同的支持。例如,ActiveX是Microsoft的产品,是为InternetExplorer而设计的,Javascrīpt是Netscape的产品,Java是Sun的产品等等。另外,框架和层次结构风格在不同的浏览器中也有不同的显示,甚至根本不显示。不同的浏览器对安全性和Java的设置也不一样。(2)、测试浏览器兼容性的一个方法是创建一个兼容性矩阵。在这个矩阵中,测试不同厂商、不同版本的浏览器对某些构件和设置的适应性。78\n五、安全性测试(1)、现在的Web应用系统基本采用先注册,后登陆的方式。因此,必须测试有效和无效的用户名和密码,要注意到是否大小写敏感,可以试多少次的限制,是否可以不登陆而直接浏览某个页面等;(2)、Web应用系统是否有超时的限制,用户登陆后在一定时间内(例如15分钟)没有点击任何页面,是否需要重新登陆才能正常使用;(3)、为了保证Web应用系统的安全性,需要测试相关信息是否写进了日志文件、是否可追踪;(4)、当使用了安全套接字时,还要测试加密是否正确,检查信息的完整性; (5)、服务器端的脚本常常构成安全漏洞,这些漏洞又常常被黑客利用。所以,还要测试没有经过授权,就不能在服务器端放置和编辑脚本的问题。(6)、通过模拟攻击的形式拷贝Web应用程序的某个功能点的url地址,然后打开新的页面输入该url地址看其是否能跨过系统的登录模块直接进入该功能点。(7)、服务器端IIS是否设置了默认文档功能。(8)、IIS服务器的主目录应该与操作系统的安装路径设置在不同的盘符下。1.Oracle数据库中的to_date()函数的使用: 往emp表中插入一条记录:SQL>insertintoempvalues(1234,'LIZELU','BOSS',1234,'1980-12-06',10000.0,0,30);insertintoempvalues(1234,'LIZELU','BOSS',1234,'1980-12-06',10000.0,0,30)ORA-01861:文字与格式字符串不匹配--日期格式不对使用to_date()函数搞定:格式to_date('1965-02-05','yyyy-mm-dd');2.Oracle中的字符函数:78\n 字符函数是Oracle中最常用的函数, lower(char);把字符串转换为小写格式; upper(char);把字符串转换为大写格式; length(char);返回字符串的长度; substr(char,m,n);取字符串的字串; replace(char,search_char,replace_str); 1.将所有员工的名字按小写的格式输出selectlower(emp.ename)fromemp; 2.显示正好为5个字符的名字;selectenamefromempwherelength(ename)=5; 3.显示姓名的前三个字符;substr(char,2,3);代表从第二个取,取三个字符;selectsubstr(ename,1,3)fromemp; 4.显示姓名要求首字母大写,其余的小写; 分成三部走: (1)把首字母大写: selectupper(substr(emp.ename,1,1))fromemp; (2)把后面的字母小写:selectlower(substr(ename,2,length(ename)-1))fromemp; (3)把两个字符串连接起来||(管道符是连接作用的)selectupper(substr(emp.ename,1,1))||lower(substr(ename,2,length(ename)-1))fromemp; 5.把名字中的A转换为a;selectreplace(ename,'A','a')fromemp;3.Oracle中的数学函数: 1.round(n,[m]):四舍五入,省略m则四舍五入到整数位,m为小数点的位数;selectround(sal,1)fromempwhereename='MILLER'; 2.trunc(n,[m]):保留小数位,m为小数位的个数selecttrunc(sal,1)fromempwhereename='MILLER'; 3.mod(n,m):去小数; 4.floor(n):返回小于等于n的最大整数; ceil(n):返回大于等于n的最小整数SQL>selectfloor(sal)fromempwhereename='MILLER';--向下取整78\nFLOOR(SAL)----------1300SQL>selectceil(sal)fromempwhereename='MILLER';--向上取整CEIL(SAL)----------1301其他数学函数:abs(n):返回数字n的绝对值。acos(n),asin(n),stan(n)返回数字的反余弦,反正弦,反正切的值exp(n):返回e的n次幂;log(m,n);返回对数值;power(m,n);返回m的n次幂4.Oracle中的日期函数: 日期函数用于处理date类型的数据:默认情况下是dd-mon-yy格式。 (1)sysdate:该函数返回系统时间SQL>selectsysdatefromdual;SYSDATE-----------2014-4-139 (2)add_moths(d,n); 显示入职8个多月的职工;select*fromempwheresysdate>add_months(emp.hiredate,8); (3)last_day(d);返回当前日期该月的最后一天selectlast_day(emp.hiredate)fromemp; (4)显示员入职的天数SQL>selectename,round(sysdate-emp.hiredate)"入职天数"fromemp;78\n (5)找出个月的倒数第3天入职的员工SQL>select*fromempwhere(last_day(emp.hiredate)-emp.hiredate)=2;5.Oracle中数据类型的转换 to_char():把数据转换为字符串类型:to_char(字符串,类型); 1.日期转换SQL>selectto_char(sysdate,'yyyy/mm/ddhh24:mi:ss')fromdual;TO_CHAR(SYSDATE,'YYYY/MM/DDHH2------------------------------2014/04/1310:13:52 2.显示1980年入职的员工信息SQL>select*fromempwhereto_char(emp.hiredate,'yyyy')=1980;EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO----------------------------------------------------------------1234LIZELUBOSS12341980-12-610000.000.00307369SMITHCLERK79021980-12-17800.00206.Oracle中的系统函数:sys_context(); 1)terminal当前会话客户所对应的终端标识符SQL>selectsys_context('USERENV','terminal')fromdual;SYS_CONTEXT('USERENV','TERMINA--------------------------------------------------------------------------------WEB-A93B1E61669 2)language语言SQL>selectsys_context('USERENV','language')fromdual;SYS_CONTEXT('USERENV','LANGUAG--------------------------------------------------------------------------------SIMPLIFIEDCHINESE_CHINA.ZHS16GBK78\n 3)db_name当前的数据库实例名称SQL>selectsys_context('USERENV','db_name')fromdual;SYS_CONTEXT('USERENV','DB_NAME--------------------------------------------------------------------------------orcl 4)session_user当前会话所对应的数据库SQL>selectsys_context('USERENV','session_user')fromdual;SYS_CONTEXT('USERENV','SESSION--------------------------------------------------------------------------------SCOTT 5)current_schema:查看当前方案SQL>selectsys_context('USERENV','current_schema')fromdual;SYS_CONTEXT('USERENV','CURRENT--------------------------------------------------------------------------------SCOTT下面就对网络协议规范作个概述:ARP(AddressResolutionProtocol)地址解析协议 它是用于映射计算机的物理地址和临时指定的网络地址。启动时它选择一个协议(网络层)地址,并检查这个地址是否已经有别的计算机使用,如果没有被使用,此结点被使用这个地址,如果此地址已经被别的计算机使用,正在使用此地址的计算机会通告这一信息,只有再选另一个地址了。 78\nSNMP(SimpleNetworkManagementProtocol)网络管理协议 它是TCP/IP协议中的一部份,它为本地和远端的网络设备管理提供了一个标准化途径,是分布式环境中的集中化管理的重要组成部份。 AppleShareprotocol(AppleShare协议) 它是Apple机上的通信协议,它允许计算机从服务器上请求服务或者和服务器交换文件。AppleShare可以在TCP/IP协议或其它网络协议如IPX、AppleTalk上进行工作。使用它时,用户可以访问文件,应用程序,打印机和其它远程服务器上的资源。它可以和配置了AppleShare协议的任何服务器进行通信,Macintosh、MacOS、WindowsNT和NovellNetware都支持AppleShare协议。 AppleTalk协议 它是Macintosh计算机使用的主要网络协议。WindowsNT服务器有专门为Macintosh服务,也能支持该协议。其允许Macintosh的用户共享存储在WindowsNT文件夹的Mac-格式的文件,也可以使用和WindowsNT连接的打印机。WindowsNT共享文件夹以传统的Mac文件夹形式出现在Mac用户面前。Mac文件名按需要被转换为FAT(8.3)格式和NTFS文件标准。支持MAc文件格式的DOS和Windows客户端能与Mac用户共享这些文件。 BGP4(BorderGatewayProtocolVertion4)边界网关协议-版本4 它是用于在自治网络中网关主机(每个主机有自己的路由)之间交换路由信息的协议,它使管理员能够在已知的路由策略上配置路由加权,可以更方便地使用无级内部域名路由(CIDR),它是一种在网络中可以容纳更多地址的机制,它比外部网关协议(EGP)更新。BGP4经常用于网关主机之间,主机中的路由表包括了已知路由的列表,可达的地址和路由加权,这样就可以在路由中选择最好的通路了。BGP在局域网中通信时使用内部BGP(IBGP),因为IBGP不能很好工作。 78\nBOOTP协议 它是一个基于TCP/IP协议的协议,它可以让无盘站从一个中心服务器上获得IP地址,现在我们通常使用DHCP协议进行这一工作。 CMIP(CommonManagementInformationProtocol)通用管理信息协议它是建立在开放系统互连通信模式上的网络管理协议。相关的通用管理信息服务(CMIS)定义了访问和控制网络对象,设备和从对象设备接收状态信息的方法。 Connection-orientedProtocol/ConnectionlessProtocol面向连接的协议/无连接协议 在广域网中,两台计算机建立物理连接过程所使用的协议,这种物理连接要持续到成功地交换完数据为止。在nternet中,TCP(传输控制协议)即这一类型的协议,它为两台连接在网络上的计算机提供了可相互通信且确保数据成功传输的一种手段。面向连接的协议一定要保证数据传送到对方。在广域网中,对接收方的计算机不做在线状态,或接收能力的测试,都能使数据由一台计算机传输到另外一台计算机上的协议。这是包交换网络中的主要协议,在Internet中的IP协议即无连接协议,IP只关注将数据分成数据包进行传输,并在这些数据包被接收后重新组包,而不关注接收方计算机的状态。由面向连接的协议(如Internet中的TCP)来确保数据的接收。 DHCP(DynamicHostConfigurationProtocol)动态主机配置协议 它是在TCP/IP网络上使客户机获得配置信息的协议,它是基于BOOTP协议,并在BOOTP协议的基础上添加了自动分配可用网络地址等功能。这两个协议可以通过一些机制互操作。DHCP协议在安装TCP/IP协议和使用TCP/IP协议进行通迅时,必须配置IP地址、子网掩码、缺省网关三个参数,这三个参数可以手动配置,也可以使用DHCP自动配置。 78\nDiscardProtocol抛弃协议 它的作用就是接收到什么抛弃什么,它对调试网络状态的一定的用处。基于TCP的抛弃服务,如果服务器实现了抛弃协议,服务器就会在TCP端口9检测抛弃协议请求,在建立连接后并检测到请求后,就直接把接收到的数据直接抛弃,直到用户中断连接。而基于UDP协议的抛弃服务和基于TCP差不多,检测的端口是UDP端口9,功能也一样。 EchoProtocol协议 这个协议主要用于调试和检测中。这个协议的作用也十分简单,接收到什么原封发回就是了。它可以基于TCP协议,服务器就在TCP端口7检测有无消息,如果有发送来的消息直接返回就是了。如果使用UDP协议的基本过程和TCP一样,检测的端口也是7。 FTP(FileTransferProtocol)文件传输协议 它是一个标准协议,是在计算机和网络之间交换文件的最简单的方法。像传送可显示文件的HTTP和电子邮件的SMTP一样,FTP也是应用TCP/IP协议的应用协议标准。FTP通常用于将网页从创作者上传到服务器上供人使用,而从服务器上下传文件也是一种非常普遍的使用方式。作为用户,您可以用非常简单的DOS界面来使用FTP,也可以使用由第三方提供的图形界面的FTP来更新(删除,重命名,移动和复制)服务器上的文件。现在有许多服务器支持匿名登录,允许用户使用FTP和ANONYMOUS作为用户名进行登录,通常可使用任何口令或只按回车键。 HDLC(High-LevelDataLinkControl)高层数据链路协议 它是一组用于在网络结点间传送数据的协议。在HDLC中,数据被组成一个个的单元(称为帧)通过网络发送,并由接收方确认收到。HDLC协议也管理数据流和数据发送的间隔时间。HDLC是在数据链路层中最广泛最使用的协议之一。78\n现在作为ISO的标准,HDLC是基于IBM的SDLC协议的,SDLC被广泛用于IBM的大型机环境之中。在HDLC中,属于SDLC的被称为通响应模式(NRM)。在通常响应模式中,基站(通常是大型机)发送数据给本地或远程的二级站。不同类型的HDLC被用于使用X.25协议的网络和帧中继网络,这种协议可以在局域网或广域网中使用,无论此网是公共的还是私人的。 HTTP1.1(HypertextTransferProtocolVertion1.1)超文本传输协议-版本1.1 它是用来在Internet上传送超文本的传送协议。它是运行在TCP/IP协议族之上的HTTP应用协议,它可以使浏览器更加高效,使网络传输减少。任何服务器除了包括HTML文件以外,还有一个HTTP驻留程序,用于响应用用户请求。您的浏览器是HTTP客户,向服务器发送请求,当浏览器中输入了一个开始文件或点击了一个超级链接时,浏览器就向服务器发送了HTTP请求,此请求被送往由IP地址指定的URL。驻留程序接收到请求,在进行必要的操作后回送所要求的文件。 HTTPS(SecureHypertextTransferProtocol)安全超文本传输协议 它是由Netscape开发并内置于其浏览器中,用于对数据进行压缩和解压操作,并返回网络上传送回的结果。HTTPS实际上应用了Netscape的完全套接字层(SSL)作为HTTP应用层的子层。(HTTPS使用端口443,而不是象HTTP那样使用端口80来和TCP/IP进行通信。)SSL使用40位关键字作为RC4流加密算法,这对于商业信息的加密是合适的。HTTPS和SSL支持使用X.509数字认证,如果需要的话用户可以确认发送者是谁。 ICMP(InternetControlMessageProtocol)Internet控制信息协议 它是一个在主机和网关之间消息控制和差错报告协议。ICMP使用IP数据报,但消息由TCP/IP软件处理,对于应用程序使用者是不可见的。78\n在被称为Catenet的系统中,IP协议被用作主机到主机的数据报服务。网络连接设备称为网关。这些网关通过网关到网关协议(GGP)相互交换用于控制的信息。通常,赡养或目的主机将和源主机通信,例如,为报告在数据报过程中的错误。为了这个目的才使用了ICMP,它使用IP做于底层支持,好象它是一个高层协议,而实际上它是IP的一部分,必须由其它IP模块实现。ICMP消息在以下几种情况下发送:当数据报不能到达目的地时,当网关的已经失去缓存功能,当网关能够引导主机在更短路由上发送。IP并非设计为设计为绝对可靠,这个协议的目的是为了当网络出现问题的时候返回控制信息,而不是使IP协议变得绝对可靠,并不保证数据报或控制信息能够返回。一些数据报仍将在没有任何报告的情况下丢失。 IMAP4(InternetMailAccessProtocolVersion4)Internet邮件访问协议-版本4 它是用于从本地服务器上访问电子邮件的标准协议,它是一个C/S模型协议,用户的电子邮件由服务器负责接收保存。IMAP4改进了POP3的不足,用户可以通过浏览信件头来决定是不是要下载此信,还可以在服务器上创建或更改文件夹或邮箱,删除信件或检索信件的特定部分。在用户访问电子电子邮件时,IMAP4需要持续访问服务器。在POP3中,信件是保存在服务器上的,当用户阅读信件时,所有内容都会被立刻下载到用户的机器上。我们有时可以把IMAP4看成是一个远程文件服务器,把POP3可以看成是一个存储转发服务。 NNTP(NetworkNewsTransferProtocol)网络新闻传输协议 NNTP同POP3协议一样,也存在某些局限性。 IOTP(InternetOpenTradingProtocol)Internet开放贸易协议 Internet开放贸易协议是一系列的标准,它使电子购买交易在客户,78\n销售商和其它相关部分都是一致的,无论使用何种付款系统。IOTP适用于很多的付款系统,如SET,DigiCash,电子支票或借记卡。付款系统中的数据封装在IOTP报文中。IOTP处理的交易可以包括客户、销售商、信用支票、证明、银行等部分。IOTP使用XML语言(ExtensibleMarkupLanguage)来定义包含在交易中的数据。 IPv6(InternetProtocolVersion6)Internet协议-版本6 它是Internet协议的最新版本,已作为IP的一部分并被许多主要的操作系统所支持。IPv6也被称为“Ipng”(下一代IP),它对现行的IP(版本4)进行重大的改进。使用IPv4和IPv6的网络主机和中间结点可以处理IP协议中任何一层的包。用户和服务商可以直接安装IPv6而不用对系统进行什么重大的修改。相对于版本4,新版本的最大改进在于将IP地址从32位改为128位,这一改进是为了适应网络快速的发展对IP地址的需求,也从根本上改变了IP地址短缺的问题。简化IPv4首部字段被删除或者成为可选字段,减少了一般情况下包的处理开销以及IPv6首部占用的带宽。改进IP首部选项编码方式的修改导致更加高效的传输,在选项长度方面更少的限制,以及将来引入新的选项时更强的适应性。加入一个新的能力,使得那些发送者要求特殊处理的属于特别的传输流的包能够贴上标签,比如非缺省质量的服务或者实时服务。为支持认证,数据完整性以及(可选的)数据保密的扩展都在IPv6中说明。本文描述IPv6基本首部以及最初定义的IPv6扩展首部和选项。还将讨论包的大小问题,数据流标签和传输类别的语法,以及IPv6对上层协议的影响。IPv6地址的格式和语法在其它文章中单独说明。IPv6版的ICMP是所有IPv6应用都需要包含的。 IPX/SPX(InternetworkPacketExchange/SequentialPacketExchange)互连网包交换/顺序包交换 它是由Novell提出的用于客户/服务器相连的网络协议。78\n使用IPX/SPX协议能运行通常需要NetBEUI支持的程序,通过IPX/SPX协议可以跨过路由器访问其他网络。 MIME(Multi-PurposeInternetMailExtensions)多功能Internet邮件扩展 MIME是扩展SMTP协议,是1991年NathanBorenstein向IETF提出。在传输字符数据的同时,允许用户传送另外的文件类型,如声音,图像和应用程序,并将其压缩在MIME附件中。因此,新的文件类型也被作为新的被支持的IP文件类型。 NetBEUI(NetBIOSEnhancedUserInterface)网络基本输入输出系统扩展用户接口 NetBEUI协议是IBM于1985年提出。NetBEUI主要为20到200个工作站的小型局域网设计的,用于NetBEUI、LanMan网、WindowsForWorkgroups及WindowsNT网。NetBEUI是一个紧凑、快速的协议,但由于NetBEUI没有路由能力,即不能从一个局域网经路由器到另一个局域网,已不能适应较大的网络。如果需要路由到其他局域网,则必须安装TCP/IP或IPX/SPX协议。 OSPF(OpenShortestPathFirst)开放最短路优先 OSPF是用于大型自主网络中替代路由信息协议的协议标准。象RIP一样,OSPF也是由IETF设计用作内部网关协议族中的一个标准。在使用OSPF时网络拓朴结构的变化可以立即在路由器上反映出来。不象RIP,OSPF不是全部当前结点保存的路由表,而是通过最短路优先算法计算得到最短路,这样可以降低网络通信量。如果您熟悉最短路优先算法就会知道,它是一种只关心网络拓朴结构的算法,而不关心其它情况,如优先权的问题,对于这一点,OSPF改变了算法使它根据不同的情况给某些通路以优先权。 78\nPOP3(PostOfficeProtocolVersion3)邮局协议-版本3 它是一个关于接收电子邮件的客户/服务器协议。电子邮件由服务器接收并保存,在一定时间之后,由客户电子邮件接收程序检查邮箱并下载邮件。POP3它内置于IE和Netscape浏览器中。另一个替代协议是交互邮件访问协议(IMAP)。使用IMAP您可以将服务器上的邮件视为本地客户机上的邮件。在本地机上删除的邮件还可以从服务器上找到。E-mail可以被保存在服务器上,并且可以从服务器上找回。 PPP(PointtoPointProtocol)点对点协议 它是用于串行接口的两台计算机的通信协议,是为通过电话线连接计算机和服务器而彼此通信而制定的协议。网络服务提供商可以提供您点对点连接,这样提供商的服务器就可以响应您的请求,将您的请求接收并发送到网络上,然后将网络上的响应送回。PPP是使用IP协议,有时它被认为是TCP/IP协议族的一员。PPP协议可用于不同介质上包括双绞线,光纤和卫星传输的全双工协议,它使用HDLC进行包的装入。PPP协议既可以处理同步通信也可以处理异步通信,可以允许多个用户共享一个线路,又可发进行SLIP协议所没有的差错控制。 RIP(RoutingInfomationProtocol)路由信息协议 RIP是最早的路由协议之一,而且现在仍然在广泛使用。它从类别上应该属于内部网关协议(IGP)类,它是距离向量路由式协议,这种协议在计算两个地方的距离时只计算经过的路由器的数目,如果到相同目标有两个不等速或带宽不同的路由器,但是经过的路由器的个数一样,RIP认为两者距离一样,而实际传送数据时,很明显一个快一个慢,这就是RIP协议的不足之处,而OSPF在它的基础上克服了RIP的缺点。 SLIP(SerialLineInternetProtocol)串行线路Internet协议 它是一个TCP/IP协议,它用于在两台计算机之间通信。78\n通常计算机与服务器连接的线路是串行线路,而不是如T1的多路线路或并行线。您的服务器提供商可以向您提供SLIP连接,这样他的服务器就可以响应您的请求,并将请求发送到网络上,然后将网络返回的结果送至您的计算机。现已逐渐被功能更好的PPP点对点协议所取代。 SMBprotocol(ServerMessageBlockprotocol)服务器信息块协议 它提供了运行在客户计算机上的程序请求网络上服务器服务的方法,它可以用在TCP/IP协议之上,也可以用上网络协议如IPX和NetBEUI之上。使用SMB协议时,应用程序可以访问远程计算机上的资源,包括打印机,命名管道等。因此,用户程序可以读,创建和更新在远程服务器上的文件,也可以和已经安装SMB协议的计算机通信。MicrosoftWindowsforWorkgroups,Windows95和WindowsNT都提供了SMB协议客户和服务器的支持。 对于UNIX系统,共享软件Samba也提供了类似的服务。 LMTP(LocalMailTransferProtocol)本地邮件传输协议 SMTP和SMTP服务扩展(ESMTP)提供了一种高效安全传送电子邮件的方法,而在实现SMTP时需要管理一个邮件传送队列,在有些时候这样做可能有麻烦,需要一种没有队列的邮件传送系统,而LMTP就是这样的一个系统,它使用ESMTP的语法,而它和ESMTP可不是一回事,而LMTP也不能用于TCP端口25。LMTP协议与SMTP和ESMTP协议很象,为了避免和SMTP和ESMTP服务混淆,LMTP使用LHLO命令开始一个LMTP会话,它的基本语法和HELO和EHLO命令相同。对于DATA命令来说,如果RCPT命令失败,DATA命令必须返回503,并失败。每个DATA命令碰到"."时,服务器必须对所有成功的RCPT命令返回应答,这和平常的SMTP系统不同,而且顺序必须和RCPT成功的顺序一致,即使对于同一个向前路径来说有许多RCPT命令,也必须返回多个成功应答。这就意味着,服务器返回的确认应答是指服务器把邮件地发送到接收者或另一个转发代理。 78\nSMTP(SimpleMailTransferProtocol)简单邮件传送协议 它是用来发送电子邮件的TCP/IP协议。它的内容由IETF的RFC821定义。另外一个和SMTP相同功能的协议是X.400。SMTP的一个重要特点是它能够在传送中接力传送邮件,传送服务提供了进程间通信环境(IPCE),此环境可以包括一个网络,几个网络或一个网络的子网。理解到传送系统(或IPCE)不是一对一的是很重要的。进程可能直接和其它进程通过已知的IPCE通信。邮件是一个应用程序或进程间通信。邮件可以通过连接在不同IPCE上的进程跨网络进行邮件传送。更特别的是,邮件可以通过不同网络上的主机接力式传送。 Talk协议 Talk协议能使远程计算机上的两个用户以实时方式进行通信。 TCP/IP(TransmissionControlProtocol/InternetProtocol)传输控制协议/Internet协议 TCP/IP协议起源于美国国防高级研究计划局。提供可靠数据传输的协议称为传输控制协议TCP,好比货物装箱单,保证数据在传输过程中不会丢失;提供无连接数据报服务的协议称为网络协议IP,好比收发货人的地址姓名,保证数据到达指定的地点。TCP/IP协议是互联网上广泛使用的一种协议,使用TCP/IP协议的因特网等网络提供的主要服务有:电子邮件、文件传送、远程登录、网络文件系统、电视会议系统和万维网。它是Interent的基础,它提供了在广域网内的路由功能,而且使Internet上的不同主机可以互联。从概念上,它可以映射到四层:网络接口层,这一层负责在线路上传输帧并从线路上接收帧;Internet层,这一层中包括了IP协议,IP协议生成Internet数据报,进行必要的路由算法,IP协议实际上可以分为四部分:ARP,ICMP,IGMP和IP;78\n再上向就是传输层,这一层负责管理计算机间的会话,这一层包括两个协议TCP和UDP,由应用程序的要求不同可以使用不同的协议进行通信;最后一层是应用层,就是我们熟悉的FTP,DNS,TELNET等。熟悉TCP/IP是熟悉Internet的必由之路。 TELNETProtocol虚拟终端协议 TELNET协议的目的是提供一个相对通用的,双向的,面向八位字节的通信方法,它主要的目标是允许接口终端设备的标准方法和面向终端的相互作用。是让用户在远程计算机登录,并使用远程计算机上对外开放的所有资源。 TimeProtocol时间协议 该协议提供了一个独立于站点的,机器可读的日期和时间信息。时间服务返回的是以秒数,是从1900年1月1日午夜到现在的秒数。设计这个协议的一个重要目的在于,网络上的许多主机并没有时间的观念,在分布式的系统上,我们可以想一想,北京的时间和东京的时间如何分呢?主机的时间往往可以人为改变,而且因为机器时钟内的误差而变得不一致,因此需要使用时间服务器通过选举方式得到网络时间,让服务器有一个准确的时间观念。不要小看时间,这对于一些以时间为标准的分布运行的程序简单是太重要了。这个协议可以工作在TCP和UDP协议下。时间是由32位表示的,是自1900年1月1日0时到当前的秒数,我们可以计算一下,这个协议只能表示到2036年就不能用了,但是我们也知道计算机发展速度这么快,到时候可能就会有更好的协议代替这个协议. TFTP(TrivialFileTransferProtocol)小文件传输协议 它是一个网络应用程序,它比FTP简单也比FTP功能少。它在不需要用户权限或目录可见的情况下使用,它使用UDP协议而不是TCP协议。 UDP(UserDatagramProtocol)用户数据报协议 它是定义用来在互连网络环境中提供包交换的计算机通信的协议,78\n此协议默认认为网路协议(IP)是其下层协议。UDP是TCP的另外一种方法,象TCP一样,UDP使用IP协议来获得数据单元(叫做数据报),不象TCP的是,它不提供包(数据报)的分组和组装服务。而且,它还不提供对包的排序,这意味着,程序程序必须自己确定信息是否完全地正确地到达目的地。如果网络程序要加快处理速度,那使用UPD就比TCP要好。UDP提供两种不由IP层提供的服务,它提供端口号来区别不同用户的请求,而且可以提供奇偶校验。在OSI模式中,UDP和TCP一样处于第四层,传输层。 UUCP(UNIX-to-UNIXCopyProtocol)UNIX至UNIX拷贝协议 它是一组用于在不同UNIX系统之间复制(传送)文件或传送用于其它UNIX系统执行命令的一组指令,是UNIX网络的基础。 X.25协议 它是CCITT标准的通讯协议,制定于1976年,用于定义同步传输的数据包。是国际上分组数据网(PDN)上使用的一种协议。它允许不同网络中的计算机通过一台工作在网络层的中间计算机进行相互通信。 X.400协议 它是一个电子邮件协议,它由ITU-TS制定,它可以发挥和SMTP相同的功能。X.400在欧洲和加拿大使用比较多,它实际上是一个标准集,每个标准的序号都在此400到499之间。X.400地址能够提供许多SMTP地址所不能够提供的功能,因此X.400的地址会比较长而且比较麻烦。X.400的确提供了比SMTP更多的功能,然而这些功能却很少能够用到。X.400的主要部分有以下几个:用户代理(UA),消息传送代理(MTA)和消息传输系统(MTS)。 78\nZ39.50协议 它是一个标准的通信协议,它用于检索和获得在线数据库中的著书目录。Z39.50用于在互联网上检索图书馆的在线公共访问目录(OnlinePublicAccessCatalogues,OPAC),也可以用于把多个分离的OPAC连接起来,它是ANSI/NISO标准一、OSI参考模型 今天我们先学习一下以太网最基本也是重要的知识——OSI参考模型。 1、OSI的来源 OSI(OpenSystemInterconnect),即开放式系统互联。一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互连模型。 ISO为了更好的使网络应用更为普及,推出了OSI参考模型。其含义就是推荐所有公司使用这个规范来控制网络。这样所有公司都有相同的规范,就能互联了。 2、OSI七层模型的划分 OSI定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层、应用层),即ISO开放互连系统参考模型。如下图。 每一层实现各自的功能和协议,并完成与相邻层的接口通信。OSI的服务定义详细说明了各层所提供的服务。某一层的服务就是该层及其下各层的一种能力,它通过接口提供给更高一层。各层所提供的服务与这些服务是怎么实现的无关。78\n 3、各层功能定义 这里我们只对OSI各层进行功能上的大概阐述,不详细深究,因为每一层实际都是一个复杂的层。后面我也会根据个人方向展开部分层的深入学习。这里我们就大概了解一下。我们从最顶层——应用层开始介绍。整个过程以公司A和公司B的一次商业报价单发送为例子进行讲解。<1> 应用层 OSI参考模型中最靠近用户的一层,是为计算机用户提供应用接口,也为用户直接提供各种网络服务。我们常见应用层的网络服务协议有:HTTP,HTTPS,FTP,POP3、SMTP等。 实际公司A的老板就是我们所述的用户,而他要发送的商业报价单,就是应用层提供的一种网络服务,当然,老板也可以选择其他服务,比如说,发一份商业合同,发一份询价单,等等。<2> 表示层 表示层提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。如果必要,该层可提供一种标准表示形式,用于将计算机内部的多种数据格式转换成通信中采用的标准表示形式。数据压缩和加密也是表示层可提供的转换功能之一。 由于公司A和公司B是不同国家的公司,他们之间的商定统一用英语作为交流的语言,所以此时表示层(公司的文秘),就是将应用层的传递信息转翻译成英语。同时为了防止别的公司看到,公司A的人也会对这份报价单做一些加密的处理。这就是表示的作用,将应用层的数据转换翻译等。78\n<3> 会话层 会话层就是负责建立、管理和终止表示层实体之间的通信会话。该层的通信由不同设备中的应用程序之间的服务请求和响应组成。 会话层的同事拿到表示层的同事转换后资料,(会话层的同事类似公司的外联部),会话层的同事那里可能会掌握本公司与其他好多公司的联系方式,这里公司就是实际传递过程中的实体。他们要管理本公司与外界好多公司的联系会话。当接收到表示层的数据后,会话层将会建立并记录本次会话,他首先要找到公司B的地址信息,然后将整份资料放进信封,并写上地址和联系方式。准备将资料寄出。等到确定公司B接收到此份报价单后,此次会话就算结束了,外联部的同事就会终止此次会话。<4> 传输层 传输层建立了主机端到端的链接,传输层的作用是为上层协议提供端到端的可靠和透明的数据传输服务,包括处理差错控制和流量控制等问题。该层向高层屏蔽了下层数据通信的细节,使高层用户看到的只是在两个传输实体间的一条主机到主机的、可由用户控制和设定的、可靠的数据通路。我们通常说的,TCPUDP就是在这一层。端口号既是这里的“端”。 传输层就相当于公司中的负责快递邮件收发的人,公司自己的投递员,他们负责将上一层的要寄出的资料投递到快递公司或邮局。<5> 网络层 本层通过IP寻址来建立两个节点之间的连接,为源端的运输层送来的分组,选择合适的路由和交换节点,正确无误地按照地址传送给目的端的运输层。就是通常说的IP层。这一层就是我们经常说的IP协议层。IP协议是Internet的基础。 网络层就相当于快递公司庞大的快递网络,全国不同的集散中心,比如说,从深圳发往北京的顺丰快递(陆运为例啊,空运好像直接就飞到北京了),首先要到顺丰的深圳集散中心,从深圳集散中心再送到武汉集散中心,从武汉集散中心再寄到北京顺义集散中心。这个每个集散中心,就相当于网络中的一个IP节点。<6> 数据链路层 将比特组合成字节,再将字节组合成帧,使用链路层地址(以太网使用MAC地址)来访问介质,并进行差错检测。 数据链路层又分为2个子层:逻辑链路控制子层(LLC)和媒体访问控制子层(MAC)。 MAC子层处理CSMA/CD算法、数据出错校验、成帧等;LLC子层定义了一些字段使上次协议能共享数据链路层。在实际使用中,LLC子层并非必需的。 这个没找到合适的例子<7> 物理层 78\n 实际最终信号的传输是通过物理层实现的。通过物理介质传输比特流。规定了电平、速度和电缆针脚。常用设备有(各种物理设备)集线器、中继器、调制解调器、网线、双绞线、同轴电缆。这些都是物理层的传输介质。 快递寄送过程中的交通工具,就相当于我们的物理层,例如汽车,火车,飞机,船。4、通信特点:对等通信 对等通信,为了使数据分组从源传送到目的地,源端OSI模型的每一层都必须与目的端的对等层进行通信,这种通信方式称为对等层通信。在每一层通信过程中,使用本层自己协议进行通信。二、TCP/IP五层模型 TCP/IP五层协议和OSI的七层协议对应关系如下。78\n 在每一层都工作着不同的设备,比如我们常用的交换机就工作在数据链路层的,一般的路由器是工作在网络层的。78\n在每一层实现的协议也各不同,即每一层的服务也不同.下图列出了每层主要的协议。其中每层中具体的协议,我会在后面的逐一学习。78\nQTP自动化测试脚本中常用的函数2011-02-16 陈斌 1.GetCellData函数 作用:获取单元格的值例:rowCount=Browser("xxx").Page("xxx").Frame("xxx").WebTable("xxx").RowCount78\nForcounter=1TorowCounttext=Browser("xxx").Page("xxx").Frame("xxx").WebTable("xxx").GetCellData(counter,1)If(text="xxx")Then counter=counter-1 selectNO="#"&counter Browser("xxx").Page("xxx").Frame("xxx").WebRadioGroup("xxx").SelectselectNO ExitForEndIfNext78\n2.把值插入datatable里例: datatable.setcurrentrow(i) datatable.value("name","Global")="name" datatable.value("passwd","Global")="passwd"3.用代码来启动浏览器Browser1="IE"StartURL="www.51testing.com"IFBrowser1="IE"THEN78\n setIE=CreateObject("InternetExplorer.Application") IE.Visible=true IE.NavigateStartURLENDIF4.ExecuteFile函数作用:ExecuteFile可以直接执行vbs文件,而不需要将其导入resource中 ExecuteFileFileName 78\n说明:whereFileNameistheabsoluteorrelativepathofyourVBscrīptfile.例:ExecuteFile("F:"test.vbs")5.Strcomp函数 作用:比较文本例:dimstrtext1,strtext2,str,str1,comp1 strtext1="xxx" strtext2="xxx" str=78\nVbWindow("xxx").VbWindow("xxx").VbLabe1("xxx").GetTOProperty("text") str1=VbWindow("xxx").VbWindow("xxx").VbLabel("xxx").GetTOProperty("text") comp1=strcomp(strtext1,str,0) Ifcomp=0Then msgbox“这两个串相等” else msgboxstr EndIf 6.CaptureBitmap 78\n作用:捕获屏幕7.GetROProperty作用:取对象属性值例:VbWindow("xxx").VbWindow("xxx").VbWindow("xxx").ActiveX("xxx").GetROProperty("TextMatrix(1,0)") 8.ExitAction-退出当前操作,无论其循环属性如何。ExitActionIteration-退出操作的当前循环。ExitRun-退出测试,无论其循环属性如何。78\nExitGlobalIteration-退出当前全局循环。9.如何使用Excel对象处理数据?Dimxl打开excel文件FunctionOpenExcelFile(strFilePath)Setxl=CreateObject("Excel.Application")xl.Workbooks.OpenstrFilePathEndFunction获得指定单元格数据78\nFunctionGetCellData(strSheet,rwIndex,colIndex)GetCellData=xl.WorkSheets(strSheet).Cells(rwIndex,colIndex)EndFunction填充单元格数据FunctionPutCellData(strSheet,rwIndex,colIndex,varData)xl.WorkSheets(strSheet).Cells(rwIndex,colIndex)=varDataEndFunction78\n保存并推出FunctionSaveAndQuit()xl.Activeworkbook.savexl.QuitSetxl=nothingEndFunction10.连接sql数据库例imres,cmd,sql SetRes=createobject("adodb.recordset")78\n SetCmd=createobject("adodb.command") Cmd.activeconnection="rovider=SQLOLEDB.1assword=111111ersistSecurityInfo=True;UserID=sa;InitialCatalog=xhq;DataSource=192.168.191.142" '这句话是连接数据库的数据源,要做修改 Cmd.CommandType=1 sql="select*from表wherename=username" Cmd.CommandText=sql Setres=Cmd.Execute() Setres=nothing Setcmd.ActiveConnection=nothingSetCmd=nothing78\n11检查页面是否存在对象exist可以检查某一个页面是否存在。代码:ifBrowser("…").Page(“…").Existthen‘在运行结果中显示的报告,“micPass”的状态是通过,micFail是不通过 reporter.ReportEventmicPass,“页面存在“,”通过“ else reporter.ReportEventmicFail,"页面不存在“,"不通过"endif12防止程序中断的方法在回放脚本的时候,有时因为错误导致运行的脚本中断,不能自动运行。为了能达到真正无人职守的状态可以在脚本的最前面加上如下的代码: Onerrorresume78\nnext ‘遇到错误返回到脚本的下一行继续执行。Onerrorgoto0‘错误处理的控制权,平时是由QTP控制的(这个叫默认的),当有onerrorresumenext时,是交给onerror处理,当onerrorgoto0时,就换给QTP13同步点的设定等待某一对象出现后继续执行,为了防止qtp找不到对象而设定同步点。有2种方法:1种是用wait加等待的时间,如wait5(qtp等待5秒钟后继续执行)。另一种方法是等待要执行对象的出现,如果出现就继续执行,否则一直等待,代码如下:y=......waitproperty("visible",true,10000)Ify=truethen ‘执行下一条语句 else ’对象不出现就一直等待,直到过了10000秒后程序找不到对象报错Endif14截屏78\n在优化脚本时,如果想查看某一页面在执行后的页面效果,可以采取截屏的办法截取当前的操作页面并保存到本地。代码: desktop.capturebitmap“c:"***.bmp“,ture ’在脚本中想要查看的一行插入,运行后图片保存到设置的路径下15导入execl文件并参数化数据方法Qtp自带了datatable表,可以把要参数化的数据写在里面,但这样写脚本和数据不能分离,后期不好维护脚本。现在采用从外部导入execl文件的方法导入数据。代码如下: datatable.ImportSheet“D:"..."data.xls”,“sheet1”,“global“ ‘第一个参数是要导入文件的路径,第二个是execl的第一个表格,第三个参数是在execl的全局范围内查找78\n 另外datatable对象还有很多操作,比如:获取表中字段的行数,插入表数据,删除数据等,下面是获取表中数据的代码:datatable("A","dtglobalsheet)16为描述性编程自动创建注释 当希望在每一个新建action时都增加一些头部说明,比如作者、创建日期、说明等信息,那么用actiontemplate来实现最简单快捷。方法:用记事本等文本编辑器,输入如下类似的内容: 'Company:东方般若 'Date:Date 然后将文件保存为ActionTemplate.mst,并存放到QTP安装目录下的dat目录。17导入vbs文件想要实现脚本的函数化,并更好的维护它,可以把一些公用的函数写到vbs里面,用qtp来调用它。实现调用vbs的方法有2种:1.函数executefile加vbs文件的路径 executefile“c:"..."funcation.vbs”78\n2.设置QTPtest/settings/resources/+函数目录18时间差函数统计两个日期时间段之间的间隔,还有多少小时Dimtimedifftimediff=datediff(“H”,now,“2008-8-8”)Printtimediff 19获取web下拉框中数据的行数和数据值1.获取行数:首先将webtable添加到对象库中,查看对象库里有该webtable的属性后count=Browser("…").Page("age").Frame("…").WebTable("...").RowCount Msgboxcount‘查看行数2.获取数据值, fori=1to count value=Browser("…").Page("78\nage").Frame("…").WebTable("...").getcelldata(i,1) msgboxvalue next获取到列表中的数值后,qtp的对象库中没有这个WebElement的对象,一般采用描述性编程的方法获取对象,比如:用getcelldata获取的表中数据的innertext属性是“普通岗”,那么就可以用如下代码:fori=1to count value=Browser("…").Page("age").Frame("…").WebTable("...").getcelldata(i,1) Browser(“…”).Page(“Page”).Frame(“…”).WebElement(“innertext:=“&value,”index:=1”).clicknext20对象获得焦点78\n判断某个webedit输入框是否获取了焦点,如果没有获取就给它焦点,然后输入数值。代码如下:ifnotbrowser("**").page(“**").webedit(“**").object.isdisabled then .object.focus .object.set"输入数值“21获取对象当前属性值用GetROProperty可以获取对象的当前属性值,比如一些对象的属性经常发生变化,用getroproterty就能定位对象当前的属性状态来执行相应的操作。Dimpropro=browser("**").page(“**").webedit(“ **“).GetROProperty(“property”,value)Msgboxpro‘弹出窗口,查看获取的属性。22Systemutil对象的应用利用systemutil可以实现的功能:回放qtp脚本时禁止鼠标和键盘的输入;打开应用程序或web;通过句柄关闭进程;通过进程名关闭进程等。下面的代码是打开百度网页:78\n systemutil.run“iexplore.exe”,“http://www.baidu.com/”,“”,“”,“”,3 ‘打开百度的首页,最后面的参数“3”代表打开ie后最大化 SystemUtil.CloseProcessByName(“iexplore.exe”) ‘关闭ie 23Action的使用action分为内部调用和外部调用2种方法:内部调用使用split划分;外部调用时被调用的action设置成share,并共享对象库。 splitaction:RunAction"action",oneIteration24. 随机数在测试中有时会用到随即数,有多种方法:第一种:n=randomnumber.value(1,255) ’n的值从1到255之间随即产生第二种:randomize 78\n ‘更新反回的数据 dimn n=int(10*rnd()) msgboxn ‘n为10以内的整数25“is+*”类型功能 isarray'是否是数组isconnected'判断QTP是否连接到TDisdate'是否是合法的日期类型isempty'判断是否初始化isNull'判断是否为空值isNumeric'判断是否是数字型isobject'判断是否一个功能对象isready'判断设备是否准备就绪isRootFolder'是否是根目录26对象库打开对象库resources->objectrepository,或者用快捷方式:ctrl+r来打开。1.Qtp中的对象库和脚本是一一对应的,如果脚本中某个对象在对象库中不存在,则无法回放成功,会提示找不到对象。78\n2.对无法识别的对象用spy工具获得后添加到对象库中。3.有时候脚本回放失败就是找不到对象的原因,可以通过用spy工具查看找不到对象的属性,然后打开对象库,比较二者的属性信息,如果属性有不相同的说明就是属性的原因,可以通过更改属性的方式统一对象属性。27调试脚本1.脚本编写完毕,可以用按ctrl+f7来查看脚本是否有语法错误。2.Msgbox和print:在回放脚本时可以方便的查看自己想看到的信息。3.设置断点:为了测试某一小段脚本的功能,而当整个action很长的时候,可以设置断点单步debug。28强制退出遇到问题退出可以用exittest或exitfor,例如下面代码:Publicfunctiontext_exit()78\n fori=0to10 ifi=3then exittest ‘exitfor endif nextEndfunctionText_exit() 29连接数据库_增删改Dimconn,strSql '定义变量setconn=CreateObject("ADODB.Connection") '创建连接conn.ConnectionString="rovider=SQLOLEDB.1assword=isaac121379ersistSecurityInfo=True;UserID=sa;InitialCatalog=WisdomCRM;Datasource=192.168.12.29" '设置连接字符串conn.open '开启连接78\n'strSql="insertintoUM_User values(1,'UserID')" '设置插入语句strSql="drop tableTM_Task_14_Target"'strSql="select* fromUM_User"Ifconn.state=0Then '如果连接状态为0,表示连接失败,写入reporter对象中,否则表示连接成功 Reporter.ReportEventmicFail,"testing","数据库连接失败" conn.close Setconn=nothingelse Reporter.ReportEventmicPass,"testing","数据库连接成功" conn.executestrSql '执行更新语句 conn.close Setconn=nothingEndIf 78\n 1.WEB表格类型单元格,不能直接用set录入,需用以下函数Functionbeizhu()DimMyWebElementSetMyWebElement=Browser("费用申请单").Page("费用申请单").WebElement("备注").Object'MyWebElement.innerHTML=DataTable("备注",dtLocalSheet)MyWebElement.innerHTML="已经修改"EndFunction2.登录判断 Function login() DimvalueifBrowser("EAS系统登录").Page("账号重复登录").WebButton("忽略").Exist then Browser("EAS系统登录").Page("账号重复登录").WebButton("忽略").ClickEndIfEndFunction78\n3.快捷键盘的函数SetWsh=CreateObject("Wscript.Shell") Wsh.SendKeys"{DOWN}" setoShell=Nothing4.windows窗体TAB,简便切换Browser("EASPortal").Window("金蝶BI平台-主题配置--网页对话框").TypemicTab 5.启动IESystemUtil.RunDataTable("URL",dtLocalSheet)6.选中表格Browser("EASPortal").Page("EASPortal").Frame("content").WebElement("WebElement").Click innertext的值为表格内容7.自带了随机数参数,可用于赋值和检查8.环境变量进行赋值Environment("TCase")=testCaseName78