测试开发面试(七)——测试基础知识

为什么选择测试开发岗位?

岗位的理解:测开工程师不仅要懂测试,也要懂开发,这个岗位融合了开发角色的技术和测试人员的思维。是为了保障产品的质量和提高测试的效率
自身的角度来看,测试开发据我了解的是测试和开发的工作都在做,测试在项目中是比较关键的一环,负责项目的把关与检测责任比较大。
从岗位的发展前景来看,用户对产品质量的要求也越来越高,这个行业现在的信息技术会越来越强,需求和技术的要求也是不断提升的,我比较看好发展前景。另一方面,测开就是还有着开发的工作,无论是自动化脚本还是框架工具的开发,都有着很高的要求,需要的技术广度也是很高的,这个岗位会激发我持续学习的态度。

测试工作主要是做什么?

在我看来就是找“bug”,需要使用各种测试技术和工具来测试和发现软件中的缺陷,从而让开发者更好的优化产品。
具体包括:
(1)根据软件设计需求制定测试计划,测试数据和测试用例。
(2)搭建测试环境,执行测试用例。
(3)提交测试报告。
(4)跟踪bug修改情况,不断测试完善产品
(5)产品其他方面的测试

软件测试生命周期?

需求分析:测试人员了解需求、对需求进行分解、分析、得出测试需求
测试计划:根据需求编写测试计划、测试方案
测试设计、测试开发:测试人员搭建测试框架,根据需求和设计编写测试用例。
测试执行阶段:根据测试用例和计划执行测试,记录bug和提交bug
测试评估阶段:在执行过程中记录、管理缺陷、测试完成后编写测试报告,进行测试评估。

软件的生命周期?

软件生命周期(Software Life Cycle,SLC)是软件的产生直到报废或停止使用的生命周期。软件生命周期内有问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级到废弃等阶段,也有将以上阶段的活动组合在内的迭代阶段,即迭代作为生命周期的阶段。

cookie与session

1、cookie数据存放在客户端session数据放在服务器上
2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上当访问增多,会比较占用你服务器的性能,考虑性能应当使用cookie
4、不同浏览器对cookie的数据大小限制不同,个数限制也不相同。单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
5、可以考虑将登陆信息等重要信息存放为session不重要的信息可以放在cookie中。
两者的联系:
1、都是用来记录用户的信息,以便让服务器分辨不同的用户
2、可以搭配使用,但都有自己的使用局限,要考虑到安全和性能的问题。

app测试的性能指标有哪些?

