软件测试总结——常见的面试问题(二)

43.HTTP状态码列表

1** 信息,服务器收到请求,需要请求者继续执行操作
2** 成功,操作被成功接收并处理
3** 重定向,需要进一步的操作以完成请求
4** 客户端错误,请求包含语法错误或无法完成请求
5** 服务器错误,服务器在处理请求的过程中发生了错误
 
状态码 状态码英文名称 中文描述
100 Continue 继续。客户端应继续其请求
101 Switching Protocols 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议
 
200 OK 请求成功。一般用于GET与POST请求
201 Created 已创建。成功请求并创建了新的资源
202 Accepted 已接受。已经接受请求,但未处理完成
203 Non-Authoritative Information 非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本
204 No Content 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档
205 Reset Content 重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域
206 Partial Content 部分内容。服务器成功处理了部分GET请求
 
300 Multiple Choices 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择
301 Moved Permanently 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
302 Found 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
303 See Other 查看其它地址。与301类似。使用GET和POST请求查看
304 Not Modified 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
305 Use Proxy 使用代理。所请求的资源必须通过代理访问
306 Unused 已经被废弃的HTTP状态码
307 Temporary Redirect 临时重定向。与302类似。使用GET请求重定向
 
400 Bad Request 客户端请求的语法错误,服务器无法理解
401 Unauthorized 请求要求用户的身份认证
402 Payment Required 保留,将来使用
403 Forbidden 服务器理解请求客户端的请求,但是拒绝执行此请求
404 Not Found 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
405 Method Not Allowed 客户端请求中的方法被禁止
406 Not Acceptable 服务器无法根据客户端请求的内容特性完成请求
407 Proxy Authentication Required 请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权
408 Request Time-out 服务器等待客户端发送的请求时间过长,超时
409 Conflict 服务器完成客户端的 PUT 请求时可能返回此代码,服务器处理请求时发生了冲突
410 Gone 客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置
411 Length Required 服务器无法处理客户端发送的不带Content-Length的请求信息
412 Precondition Failed 客户端请求信息的先决条件错误
413 Request Entity Too Large 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息
414 Request-URI Too Large 请求的URI过长(URI通常为网址),服务器无法处理
415 Unsupported Media Type 服务器无法处理请求附带的媒体格式
416 Requested range not satisfiable 客户端请求的范围无效
417 Expectation Failed 服务器无法满足Expect的请求头信息
 
500 Internal Server Error 服务器内部错误,无法完成请求
501 Not Implemented 服务器不支持请求的功能,无法完成请求
502 Bad Gateway 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
503 Service Unavailable 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
504 Gateway Time-out 充当网关或代理的服务器,未及时从远端服务器获取请求
505 HTTP Version not supported 服务器不支持请求的HTTP协议的版本,无法完成处理

 

 

44.http和https的区别?

HTTPS和HTTP的区别主要如下:

1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。

HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。

 

 

http请求:

1、GET:向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中,例如在Web Application中,其中一个原因是GET可能会被网络蜘蛛等随意访问。Loadrunner中对应get请求函数:web_link和web_url

2、POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 Loadrunner中对应POST请求函数:web_submit_data,web_submit_form

3、PUT:向指定资源位置上传其最新内容

4、DELETE:请求服务器删除Request-URL所标识的资源

5、TRACE:回显服务器收到的请求,主要用于测试或诊断

6、CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

7、OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性

8、HEAD:向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。

 

45.GET和POST两种基本请求方法的区别?

  • GET在浏览器回退时是无害的,而POST会再次提交请求。

  • GET产生的URL地址可以被Bookmark,而POST不可以。

  • GET请求会被浏览器主动cache,而POST不会,除非手动设置。

  • GET请求只能进行url编码,而POST支持多种编码方式。

  • GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

  • GET请求在URL中传送的参数是有长度限制的,而POST么有。

  • 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。

  • GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

  • GET参数通过URL传递,POST放在Request body中。

 

46.UDP和TCP协议的区别

UDP:1、连接:发送数据不需要创建连接,分为发送端和接收端

         2、大小:发送数据以包为单位进行发送,每个包的大小限制在64k

        3、传输速度块,可能会造成数据丢失

        4、相比TCP协议来说传输速度更快

        5、应用:直播,视频通话

 

