测试理论基础题目
你是如何做测试分析的?
确认需求,先定性后定量
定性:那些事显性需求,那些事隐形需求,功能在范围内? 性能、可靠性、安全性、兼容性这些需要测吗?
定量:功能要测,有哪些功能,每个功能点上什么?入口是什么,出口是什么, 数据那里构造?
上线标准是什么?
1.所有功能点(需求)都被用例覆盖到了
2.所有用例执行过至少一遍
3.所有发现的bug被修复并验证,做过regression了。
4.不能修复的记录了/关闭了/known issue了。
5.bug曲线区域平稳了
如果项目周期很短,测试人力匮乏,你是怎么协调的?
范围不变,赶工/增加人手,快速跟进/并行开始任务。
范围能变,砍低优先级用例,缩小测试范围。
为什么要做接口测试?
1、越底层发现bug,修复成本越低;
2、前端随便变,接口测好了,后端不需要变;
3、检查系统的安全性、稳定性,前端传参不可信;
4、接口测试较容易实现自动化持续集成,相比UI自动化稳定,可以减少人工回归成本与时间,缩短测试周期;
5、现在很多系统都是前后端分离的,从安全层面说:
(1)、只依赖前端进行限制已经完全不能满足系统的安全要求(绕过前面实在太容易), 需要后端同样进行控制,在这种情况下就需要从接口层面进行验证。
(2)、前后端传输、日志打印等信息是否加密传输也是需要验证的,特别是涉及到用户的隐私信息,如身份证,银行卡等。
你们公司是如何做接口测试的?
1.接口规范拿到。
2.设计接口测试功能用例(主要从用户角度出发看接口能否实现业务需求,用例设计就是黑盒用例那一套)。
3.各种入参验证(正常情况,异常情况包括输入参数个数不对,类型不对,可选/必选, 还有考虑参数有互斥或关联的情况)。
4.接口返回值各种验证(符合接口文档需求)
5.了解接口实现逻辑,实现逻辑覆盖(语句/条件/分支/判定/。。。。。)
6.接口能并发执行吗?
6.采用工具或者自写代码来验证,HTTP接口一般SoapUI, Jmeter, Fiddler, Postman等都能验证,自己写更好。web service接口一般要写代码来调用。根据测试用例自动化。
7.发现问题跟功能测试一样,该报bug报bug,该跟踪状态跟踪状态
接口测试质量评估标准是什么?
接口功能覆盖是否完整、参数验证正确性、接口异常场景覆盖、接口覆盖率、性能指标、安全指标;
请问你们公司是如何做性能测试的?请讲诉性能测试的相关指标?
先确定需求,再定性,定量。
1.拿到测试需求,确定测试软硬件环境/测试指标, 使用测试工具 jmeter编写测试代码,逐步加压,直到测试目的达成。
2.分析测试结果,编写测试报告,突出性能指标包括成功,失败情况,并加以分析。
3.调优(一般都是开发的事)
【常见性能指标】
【吞吐量】1s内能处理的请求个数 tps 事务/秒
【峰值吞吐量】一段时间内吞吐量的最大值,是用来评估系统容量的重要指标之一
【响应时间】一次事务的处理时间。通常指从一个请求发出,到服务器进行处理后返回,再到接受完毕应答数据的时间间隔 ms
【90%响应时间】一段时间内90%的事务响应要比此值小,反映总体响应速度,和高于该值的10%超时率; 是用来评估系统容量的重要指标之一
【CPU占用率】 cpu被使用情况,反映了资源利用情况;
【并发数】系统同时处理的request/事务数
最大并发数如何确定:
a1面积越大,说明系统的性能能力越强
a2面积越大,说明系统稳定性越好
a3面积越大,说明系统的容错能力越好
压力测试和负载测试的区别
一个(压力测试)把最后一根稻草仍你身上,一个(负载测试)就剩最后一根稻草没仍,或者仍给你指定数目稻草。
服务器中一般要监控哪些数据,如何监控的,怎么从监控数据中发现问题?
CPU, 内存, 网络, I/O, 数据库。等等。 一般用工具监控,另外Windows上有性能监视器。
发现问题,一般要关注阈值,比如CPU利用率超过85%,说明server压力太大了,数据量一大DB某条SQL写入速度变慢了等等等等
假设系统A调用系统B,我把B的接口都mock了,进行性能测试,这样有什么好处和坏处?
好处是防止系统B出错引起测试错误;不会因系统B的开发进度影响测试;mock后可以快速返回结果,提高测试效率;
坏处是真实性能要比测出来的性能差, 性能指标不准确。 因为Mock的服务再真也不能代替真实服务;
服务器挂了,怎么排查?
一定记得先确认需求,再定性,定量;
服务器是哪个服务器?后端应用服务器?数据服务器?缓存系统服务器?中间件服务器?文件系统服务器?
然后面试官说个,不说就自己假定一个, 然后第一次挂第二次挂分开说,先问有没有错误码,日志有吗,有就看日志,没有就猜 是应用服务器挂了啊,是不是高峰期顶不住这么大并发访问啊?是数据库服务器啊,是不是频繁读写受不了啊,读写有分开吗?同步还是异步; 服务器内存不够,遭到恶意攻击
如何看待自动化和手动测试?怎样的一个比例才是健康的?
一切稳定了的功能最好全部自动化掉。
你们公司的自动化投入产出比怎样?效益怎样?
UI自动化测试发现新bug的效益很低,主要用在回归测试上,减少测试工作量。接口测试可就不一样了,可以小步快跑,也可以集团作战。
自动化测试用例的覆盖率多少?
50%, 一般核心业务里的最高优先级用例100%覆盖,这些用例也可以跑冒烟测试;
完整运行一次自动化用例需要多久时间?
1条测试用例1s左右;
测试脚本的维护成本是怎么样的?
不坏就不要修改;
什么是分层自动化?
金字塔结构, 最底层UnitTest,往上接口API/集成起来的service, 最上面UI自动化
如果有一个登录接口需要服务端返回参数,再带着这个参数去请求才能完成登录,用jmeter 怎么做?
可以利用Regular Expression Extractor传参
冒泡排序
def dubble_sort(li):
for i in range(len(li)-1):
for j in range(len(li)-i-1):
if li[j]>li[j+1]:
li[j],li[j+1]=li[j+1],li[j]
return li
1~9999数列中数字3出现的次数。用递推方法解出。
def count_digit(number):
return len(str(number))
def countThree(digit):
if not isinstance(digit,int):
raise TypeError('number is not int')
# digit = len(str(number))
if(digit <=0):
return 0
if(digit ==1):
return 1
return 10*countThree(digit-1) + 10 **(digit-1)
print(countThree(count_digit(9999)))
从一个数组中找出前4个最大的数,用最优解。
li=sorted([5,6,78,9,34,56,90,0,4])[-4:]
print(li)
def quickSort(li):
if len(li)<2:
return li
else:
basevalue=li[0]
less=[m for m in li[1:] if m <=basevalue]
equal=[n for n in li if n == basevalue]
greater=[i for i in li[1:] if i > basevalue]
return quickSort(less)+equal+quickSort(greater)
li=[3,40,26,589,256,365,2,2,96]
print(quickSort(li)[-4:])
写一段程序,删除字符串a中包含的字符串b,举例 输入a = “asdw”,b = “sd” 返回 字符串 “aw”,并且测试这个程序。
def remove_str(str1,sub_str):
if not isinstance(str1,str):
raise TypeError('str is not str')
if not isinstance(sub_str,str):
raise TypeError('sub_str is not str')
if len(str1)<len(sub_str):
raise Exception('sub_str must large to str length')
start_index=str1.find(sub_str)
if start_index==-1:
raise Exception('sub_str is not sub_str')
else:
len_substr=len(sub_str)
res=str1[:start_index]+str1[start_index+len_substr:]
return res
print(remove_str('asdw',11))
写一个方法,把字符串转成数字,并测试这个程序;
from functools import reduce
def fn(x,y): ##定义reduce函数处理逻辑把数字列表进过处理生成整数
return x*10+y
#定义map函数逻辑把数字字符串生成列表如'12345'进过处理生成[1,2,3,4,5]
def char2num(s):
digits={'0':0,'1':1,'2':2,'3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
return digits[s]
#从内往外执行首先把12345进过map处理生成列表[1,2,3,4,5]然后在进过reduce处理生成整数12345打印出来
#处理过程是((((1*10+2)*10)+3)*10+4)*10+5
res=reduce(fn,map(char2num,'123456789'))
print(res)
SQL:
说下左连接和右连接
左连接会读取左边数据表的全部数据,B表如果没有内容匹配用NULL代替。。(如果两个表中数据有相同部分,只显示一个)
右连接会读取右边数据表的全部数据,即使左边数据表没有对应数据。(如果两个表中数据有相同部分,只显示一个)
介绍下什么是索引
索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址,在数据十分庞大的时候,索引可以大大加快查询的速度,这是因为使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行数据对应的物理地址然后访问相应的数据。
ALTER TABLE my_table ADD [UNIQUE] INDEX index_name(column_name);
使用sql生产10万条数据
平常没接触过这么大数据量,分批次吧,每次插入1w条,应该没什么压力
1:使用excel新增少量数据1w-----》2、navicat for mysql 导入excel表中数据
------》3、使用insert into 表(字段) select 字段 from 表----》修改表数据保持差异性
Linux
你常用的命令是什么?
ls, mkdir, cat, vi, ps touch
用什么查看log?
watch, tail、cat、tac、head、echo
如何查找一个文件大小超过5M的文件
find -type -f -size +5M
如何查看进程
ps 显示当前运行中进程相关信息,包括进程的PID
top:状态自动刷新
https://www.jianshu.com/p/f3bfe04549c5