响应、内存、cpu、fps,电量、流量
响应:响应时间和响应速度直接影响用户的体验,应用程序的响应时间包括安装、下载、卸载、启动和切换各个功能的耗时。
主要的测试点
冷启动,首次启动app的时间间隔;
热启动:非首次启动app的时间间隔;
完全启动:从启动到受野加载出来的时间间隔。
内存:每个app进程除了同其他进程共享内存之外,还有私有内存,因为移动资源内存非常有限,为每个app进程分配的私有内存也是有限的,如果内存消耗过大就会造成内存应用卡顿或者闪退,正常情况下应用不应该占用过多的内存资源,并且能够及时释放内存,以免发生内存泄漏。
主要测试点
空闲状态,切换至后台或者启动后不做任何操作,消耗内存最小。
中强度内存,时间偏长的应用。
高清度内存:持续操作应用
应用内存峰值
引用是否是常驻内存
压力测试后的内存使用
CPU
手机CPU,即中央处理器是手机最重要的硬件指标,它是整台手机的控制中枢系统。应用程序占用的CPU大小直接影响了系统性能。CPU测试,主要关注的是cpu的占用率。CPU使用率过高,导致手机发烫发热,手机响应变慢,用户体验就会很差。
主要测试点
1、在空闲时间(切换至后台)的消耗(cpu占用率0%)
2、在运行一些应用的情况下,观察应用程序占用cpu的情况(cpu占用率50%)
3、在高负荷的情况下看CPU的表现(cpu占用率80%以上)
具体场景:
1、应用空闲状态运行监测CPU占用率
空闲状态:应用按Home键退到后台,不再占用系统的状态(通常是灭屏半分钟后)
CPU占用率=0%
2、应用中等规格运行监测CPU占用率
中等规格:模拟用户最常见的使用场景
CPU占用率≤30%
3、应用满规格长时间正常运行监测CPU占用率
CPU占用率≤30%
4、应用正常运行期间监测CPU占用率峰值
应用正常运行:打开应用进行基本操作
CPU占用率≤50%
FPS (应用的使用流畅度)
FPS是图像领域中的定义,是指画面每秒传输帧数,通俗来讲就是指动画或视频的画面数。FPS是测量用于保存、显示动态视频的信息数量。每秒钟帧数愈多,所显示的动作就会愈流畅一般来说,Android设备的屏幕刷新率为60帧/s,要保持画面流畅不卡顿,要求每一帧的时间不超过1000/60=16.6ms,这就是16ms的黄金准则,如果中间的某些帧的渲染时间超过16ms,就会导致这段时间的画面发生了跳帧,因此原本流畅的画面变发生了卡顿。
GPU渲染
GPU渲染是指在一个像素点上绘制多次(超过一次):显示一个什么都没有做的activity界面算作画了1层,给activity加一个背景是第2层,在上面放了一个Text View(有背景的Text View)是第3层,Text View显示文本就是第4层仅仅只是为了显示一个文本,却在同一个像素点绘制了四次。过度绘制对动画性能的影响是极其严重,需要进行优化。
主要测试点
1、界面过度绘制
2、屏幕滑动帧速率
3、屏幕滑动平滑度
电量
测试耗电量前需要知道对手机本身的电量消耗,先看规定时间内手机正常待机下(重启后待机)电量消耗为多少,然后再启动待测试APP看看消耗的电量增加了多少取差值。
主要测试点
1、测试手机安装APK前后待机功耗无明显差异
2、常见使用场景中能够正常进入待机,待机电流在正常范围内
3、长时间连续使用应用无异常耗电现象
流量
手机流量指的是手机连接网络时,性能测试工具与服务器进行通信上传下载数据所产生的流量大小。由于运营商流量包是手机独有的上网方式,所以监控应用程序的流量耗费也是手机性能测试特殊的一个关注点。手机流量分为启动应用程序时所耗费的流量、应用程序后台运行时的流量和应用程序连续高负荷运行时使用的流量。
主要测试点
1、应用首次启动流量提示
2、应用后台连续运行2小时的流量值
3、应用高负荷运行的流量峰值:应用极限操作下
4、应用中等负荷运行时的流量均值:应用正常操作下

http与https的区别?

https协议需要用到ca申请证书,一般免费证书较少,因而需要用一定费用。
http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
http和https使用的是完全不同的连接方式,用的端口也不一样,http是80端口,https是443端口。
http的连接很简单,是无状态的;https协议是由ssl+http协议构建的可进行加密传输,身份认证的网络协议,比http协议安全。

http状态码:

100:继续,客户端继续请求
101:切换协议,只能切换到更高级的协议web
200:请求成功,一般用于get和post
201:已创建,请求成功并且已经创建了新资源
202:已接受,已经接受请求但是未处理完成
301:资源被永久转移到其他的URL
400:客户端请求的语法错误,服务器无法理解。
401:unauthorized,请求要求用户身份认证。
403:服务器理解客户端的请求,但是拒绝执行此请求
404:notfound,服务器无法根据客户端的请求找到资源。
414:请求的url过长,服务器无法处理
500:服务器内部错误,无法完成请求
502:badgateway,服务器收到了一个无效的请求
503:服务器维护
504:超时
505:不支持http协议版本

常见的测试种类有哪些?