TCP:1、连接:数据传输可靠,传输之前需要连接

        2、大小:数据通过IO流的方式进行传输,可以传输无限大小的数据

        3、c/s:有服务端和客户端之分,也就是平时说的C/S(Client/Server)结构

        4、相比UPD传输速度慢
 

 

47.cookie和session区别?

cookie与session的区别有:cookie以文本格式存储在浏览器上,存储量有限;而会话存储在服务端,可以无限量存储多个变量并且比cookie更安全

cookie:位于用户的计算机上,用来维护用户计算机中的信息,直到用户删除。比如我们在网页上登录某个软件时输入用户名及密码时如果保存为cookie,则每次我们访问的时候就不需要登录网站了。我们可以在浏览器上保存任何文本,而且我们还可以随时随地的去阻止它或者删除。我们同样也可以禁用或者编辑cookie,但是有一点需要注意不要使用cookie来存储一些隐私数据,以防隐私泄露

session称为会话信息,位于web服务器上,主要负责访问者与网站之间的交互,当访问浏览器请求http地址时,将传递到web服务器上并与访问信息进行匹配, 当关闭网站时就表示会话已经结束,网站无法访问该信息了,所以它无法保存永久数据,我们无法访问以及禁用网站

 

 

 

                                  智力题:

 

 

给你两个不规则的水桶,一个装3升,一个装5升,水可以无限用,怎么给装4升?

参考答案:

1、3升水装满,倒入五升的桶.
2、再装一桶3升的水,倒入五升的桶,剩下1升
3、把五升的水倒掉,把1升的水倒入5升桶中
4、再装一桶3升的水装入原五升的桶中

 

已知一圈蚊香能烧1个小时,用2圈蚊香如何判断烧了15分钟?

参考答案:

第一圈蚊香两头同时点燃,第二圈蚊香也同时点燃一头

第一圈蚊香烧完后,马上点燃第二圈蚊香的另一头,同时计时。当第二圈蚊香烧完时,就是15分钟

 

 

两个沙漏一个4分钟漏完,一个7分钟漏完,怎样让其成为一个九分钟的沙漏。

参考答案:

先让四分钟和七分钟的沙漏同时开始漏沙,等到四分钟的漏完时,再把四分钟的倒过来重新漏,届时,七分钟的将先漏完,漏完即开始计时(这是九分钟的计时起点),这时距四分钟的再次漏完还有一分钟,等到四分钟的漏完了再倒过来两次刚好就是九分钟!

 

一只猴子边上有100根香蕉,它要走50米才能到家,每次最多搬50根香蕉,每走一米就要吃掉一根,请问它最多能把多少根香蕉搬回家?

参考答案:

倘若可以先吃再走,可以剩下18根,(方法)背第1桶50根的香蕉到离出发点16又1/3公尺处(A点),留下一根香蕉,回去搬第2桶50根的香蕉,在回到离出发点16又1/3公尺处(A点),这时总共走了16又1/3×3=49公尺,吃掉49根,此时吃下A点的那一根,背起第2桶50根的香蕉,可以多走1公尺,到离出发点17又1/3公尺处(B点),此时距离终点还有50-17又1/3=32又2/3公尺
32又2/3公尺只需32根, 剩下2/3公尺不足1公尺,可以不吃,故最后剩下50-32=18根。

 

 

                                扩展知识点:

 

工作版本:产品在测试阶段,用来区分每个测试版本的区别,设计的版本编号V1.0,方便控制开发流程。

驱动模块:成为"主程序",用来接收数据并传递到被测试模块

桩 模 块:集成测试前为测试模块准备的“假”模块,用来代替被测试模块的接口,数据的传递,供测试专用的测试模块叫桩模块

扇入:(fan-in) 该模块的上级模块的个数,扇入大表示模块的复用程序高,标准的逻辑门(TTL)有1-2个扇入信号。

扇出:(fan-out)  该模块的下级模块的个数,扇出大表示模块的复杂度高,需要控制的下级模块多,标准逻辑门有10个扇出信号

软件配置管理:贯穿于软件开发,测试活动始终覆盖了开发、测试的每个环节。用来全面管理保存配置项,监控配置状态,并及                            时向上级报告实现对软件过程的控制