功能测试:产品的各功能进行验证,根据功能测试用例,逐项测试,检查产品是否达到用户要求的功能
**黑盒测试:**测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。因此黑盒测试又叫功能测试或数据驱动测试。
黑盒测试方法包括:等价类划分、边界值分析、因果图分析、错误推测法、功能图分析等。
**白盒测试:**是对软件的过程性细节做细致的检查。是把测试对象看做一个打开的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序状态,确定实际状态是否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测试。
白盒测试方法包括:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖、路径覆盖等。
单元测试是对软件中的基本组成单位进行的测试,如一个模块、一个过程等等。它是软件动态测试的最基本的部分,也是最重要的部分之一,其目的是检验软件基本组成单位的正确性。一个软件单元的正确性是相对于该单元的规约(详细设计)而言的。因此,单元测试以被测试单位的规约为基准。
集成测试:是在软件系统集成过程中所进行的测试,其主要目的是检查软件单位之间的接口是否正确。它根据集成测试计划,一边将模块或其他软件单位组合成越来越大的系统,一边运行该系统,以分析所组成的系统是否正确,各组成部分是否合拍。集成测试的策略主要有自顶向下和自底向上两种。
**系统测试:**对已经集成好的软件系统进行彻底的测试,以验证软件系统的正确性和性能等满足其规约所指定的要求,检查软件的行为和输出是否正确并非一项简单的任务,它被称为测试的“先知者问题”。因此,系统测试应该按照测试计划进行,其输入、输出和其他动态运行行为应该与软件规约进行对比。软件系统测试方法很多,主要有功能测试、性能测试、随机测试等。
回归测试:是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误,回归测试的困难在于不好确定哪些内容应当被重新测试。
验收测试:由客户或最终用户执行,旨在向软件的购买者展示该软件系统满足其用户的需求。它的测试数据通常是系统测试的测试数据的子集。
**自动化测试:**利用软件测试工具自动实现全部或部分测试,它是软件测试的一个重要组成部分,能完成许多手工测试无法实现或难以实现的测试;正确、合理的实施自动测试,能够快速、全面的对软件进行测试,从而提高软件质量,节省经费,缩短软件发布周期。
性能测试:是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。压力测试是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大服务级别的测试。

osi七层参考模型:

应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
应用层、表示层、会话层——控制层面
传输层、网络层、数据链路层、物理层——数据层面

应用层

接收用户数据,人机交互的接口,面向的程序应用。

表示层:

将逻辑语言转化为机器语言、翻译、加密

会话层:

建立、管理、终止会话

传输层

1、区分流量,2、定义数据传输的方式(可靠传输tcp,不可靠传输udp)
传输层通过端口号区分流量,
常见端口号:
21 ftp文件传输服务
22 ssh远程登录服务
23 telent远程登录服务
25 smtp简单邮件传输服务
53 dns域名解析服务
80 http超文本传输协议
110:pop3 邮局协议版本使用的端口
443 https加密的超文本传输协议
520:rip,udp
端口号:数值范围1-65535
静态端口:范围1-1023 ,特点是:流量与端口号一一对应绑定
动态端口:范围1024-65535 特点:流量与端口号一一对应。
传输方式:tcp传输控制协议,是一种面向连接的可靠传输协议
udp用户数据报协议:是一种非面向连接的不可靠传输协议。
tcp传输可靠,如何保证可靠性?
确认机制(三次握手),重传输机制
三次握手(确保PC与server连接):
1.PC发送给server同步(syn)请求(req),请求server端口是开放状态,请求与服务器保持同步状态;——PC向server进行同步请求
2.server给PC回复ACK和同步(syn)请求(req),确认PC端口是开放状态;——server确认并向PC进行同步请求;
3.PC向server确认(ACK)

网络层:

进行逻辑地址寻址,实现不同网络之间的路径选择
常见的编码协议:IP(IPV4/IPV6)、IPX、apple talk、novell、NSAP
IPV4(32位二进制)编址方式:点分十进制法(0、1组成)
IPV6(128位二进制)编址方式:冒分十六进制法
完整IP地址:IP地址+子网掩码
IP地址:网络位+主机位
地址分类:
A类地址:第一位固定为0
0XXX XXXX—0-127(1-126),子网掩码默认为255.0.0.0
B类地址:第一位固定为10
10XX XXXX—128-191,子网掩码默认为255.255.0.0
C类地址:第一位固定为110
110X XXXX—192-223,子网掩码默认为255.255.255.0
D类地址:第一位固定为1110
1110 XXXX—224-239,子网掩码默认为255.255.255.255
E类地址:第一位固定为1111
1111 XXXX—240-255,科研地址
特殊地址:
1、0.X.X.X 无效地址(保留地址),0.0.0.0无效地址,用于占位
2、127.0.0.1 回路地址,用于本地测试
3、网络号,主机位全为0,用于描述一个网段
4、255.255.255.255为受限广播地址
5、主机位全为1,定向广播地址
6、本地链路地址:link-local (169.254.0.0 255.255.00)
什么是子网掩码?
用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码

数据链路层:

建立逻辑连接、进行硬件地址寻址、差错校验等功能。(由底层网络定义协议)

物理层:

传输介质(有线,无线)
有线:同轴电缆、双绞线、光纤
无线: 红外线、微波、蓝牙、无线电、wimax
建立、维护、断开物理连接