软件开发文档:开发文档:功能需求文档、需求分析文档、技术分析文档、系统分析文档、数据库文档、功能函数、编译手册、                                              QA文档、项目总结

                         产品文档:产品简介、产品演示、功能介绍、技术白皮书、评测报告

                         用户文档:安装文档、使用手册、维护手册、用户报告

系统瓶颈:整个软硬件构成的软件系统在某方面能力不足,不能满足用户的特定业务

       目的:发现表面瓶颈,模拟用户操作,找出用户极限使用的瓶颈并解决

                  发现潜在瓶颈,考虑用户在未来扩展系统或业务改变,系统能够适应,保证系统长期稳定

测试文档包含哪些: 1.测试计划、 2.测试用例 、3.测试报告、 4.需求分析报告 、5.测试评估报告

没有测试文档下进行黑盒测试:可以用探索测试,根据测试人员的工作经验,深入了解测试对象,把软件当做说明书,测试过程                                                    中多与开发交流

uat测试:用户验收测试(终端用户集成测试)用户可接受测试,根据测试计划和结果对系统进行测试和接受,让系统用户决定是否接受系统,它是一项确定产品是否满足合同或用户所规定需求的测试。

编写测试报告:1.建议上线(是)、2.上线内容(新增,优化)、3.bug统计与分析(列表,分析)、4.存在风险以及遗留问题

测试目的:在已定的规则条件下,对软件进行测试,通过测试发现测试对象存在的错误,可以来衡量软件质量,是否达到标准

在团队中开展测试原因:保证发布时产品的可用性、2.发现问题并及时的做出修改,使产品变得更完美。

 

 

                   性能测试工具使用案例

 

 

.jmeter压力测试并发数

新建线程组(添加线程数,准备时长,请求次数),编写或录制脚本, 使用CSV Data Set Config 来参数化,在线程组里添加 HTTP Request(请求),添加Summary Report 用来查看测试结果,执行查看输出结果。

什么是压力测试 

顾名思义:压力测试,就是  被测试的系统,在一定的访问压力下,看程序运行是否稳定/服务器运行是否稳定(资源占用情况)

比如: 2000个用户同时到一个购物网站购物,这些用户打开页面的速度是否会变慢,或者网站是否会奔溃

 

做压力测试的常用工具

做压力测试,一般要使用工具, 人工是没办法做的。   最常用的工具是LoadRunner, 但是LoadRunner毕竟是收费软件,而且使用上也比较复杂。 现在越来越多的人开始使用Jmeter来做压力测试。 免费, 而且使用上非常简单。

 

做压力测试的步骤如下:

1. 写脚本 或者录制脚本

2. 使用用户自定义参数

3. 使用控制器,来控制 模拟多少用户。

4. 使用监听器, 查看测试结果

 

本文做压力测试的例子

本文举的实例是: 在一台电脑用Jmeter模拟200个用户,同时去使用bing搜索不同的关键字, 查看页面返回的时间是否在正常范围内。

第一步: 使用CSV Data Set Config 来参数化

首先我们把测试需要用到的2个参数放在txt文件中,

新建一个data.txt文件,输入些数据, 一行有两个数据,用逗号分隔。

 

启动Jmeter, 先添加一个Thread Group, 然后添加一个CSV Data Set Config (Add -> Config Element -> CSV Data Set Config)

 

第二步:添加HTTP Request.

我们添加http 请求,发送get 到 http://cn.bing.com/search?q=博客园+小坦克

选择Thread Group 右键 (Add ->Sampler -> HTTP Request),  需要填的数据如下:

 

第三步: 使用Thread Group, 控制模拟多少用户

选中Thread Group

Number of Threads(users):     一个用户占一个线程,  200个线程就是模拟200个用户

Ramp-Up Period(in seconds):   设置线程需要多长时间全部启动。如果线程数为200 ,准备时长为10 ,那么需要1秒钟启动20个线程。也就是每秒钟启动20个线程。

Loop Count: 每个线程发送请求的次数。如果线程数为200 ,循环次数为10 ,那么每个线程发送10次请求。总请求数为200*10=2000 。如果勾选了“永远”,那么所有线程会一直发送请求,直到选择停止运行脚本。

 

第四步:  添加Summary Report 用来查看测试结果

选中Thread Group 右键(Add -> Listener -> Summary Report)

 

第五步: 运行一下

到目前为止, 脚本就全写好了, 我们来运行下, 如何看下测试的结果

 

 

.jmeter分布式测试?

 

为了让jmeter工具提供更强大的负载能力,jmeter提供了多台机器同时产生负载的机制。

一、申请5台Linux服务器,配置好点。

二、分布式测试原理:其中一台作为主控机/调度机(server),其他为压力机(agent)

三、处理过程:

1)调度机server启动以后,会拷贝本地的jmx文件分发到远程的agent机器上;

2)agent机器拿到脚本以后启动命令行模式去执行脚本,对于每台agent机器拿到的脚本都是一样的,所以如果jmx脚本为50个线程跑3分钟,那么实际并发就是50*5=250个线程并发跑3分钟;

3)执行时,agent会把执行获得的数据结果传给server机器,server机器会收集所有agent机器的信息并汇总,这样server机器上就存在一份所有agent机器汇总的数据结果。

四、Jmeter分布式压测环境搭建

1、分布式环境压力服务器要求:

  需要server(控制机)和agent(压力机),agent搭建在linux服务器环境下,server搭建在Linux或windows环境下。

  压力测试瓶颈大都在带宽上面,需要保证压力机的带宽要比服务器的带宽高,不然压力上不去。

  需要保证agent和server都在一个网络中,且在多网卡环境需要保证启动的网卡都在一个网段。

  需要保证server和agent之间的时间同步。

  关闭防火墙

2、Windows部署jmeter

  (1)部署jdk环境,配置path变量

  (2)直接去官网下载最新的二进制源码包即可。

  (3)解压jmeter到指定目录,设置path变量,安装完成之后,在命令行运行jmeter命令,如果可以正常启动jmeter,说明环境配置ok。

3、Linux部署jmeter

  (1)jmeter运行环境依赖java的jdk,所以需要安装jdk,jmeter5.0版本以上需要安装jdk1.8及以上版本;首先下载:jdk-8u131-linux-x64.tar.gz、apache-jmeter-5.0.zip,并上传至服务器,并解压:

tar zxvf jdk-8u131-linux-x64.tar.gz    --mv jdk-8u131-linux-x64 jdk1.8

unzip -o apache-jmeter-5.0.zip --mv apache-jmeter-5.0 jmeter

  (2)配置环境变量:vi /etc/profile

在文件的最后面加上需要配置的环境变量,红色路径可以根据自身环境进行修改:

JAVA_HOME=/root/gss/jdk1.8

JRE_HOME=$JAVA_HOME/jre

JMETER_HOME=/root/gss/jmeter

CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib

export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$JMETER_HOME/bin/

export JMETER_HOME=/root/gss/jmeter

export CLASSPATH=$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$CLASSPATH

export PATH=$JMETER_HOME/bin:$PATH

  (3)立即生效配置文件,执行命令:source /etc/profile

    检查安装结果:java -version、jmeter --version

  (4)修改主控机启动配置使其可以调度所有压力机:

vi /root/gss/jmeter/bin/jmeter.properties

remote_hosts=127.0.0.1:1099,192.xx.xx.15:1099,192.xx.xx.16:1099,192.xx.xx.17:1099,192.xx.xx.18:1099(多台slave之前用 "," 隔开)

#server.rmi.ssl.disable=false # 此为必改项,放开注释,false改为true

说明:

1、主控机可以只是server,也可既是server也是agent:如果自身做压力机,将127.0.0.1也配置上;否则,不需要配置。

2、各个压力机的端口号可修改,也可不修改:若修改,就按新修改的端口号进行配置;没修改,jmeter默认端口号1099,直接配置也可以。 

#server_port=1099 #端口号修改:放开注释,随意修改

  (5)修改所有服务器的jmeter配置:

五、上传脚本到主控机上,执行脚本

jmeter -n -t login.jmx -r -l login.jtl -e -o /root/gss/report-login

jmeter参数介绍:

-n 非 GUI 模式 -> 在非 GUI 模式下运行 JMeter

-t 测试文件 -> 要运行的 JMeter 测试脚本文件

-r 远程执行 -> 启动远程服务

-l 日志文件 -> 记录结果的文件

-e 测试文件 ->指脚本运行完后生成报告

-o 测试文件 -> 指定报告存放的目录

-h 帮助 -> 打印出有用的信息并退出

 

 

 

 

 

你可能感兴趣的:(基础知识)