tcp三次握手

TCP在传输层和网络层数据传输的过程
TCP协议是在传输层端到端的传输信息,既然说到传输层协议,那么就讲一下传输层协议在数据传输过程中的位置:
网络层提供主机之间的逻辑通信机制
传输层提供应用之间的逻辑通信机制

三次握手是指tcp连接的建立,这个连接必须是一方主动打开,另一方被动打开。
客户端发起请求:

在这里插入图片描述
客户端的各个状态:
CLOSED状态:为关闭状态
SYN_SENT状态:为请求连接状态, 当你要访问其它的计算机的服务时首先要发个同步信号给该端口,此时状态为SYN_SENT,如果连接成功了就变为ESTABLISHED,此时SYN_SENT状态非常短暂。
ESTABLISHED状态:连接成功
服务端的各个状态:
LISTENING状态:监听状态, State显示是LISTENING时表示处于侦听状态,就是说该端口是开放的,等待连接,但还没有被连接。就像你房子的门已经敞开的,但还没有人进来。
SYN-RCVD状态收到和发送一个连接请求后等待对方对连接请求的确认。
ESTABLISHED状态:连接成功
SYN-RCVD状态:当服务器收到客户端发送的同步信号时,将标志位ACK和SYN置1发送给客户端,此时服务器端处于SYN_RCVD状态,
如果连接成功了就变为ESTABLISHED,正常情况下SYN_RCVD状态非常短暂。如果发现有很多SYN_RCVD状态,那你的机器有可能被SYN Flood的DoS(拒绝服务攻击)攻击了

三次握手的过程:

首先客户端先向服务器端发送一个TCP报文
标记位为SYN,表示“请求建立新连接”;序号为Seq=X(X一般为1)(传输信息的时候每个数据包的序号);随后客户端进入SYN-SENT阶段(请求连接的阶段),
服务器端收到来自客户端的TCP报文之后,结束LISTEN阶段。并返回一段报文
标志位为SYN和ACK,表示“确认客户端的报文Seq序号有效,服务器能正常接收客户端发送的数据,并同意创建新连接”(即告诉客户端,服务器收到了你的数据)
客户端接收到来自服务器确认收到数据的TCP报文后,明确了从客户端到服务器的数据传输是正常的,结束SYN-SENT阶段,并返回一段TCP报文
标志位为ACK,表示“确认收到服务器端同意连接的信号”(即告诉服务器,我知道你收到我发的数据了);
序号为Seq=x+1,表示收到服务器端的确认号Ack,并将其值作为自己的序号值;
确认号为Ack=y+1,表示收到服务器端序号Seq,并将其值加1作为自己的确认号Ack的值;
随后客户端进入ESTABLISHED阶段。(即成功建立了连接)

为什么要三次握手?

为了防止服务器端开启一些无用的连接增加服务器开销
防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。

TCP4次挥手

第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

http和https的区别?

1、https需要用到ca申请证书,免费证书比较少,需要一定的费用
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议
3、http与https使用的是完全不同的连接方式,用的端口不一样,http是80端口,https是443端口
4、http的连接很简单,是无状态的,https协议是由ssl+http协议创建的,可以进行加密传输,身份认证的网络协议,比http协议安全。

Ip包结构:

头长:4个bit
服务类型:8个比特
包裹总长:16个比特,数据包的总长度、单位是字节
生存时间:TTL(time to live),每经过一个路由器,该值就减一,到零丢弃。
32位源始地址,32位4字节,我们常看到的ip是将每个字节应用.分剋,如此而已
32位目的地址:32位同上

tcp数据包结构:

源始端口16位,范围当然是0-65535
目的端口:0-65535
数据序号32位:TCP为发送的每个字节都编一个号码,这里存储当前数据包数据第一个字节的序号
确认序号:32位,为了安全,TCP告诉接受者希望他下次接到数据包的第一个字节的序号
偏移4位,类似ip,表明数据距包头有多少个32位,保留六位,未使用,应置0

kill和kill -9的区别?

kill -9 表示强制杀死该进程
kill命令,系统会发送一个sigterm信号给对应的程序,sigterm多半是会被阻塞
kill -9命令,系统给对应程序发送的信号是sigkill,即exit。exit信号不会被系统阻塞,所以kill -9能顺利杀掉进程。

kill 程序时:

​1、程序立即停止
2、当程序释放相应资源后再停止
​3、程序可能仍然继续运行
大部分程序接收到sigterm信号后,会先释放掉自己的资源,然后再停止。但是也有程序在接收到信号量后,做一些其他的事情,并且这些事情时可以立马做出响应。如果程序正在等待IO,可能就不会立马做出响应。

post模拟http请求

get请求在url中直接展示参数名称和数值请求长度有限制
post请求:将数据放在body中进行传输,因此,url不会暴露请求的参数。post请求的数据可以非常大,可能会修改服务器中的资源。post请求需要辅助工具,postman

python数组相乘

用np.dot(A,B)

import numpy as np
A = np.array([6,7,8])
B = np.array([[1,2],[3,4],[5,6]])
print(np.dot(A,B))
import numpy as np
A = np.array([[1,2],[3,4],[5,6]])
B = np.array([7,8])
print(np.dot(A,B))

python矩阵相乘

def matrixmul(A,B):
	if len(a[0]) == len(B):
		res = [[0 for i in range(len(B[0]))] for i in range(len(A))]
		for i in range(len(A)):
			for j in range(len(B[0]):
				for k in range(len(B)):
					res[i][j] = res[i][j]+A[i][k]*B[k][j]
		return res
	return "输入矩阵有误"
if __name__=="__main__":
	A = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    B = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    print(matrixMul(A, B))

python 内存分配:

栈内存区:用于直接分配数据,存取速度快,数据存储不稳定,一般在程序中用于存储局部变量和函数的参数。
方法区:加载代码中的代码数据,二进制数据,方法函数数据等这些程序运行所需要的预加载数据
静态区:主要用于加载存储程序中的一些静态数据、常量数据。在python中不可变类型数据、数字、字符串等数据类型存储在静态常量话内存中。
堆内存存储数据稳定持久,一般用于存储加载较为重量级的数据,程序运行过程中的对象都是存在堆内存中

python中的self和__init__的含义?

python中函数的第一个参数self是实例对象本身,表示当前类的对象,可以调用当前类的属性和方法。
类是创建实例的模板,而实例则是一个一个具体的对象,各个实例拥有的数据都相互独立,互不影响;方法是与实例绑定的函数,和普通的函数不同,方法可以之间访问实例的数据。
其实self中存储的是实例变量和实例函数的属性,可以理解为一个字典。
init:
init负责的是对象的初始化,而__new__负责的是对象的创建
带有两个下划线开头的函数是声明该属性为私有的,不能在类的外部被使用或直接访问。
init方法支持带有参数的的类的初始化,也可以声明该类的属性。
self:
通过self定义完后,每个实例都有自己的属性(name,number),可以直接调用类中的函数

python中的类变量和实例变量

实例变量是用于每个实例的唯一数据,而类变量是用于类的所有实例共享的属性和方法。

拥塞控制

tcp拥塞控制算法主要由四种:慢开始、拥塞避免、快重传、快恢复。
1、慢开始和拥塞避免:基于窗口的拥塞控制,在发送方维护一个拥塞窗口,大小等于发送窗口,慢开始就是一开始发送一个字节,在收到接收方的确认后,然后发送的字节数增大了一倍,从小到大逐渐增大窗口,直到达到慢开始门限,开始使用拥塞避免算法,增长速率变为线性增长,也就是每经过一个往返时间就把窗口增大一
2、快重传和快恢复:通过上面的慢开始和拥塞避免之后,网络的传输速率一直是增长的,直到出现超时,需要把窗口调整到1个字节开始,使用慢开始,将门限调整为超时点的一半,继续执行下去的过程。

流量控制

为了控制双方发送数据的速率,接收方每次收到数据包后,可以在发送确认报文的时候,同时告诉发送端自己的接收窗口是多少空闲的,当发送端接收到之后就会调整自己的发送速率,按照窗口的大小进行发送数据,如果接收窗口为0时,就停止发送数据包,等待双方处理完数据之后,窗口>0,在通知双方就可以继续发送数据。

拥塞避免和流量控制的区别?

拥塞控制,是一个全局的过程,解决的是一段到一段之间的网络上发生阻塞导致的传输过慢或者丢包的情况,避免网络资源被耗尽的问题。
流量控制:解决的是发送方和接收方速率不匹配的问题,发送方发送过快会导致接收方来不及接收和处理,一般采用的是滑动窗口的机制来解决。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值