软件测试面试题总结
软件测试的目的是什么?
软件测试的目的师检验它是否满足规定的需求,或符合预期结果。
什么是回归测试?一般在项目的什么阶段执行?
回归测试:指错误被修正后或软件功能、环境发生变化后进行额度重新测试,确认修改部分不会对其他功能造成影响,一般在系统测试后期,新功能测试完成并且大部分bug都修复完成时,开始做回归测试,回归测试一般经历很多轮。
什么是冒烟测试,一般在项目额度什么阶段执行?
冒烟测试:是每一个新编译的需要正式测试的版本,目的是确认软件基本功能正常,可以进行后续的正式测试工作,一般在项目正式测试之前做,保证基本核心业务正常,为了提高测试效率,缩短测试周期。
给你一张A4纸你如何测试?
因为没有具体的需求,根据我的了解,从下面几个方面来分析, 功能:能否在纸上写字,写好的字能否正常显示; 界面:纸的颜色是否白的,干净、大小是否符合A4纸的标准, 兼容性:各种笔写字是否支持,是否方便合订 安全性:资质是否含有害物质,颜色是否护眼 易用性:是否方便携带,写字是否流畅 性能:尖锐的笔划过是否会破?挤压。撕扯是否能承受。
当你开了一个bug,当时开发不认为是bug,如何处理?
我会先先从需求和用户角度触发,找到论据去尝试说服开发,如果仍然没有办法达成一致,就去找产品经理确认,如果产品确认了不是bug,在bug里面加备注,关闭bug,如果产品说要修复,就把bug重新激活指派给开发。
你们公司的项目多长时间一个迭代?每个周期内,测试占了多久时间?
我们公司用的敏捷开发模型,一个项目迭代周期大概为一个月,开发编写代码的时间为2周多,测试时间大概为一周半左右。
简单描述一下你们项目流程和你在项目中的职责?
在产品确认了项目需求之后,我们依据需求设计并编写测试用例,然后开发提测试后,我们执行接口测试,然后执行系统测试;测试过程中遇到bug,会记录到bug管理工具里面进行管理和跟踪;然后开发修复了bug,我们会进行bug的验证,以及进行相关的回归测试,2-3轮系统测试之后,评估一下产品质量出一个测试报告,没有问题产品就可以发布上线了。
Git工具使用场景和使用流程?
Git主要用于项目或文档的版本控制;使用流程:本地克隆远程git仓库,可以新建、修改项目文档或者代码,提交到本地库中;然后推送到远端服务器,统- -管理。
web项目 中如何实现浏览器的兼容性测试?
首先根据特定用户的要求,如果有指定要支持的浏览器,优先测试;其次,如果没有用户指定的浏览器,根据用户使用量+内核来看,选取每类内核中的主流浏览器来覆盖测试。
测试计划主要包括哪些内容,有什么作用?
测试计划包括测试范围、测试进度2安排、测试人员、测试环境,测试方法+测试工具,风险评估等内容;能够作为后续测试过程中人员分配、责任划分、执行测试、推动项目的重要依据。
测试报告在哪个阶段做的?主要作用是什么?
测试报告在系统测试完成之后,以及项目发布之前做的;主要作用是评估当前产品的质量,通过统计目前剩余的bug数量和严重级别,统计bug分布分析项目中的问题,以及完成的测试用例数量占总测试用例数量的比率,得出结论:目前产品是否达到了,上线的质量标准,是否可以进入下一个阶段(验收测试或者发布上线)。
请分别阐述一下黑盒测试、白盒测试、单元测试、集成测试、系统测试、验收测试的基本概念和内容
黑盒测试:就是把所有的功能和逻辑接口都放在一个盒子里面,你是看不到里面的逻辑与走向的,你只能通过盒子的外表进行测试。黑盒测试是指在测试过程中只关注输入和输出 白盒测试:基于软件内部设计和程序实现的测试方法(代码层面)。不仅仅关注输入与输出的结果是否正确,同时还关注程序是如何处理的 单元测试:对单个模块的测试,有具体到类、函数的测试,一般都开发来做的。 集成测试:是单元测试之后的一个测试阶段,是各个单元模块整合后对模块接口进行测试,数据传递是否实现 系统测试:是集成测试之后的测试阶段,是把集成后的模块,结合软件硬件环境,进行功能性和非功能的测试。主要采用黑盒测试方法 验收测试:是系统测试之后的测试阶段,用户在拿到软。件的时候,在使用现场,会根据前边所提到的需求,以及规格说明书来做相应测试,以确定软件达到符合效果的
给你一个物品(例如:一支笔),你会从哪些方面去分析测试点(包括功能和非功能)?
功能:能不能写字,是否泄露,笔帽是否正常按下,弹起。 界面:查看笔的外观是否美观,logo是否正确, 易用性:使用是否方便,是否方便携带 安全性:材料是否有毒,笔尖是否会伤人 兼容性:笔是否可以装不同的笔芯, 性能:一直笔使用的长度,笔从不同的高度摔下损坏程度,用力去折笔看笔可以承受的力度。
根据测试流程,总结一下项目执行过程中会经历哪些阶段和步骤?
1、阅读需求,理解需求,参与需求评审会议,主要就是对业务的学习,分析需求点。 2、 参考软件需求规格说明书、项目总体计划,编写测试计划,内容包括测试范围(来自需求文档)、进度的安排,人力物力的分配,整体测试策略的制定,和风险的评估与规避措施有一个制定 3、 参考需求文档(原型图)、概要设计、详细设计等文档,编写测试用例,如果有不明确的也会及时和开发、产品经理沟通,用例编写完成后会进行评审 4、 首先搭建测试环境,执行预测(冒烟),以判定当前版本可测与否,如果预测通过,正式进入系统测试,遇到问题提交Bug到缺陷管理平台,并对bug进行跟踪,直到被测软件达到测试需求要求,没有重大bug,测试结束 5、编写测试报告,对整个测试的过程和版本质量做一个详细的评估。确认是否可以上线
你工作用过自动化测试么? - -般是在项目的哪个阶段做自动化测试?
1 :我工作中做过自动化;我们的自动化实现的覆盖率还没有那么全,所以只在冒烟测试阶段用自动化脚本来跑冒烟测试用例; 2 :我工作中做过自动化;我们的自动化主要是在回归测试阶段,因为回归测试工作特别繁琐而且重复,用自动化实现会节约很多时间和人力。
你们做的是什么自动化?接口, UI,还是APP ?为什么?
我们公司实现的是接口自动化,因为UI和AP自动化设计到界面,可变性太大了自动化的维护成本太高了 ;接口相对来说稳定很多 ,所以实现自动化的性价比相对来说最高。
Python的常用数据类型有哪些?
Python常用数据类型有:整型,浮点型,字符串,布尔型,列表,元组,字典,集合。
Python的- -个字符串str1= “python is the best!”,要取出来" Python “这个字符可以怎么实现?把"best" 字符取出来又怎么取? 用字符串的切片实现,取"Python" : str1[0:6:1] 取"best" : str1[-5:-1]
你能说说Python的列表、 字典和元组的区别么?
1 )列表和元组的元素都是有序的,所以可以通过索引来取值; 2 )但是元组的元素不可以被改变,而列表是可以进行元素的增删改查的; 3)字典在Python3.6之前都是无序的。所以不能通过索引来取值,可以通过key来取value值; 4 )字典的key不能重复和修改, value可以修改,而且键值对可以增加删除。
能解释一下函数的*args和**kwargs两种参数的区别?
这两个都是函数的不定长参数:函数调用的时候,可传可不传,也可以传一个或者多个; *args:这种不定长参数,是当函数的必备参数和默认参数接受完后,剩下的参数都会被它接受,并且以元组的格式保存;传参方式是通过位置传参。 **kwargs :这种不定长参数也是当函数的必备参数和默认参数接受完后,剩下的参数都会被它接受,但是这是以字典格式保存;而且这种需要用关键字传参方式来传参。
说说你对函数的返回值的理解
函数结束后,可以设置一个返回的数据,给调用这个函数的代码使用,这个返回的数据叫做“返回值”。Python里用 return这个关键字来定义。 1 ) return后面的表达式可以有一个。或者多个用逗号隔开;返回的是元相格式: 2)不需要返回值的时候,就返回None ;函数默认返回值就是None ; 3 ) return语句标志着函数的结束, returm语句后面的语句不再执行。
你们的Python接口自动化测试用的什么库?你能简单描述一下这个库是如何发送接口请求的么?
我们用的是Python的第三方库requests库;我们的接口协议都是http协议,用的基本都是get和post请求; request库有很多自带的方法,比如get方法和post方法,我们从开发那边了解到这个接口的地址,以及需要传的参数,用对应的方法发送到服务器接口;然后得到相应消息之后,可以直接通过相应消息对应的方法,获取到对应的内容,比如页面内容,响应码和头部、cookies等等 ;得到这些信息,再去跟预期结果做对比就好了。
你们做自动化测试的时候用什么操作的测试用例?能说说具体操作步骤么?
因为我们的测试用例都放在了Exce|表格中,所以我们用的是openpyxl库来操作Excel表格; openpyxI有自带的方法可以分别去获取Excel表格对象、表单( sheet)、表格( cell )以及表格里的内容;把读取到内容保存到列表和字典中,方便后续使用。 Python的Requests库,如果要发送带cookies的请求你们是怎么处理的? Python的requests库自带一 个session模块 ,用这个模块的session(方法去发送接口请求,可以自动携带cookies ,不用手动传输;当然,手动传输也可以,先获取到cookies值,在接口请求的时候再带上对应的cookies值也是OK的。
你们公司用到了jenkins工具么?能说说你们的使用场景么?
我们公司使用Jenkins工具主要用来做持续集成;开发会用这个Jenkins工具打包部署环境,测试主要用来持续集成自动化测试;把我们的自动化脚本放到git或者svn服务器上,然后Jenkins.上做- -些配置,定期的自动去构建并执行脚本,并自动化发送执行结果。
系统的配置文件存在哪里?系统默认安装路径在哪里?如果是超级管理员,它的家目录在哪里?
系统的配置文件存在/etc路径下 系统默认安装路径在/usr路径下 如果是超级管理员,它的家目录在/root
绝对路径和相对路径概念以及区别是什么?
绝对路径:是从根目录开始寻找 相对路径:是从当前目录开始寻找 区别:在路径地址前是不是以/开头
在vi编辑器里面.保存退出和不保存退出的命令是什么?
保存退出: :wq 不保存退出: :q!
查看日志的命令是?
tail-f
简述一下ps -ef | grep tomcat的作用
ps -ef是查找所有进程的命令。该命令的作用是去判断tomcat进程是否有启动,同时也可以判断如果tomcat进程启动了,那么进程号是多少
简述- -下netstat -apn I grep 8080的作用
netstat -apn是查找所有端口的命令。该命令的作用是去判断8080这个端口是否已经被占用了,如果有进程在占用这个端口,那么可以判断是哪个进程在使用这个端口 简述一下kill-9 的作用 强制杀死某个进程
提示错误permission denied或者是Operation not permitted该怎么解决?
a、切换有权限的账号重新登录操作 b、对被操作的文件进行赋权
解压和压缩tar.gz格式的命令是?
a.解压: tar -xzvf b.压缩: tar –czvf
运行tomcat之前为什么要安装jdk ?
答案:因为tomcat的运行是要依赖java开发环境的,所以需要安装jdk来构建java开发环境
tomcat的配置文件路径在哪里?
在tomcat目录下的/etc
tomcat的端口号怎么修改?
答案:去Tomcat路径下的conf文件夹下面,修改server.xm|文件里的,httpconnector port既可
怎么让远程用户也能连接上数据库呢?
答案:需要在服务器上进入数据库,然后执行grant语句,对需要远程连接的主机进行赋权即可
你们公司部署项目的流程是怎么样的?
a.先保证服务器上的环境已经搭建完成 b.把开发提供的war包放到webapps下,如果有配置文件变化的话,也会去修改conf里的文件信息,同时如果开发人员提供了项目数据库脚本,我们也要去执行这个脚本的
怎么清除服务器的缓存?
把tomcat下的work文件夹清空即可
写出10个常用的linux命令,并选择一个举例具体说明其操作方法。
vi:编辑命令,vi /home/test 后面跟上路径+文件名 touch mkdir mv cp fid grep tail head ps-ef:查看进程:ps -ef | grep tomcat 是查看tomcat这个进程,看tomcat是否启动
将文件file1 名字改为filenew1
mv filel1 filenew1
表Loingshine中的字段 sname数据存在相同的多条记录,请用一个SQL把所有sName重复的记录查询出来,并显示重复记录的数量,表结构: Create table Loingshine (id number, Sname varchar(100), Scode varchar(100));
select ,count() ‘重复记录数量’ from Loingshine group by sname having count(*)>1;
请写出内连接,左链接,右链接的关键字,并分别简述其作用。
LEFT JOIN:左连接,会读取左表全部数据,即便右表没有对应数据。左连接从左表产生一套完整的记录,和右表匹配的记录 .如果右边没有匹配记录,右侧结果集字段将为null RIGHT JOIN:右连接,以右表为基础,与LEFT JOIN相反 INNER JOIN :内连接,或等值连接,可以获取两个表中字段匹配关系的记录。
sql能做什么?
a.创建数据库、表等数据库对象 b.数据库记录的增、删、改、查
建库建表的语法是什么?
建库: create database数据库名; 建表: create table表名(字段名类型);
赋值时,时间日期类型、字符串类型与整型、浮点型有什么区别?
时间日期类型、字符串类型在赋值时,要带上引号,而整型浮点型不需要 插入部分字段数据时,应该要注意什么? 要注意插入字段的个数与values()里面赋值时的字段个数一致
在查询语法中。select后面如果是*表示什么意思
*表示通配,表示要查询出所有的字段
为什么表与表之间需要存在关耿关系呢?
首先,如果把数据全部都放在一个表里,那么查询起来的字段会特别多,数据量也特别的大,就会造成维护困难,甚至会出现垃圾数据;所以,为什么会把不同的数据放到不同的表里面.可以说是分类管理;当数据之间有关系的时候,我们就可以在设计表的时候,在表之间建立关联关系即可,
什么是等值连接?
答案:又称为内连接↓它们是用来获取两个表中字段匹配关系的记录的
什么情况下会使用到左连接?
答案:当进行多表连接查询时,想要哪张表的数据全部显示,就把对应那张表放在左边
group by的作用是什么?
group by的作用是按照某-一个,或者多个字段来分组,也可以理解为把同类型的都放在一-起。
被分组的字段应该要注意什么?
被分组后的字段一-定要是被查询的字段。
查询有顺序吗?如果有的话,那不按顺序来查询会有什么问题呢?
查询是有结构顺序的,如果不是按照顺序进行查询,那么查询出来的数据有可能会有错误。比如wherea = 1 group by b;和group by b having a = 1; 前面的是先进行条件过滤,把过滤后的数据再进行分组,而后面的是先分组再过滤条件
小程序怎么做兼容性测试的?
1 )适配不同系统平台, Android和IOS的主流手机平台,如华为,小米, iPhonell , iPhoneXR等,覆盖到最新的试用版和当前流行的主要版本;以及系统版本( Android5.x, iOS13.x ) 2)适配不同的微信版本,确认支持的最老的微信版本是多少,是否支持;以及是否支持最新的微信版本;中间版本可以挑选一些用户使用量较大的测试; 3)考虑不能手机屏幕的大小,比如iOS 7Plus . iphonex , Android5.5屏幕等;
H5和Native APP的区别?
H5 :1)开发快。实现的功能也很炫; 2)只编写一次。可以在多个设备上到处运行: 3)具有局限性。如会话管理、安全离线存储、访问原生设备功能(摄像头.日历和地理位置) -依赖网络 Native App :1)原生应用程序看起来(界面)和运行起来(性能)是最佳的:能更好的适应各种类型的功能实现–缓存 2)开发和测试周期比较长。原生的开发太耗时耗力; 3)必须登录到商店、下载新版本,才能获得最新惨正版;
APP测试什么时候需要收集日志?怎么收集日志的?
一般当APP异常的时候,比如发生崩溃或者ANR的时候,会收集一下系统日志,帮助开发定位bug ; Android手机会借助一些工具比如adb ,连接手机以及找到对应的日志路径,把日志拉取( adb pull )出来,然后通过关键字查找到有效的日志信息,贴到bug里即可; IOS手机也同样会借助-些工具,比如苹果电脑会用xcode ,没有苹果电脑会用ITunes或者ITools这种的工具,或者到对应日志。
APP和web端兼容性分别是怎么做的?
web兼容性测试主要考虑不同浏览器的兼容; app需要考虑手机不同操作系统、不同机型、不同屏幕等;主要考虑主流手机的适配
说一下你对云测平台的了解?
我所知的云测平台,有testin云测、百度MTC、腾讯优测、阿里MQC。 相对来说,对testin云测平台了解多一些,有用该平台来尝过免费兼容性测试,如上传一个app安装包,免费选择50款手机机型,30分钟后会出来一个测试结果。主要包括在不同手机上的安装、打开、monkey随机操作、关闭、卸载这种一个过程,监测时间、CPU、内存、电量耗用这些。
简述下app测试中如何通过日志定位异常问题?
安卓app可通过adb logcat获取日志,例如像crash问题可通过出现异常的时间+exception关键字+包名、或者force finish关键字,定位报错日志; 如果是anr问题,可通过获取手机上的trace文件,或者DropBox中异常日志文件; 如果是苹果app,可通过苹果电脑自带的xcode获取、无苹果电脑的话,可借助第三方工具例如itools工具来获取定位
某app出现一个BUG:用户输入自己的账号密码点击登录后,登录了别人的账号,看到了别人的账号信息,该登录有2次请求,第一次请求是鉴权及加密,返回加密字符串给第二个请求,由第二个请求携带加密字符串进行鉴权登录,该问题是偶尔出现的问题,请猜测是何种原因引起的并简要回答怎么设计用例去覆盖该类问题?
可能是加密字符串返回错误导致的。 如果要去重现这个问题,我们可以同时发起AB两个不同用户的登录第一次请求,然后把A返回来的加密字符串复制下来,等到B用户发起第二次请求的时候,我们把加密字符串替换成A的,看是否有问题。
app出现ANR,是什么原因导致的?
1.主线程执行了耗时操作,比如数据库操作或网络编程 2.其他进程(就是其他程序)占用CPU导致本进程得不到CPU时间片,比如其他进程的频繁读写操作可能会导致这个问题。
App出现crash原因有哪些?
1.内存管理错误?:可能是可用内存过低,app所需的内存超过设备的限制,app跑不起来导致App crash。 或是内存泄露,程序运行的时间越长,所占用的内存越大,最终用尽全部内存,导致整个系统崩溃。 亦或非授权的内存位置的使用也可能会导致App crash。 2.程序逻辑错误:?数组越界、堆栈溢出、并发操作、逻辑错误。 e.g. app新添加一个未经测试的新功能,调用了一个已释放的指针,运行的时候就会crash。 3.?设备兼容:由于设备多样性,app在不同的设备上可能会有不同的表现。 ?4.网络因素:可能是网速欠佳,无法达到app所需的快速响应时间,导致app crash。或者是不同网络的切换也可能会影响app的稳定性。
你对接口测试是怎么理解的?
答案:我理解的接口是功能数据传递的通道,是实现某个功能的一个函数。接口参数就是函数的参数,接口的响应数据就是函数的返回值。接口有分内部接口,即同一个系统项目包含的接口;还有外部接口,跨系统跨平台的接口,涉及第三方,例如支付接口。接口测试就是绕过前端直接对接口调用,查看接口功能实现是否正常。
HTTP协议常见的返回状态码有哪些?
答案: 200 (正常) :表示一切正常,到了服务器,并且服务器正常的响应了你的请求。404 (找不到)服务器上不存在客户机所请求的资源。500 (内部服务器错误) :服务器端的CGI、ASP. JSP等程序发生错误。504: 超时。
你们什么时候做接口测试?接口测试用例怎么设计的?
一般是后端接口开发出来,我们就可以开始接口测试了。首先必要的了解接口需求,弄懂功能及业务实现逻辑。1)先保证这个接口功能是好的,也就是输入正常的参数输入,是否可以返回正确的结果; 2)然后考虑接口异常验证:包括必填项验证、长度、类型异常等;比如说手机号11位,输入非11位,10位、12位的来验证; 3)还有需要考虑接口的业务逻辑。比如说必须执行了回款计划,才能修改标的状态到还款中4) -一些必要的接口安全验证要考虑到,例如注册接口中传入的密码是需要加密的;还有就是权限这块; 5) 如果有接口性能测试要求,还需考虑性能测试部分的用例设计。
除了jmeter ,你还了解哪些其他做接口测试的工具?
答案: postman, soapui, loadrunner ;目前主流一点做接口测试工具的是jmeter. postman ; soapui测试soap协议会比较好用; loadrunner做性能测试比较多
如何使用jmeter做接口测试?用到哪些测试元件?
比如测试注册接口,先在测试计划下面添加线程组.添加http请求.进行相对应的接口请求地址、请求方式,传入参数的设置;添加请求头。设置数据传递格式json然后添加查看结果树.用来查看接口测试过程中,请求及响应信息;点击运行,关注查看结果树中的响应结果中的status. code. ms9信息是否跟预期- -致,同步关注数据库变化.像注册会在数据库项目表中插入一条用户信息,要确保插入表的各个字段数据的正确性;碰到报错的时候,需要通过日志排查问题。
比如说有两个请求,上-一个请求的结果作为下一一个请求的参数传入,怎么来实现呢?
用关联, jmeter中可以用正则表达式提取器或者json提取器来实现。例如登录、加标两个请求,若加标需运行成功,必须从登录的响应结果中获取到token再传递到加标的请求头,因为返回结果数据格式是json的,所以可用json提取器,输入json表达式提取到token值,再做变量引用。
如何保证接口测试是通过的?
如果返回结果是正常的:查看数据库以及日志是否有问题,无问题,则测试通过;有问题例如数据库数据增删改有问题就提交bug到bug管理系统; 2 )如果返回结果是异常的:a.先确认地址、参数名、参数传值等是否正确.有问题对应修改: b.如果这些请求设置,传值都没问题,查看数据库以及日志是否有问题,有问题,则提交bug到bug管理系统,井且附上有问题的数据以及日志。
你认为接口测试的重点是什么?
我认为首先得确保自己接口请求地址、参数传参正确性,然后测试过程中需要关注服务器返回例status. code. msg信息,数据库表信息更改,日志信息;特别是报错的时候,需要通过日志帮助排查问题
web测试和APP测试的区别?
WEB测试和App测试从流程 上来说,都需要经历测试计划方案,用例设计,测试执行,缺陷管理, 测试报告等相关活动,从技术上来说,都需要进行功能测试。性能测试,安全性测试、U测试等测试,基本没有什么区别;他们的主要区别在于具体测试的细节和方法有区别: 兼容性测试:在WEB端是兼容浏览器,在App端兼容的是手机设备。而且相对应的兼容性测试工具也不相同,WEB因为是测试兼客浏览器,所以需要使用不同的刘览器进行兼容性测试;如果是手机端,那么就需要兼容不同品牌,不同分辨率,不同android版本甚至不同操作系统的兼容。 性能测试:在WEB测试重点考虑响应时间。在App测试中还需要考虑流量测试和耗电量测试。 安装卸载: WEB测试基本上没有客户端层面的安装测试,但是App测试是存在客户端层面的安装卸载测试的测试点 中断测试,就是在操作某个软件的时候,来电话,来短信,电量不足提示等外部事件。 操作类型测试:如横屏测试,手势测试 网络测试:包含弱网和网络切换测试。需要测试弱网所造成的用户体验。重点要考虑回退和刷新是否会造成二次提交。弱网络的模拟,据说可以用360wifi或者fiddler工具实现。 升级测试: WEB测试只要更新了服务器端,客户端就会同步会更新; APP需要升级对应的客户端,并且需要检查升级的提醒机制,升级取消是否会影响原有功能的使用,升级后用户数据是否被清除了。
你理解的接口测试是什么?接口测试的原理?
接口测试理解:我所知道的接口测试包括内部接口测试和外部接口测试;内部接口主要的是功能与功能模块之间接口,前端与后端间的接口。 我主要做的是前端与后端接口测试,这种接口是后端开发与前端/移动端页面进行数据交互的。在还没有前端界面的时候,进行接口测试,会提前发现一些bug。 接口测试的原理:模拟客户端向服务器发送请求报文,服务器接收请求报文后对相应的报文做处理并向客户端返回应答,客户端接收应答的一个过程。
你认为接口测试的重点是什么?
我认为首先得确保自己接口请求地址、参数传参正确性,然后测试过程中需要关注服务器返回例status、code、msg信息,数据库表信息更改,日志信息;特别是报错的时候,需要通过日志帮助排查问题
如何使用jmeter做接口测试?
比如测试加标接口,先在测试计划下面添加线程组,添加http请求,页面进行相对应的接口请求地址、请求方式、传入参数的设置;然后添加查看结果树;点击运行,关注查看结果树中的响应结果中的status、code、msg信息是否跟预期一致,同步关注数据库变化,像这里会在数据库项目表中插入一条标信息,要确保插入表的各个字段数据的正确性;碰到报错的时候,需要通过日志排查问题。大致就是这样 如果需要在jmeter中引入已经打包好的jar包中的功能,请说明一下操作步骤: 1、把jar包放到jmeter目录\apache-jmeter-x.x\lib\ext下 2、在Test Plan的右侧面板最下方直接添加需要引用的jar包
常见的HTTP服务器返回状态码有哪些,其含义是什么?
200(正常):表示一切正常,到了服务器,并且服务器正常的响应了你的请求。 302(临时重定向):指出被请求的文档已被临时移动到别处,此文档的新的URL在Location响应头中给出。 304(未修改):表示客户机缓存的版本是最新的,客户机应该继续使用它,比如说前端js 403(禁止):服务器理解客户端请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置所致。 404(找不到)服务器上不存在客户机所请求的资源。 500(内部服务器错误):服务器端的CGI、ASP、JSP等程序发生错误。 504: 超时。
项目为什么要做接口测试?其意义在哪里?
1、项目开发后端先于前端开发,测试在后端开发完提前介入项目,尽早发现问题; 2、测试可以覆盖一些绕过前端直接后端请求的场景,可以保证接口的安全性。
以前公司的测试工作是怎么开展的?各个阶段有哪些产出物?
首先会召开需求分析会议,参加人员有产品、开发和测试,主要是探讨需求主要的一些功能点,完了之后,开发就排期进行开发,我们测试会按照测试计划进行任务分配。先会参考需求规格说明书及原型图编写测试用例,写完之后会进行用例评审,有评审修改的就修改整理形成最终的用例版本,之后开发人员版本编译完成后,我们会先进行预测,主要对主功能业务进行测试,如果主业务流程不通过,直接返回给开发进行修改。预测通过,依据测试用例进行系统测试,测试过程中,提交bug,跟踪bug,进行回归测试直至不存在严重bug,满足用户需求,测试完后编写测试报告,发布上线后,关注web是否正常运行。产出物包括:测试计划、测试用例、bug、测试报告
讲一个熟悉/最近的项目,做了哪些工作?主要负责的什么模块?
项目迭代了多少次?每次迭代周期多久?上家公司多少测试人员?多少开发?公司规模?公司地址?公司主要项目的网址?
给你一个购物车模块,你会如何设计测试用例?
1.界面测试: 界面布局、排版是否合理;文字是否显示清晰;不同卖家的商品是否区分明显。 2.功能测试: 未登录时: 将商品加入购物车,页面跳转到登录页面,登录成功后购物车数量增加;点击购物车菜单,页面跳转到登录页面。 登录后: 所有链接是否跳转正确;商品是否可以成功加入购物车;.购物车商品总数是否有限制;.商品总数是否正确;全选功能是否好用;.删除功能是否好用;填写委托单功能是否好用;委托单中填写的价格是否正确显示;价格总计是否正确;商品文字太长时是否显示完整;店铺名字太长时是否显示完整;创新券商品是否打标;购物车中下架的商品是否有特殊标识;新加入购物车商品排序(添加购物车中存在店铺的商品和购物车中不存在店铺的商品);是否支持TAB、ENTER等快捷键;商品删除后商品总数是否减少;购物车结算功能是否好用。 3.兼容性测试不同浏览器测试。 4.易用性测试“删除功能是否有提示;是否有回到顶部的功能;商品过多时结算按钮是否可以浮动显示。 5.性能测试:压力测试;并发测试。
说一下你的项目的这个支付怎么测试的?
支付金额:最小0.01 无实际意义的金额输入:0 格式 负数 最大限额的(假设2000为上线,测试2000 2000.01) 余额小于支付 当日消费/单次消费上限 支付方式,微信,支付宝,银行卡等 支付的操作:密码错误(上限次数) 指纹支付 面容支付 免密码 支付过程中的中断测试 注册的时候,同步绑定托管银行的一个虚拟账户,进行支付的时候,先要绑定支付银行卡; 首先测试正常充值支付的情况:支付金额不能超过银行限额,比如支付100,提交支付的时候,会向银行去发起一个支付订单,银行支付成功会返回状态成功, 并且托管银行账户会显示充值后的金额,本地数据库的个人信息表的余额会显示充值后的金额,也就是能看到平台界面的金额会显示充值成功100;另外支付银行卡会扣除100; 其次要考虑其他异常支付情况:比如支付金额超出银行卡限额;超出银行卡余额;支付0元;支付金额输入负数;还有测试弱网场景下多次支付提交是否只被执行一次; 如果面试官有问到关于跟托管银行对接这块具体怎么测试的,就说当时主要是开发负责对接的,对接好了我们再去测试的;另外面试官有问到你们测试过程中,支付银行卡这块,比如银行卡上限5w,你测试4w9,是直接用真的银行卡测试的,这里就要说测试环境上,支付银行卡这里具体支付多少,开发改了代码,无论支付多少,实际扣费0.01元
需求文档不完善或者不准确,怎么处理?项目很紧急,也会写测试用例么?
在分析需求文档编写用例的时候,尽量把需求模糊的地方记录下来,同时可以产考市面同类型产品,给予自己的建议;把这些整理成问题集,统一跟产品确认;项目很紧急,我们自己会把要测试的验证点写出来;测试完成后,有时间再去整理完善用例。
有没有什么测出的特别好的,对开发帮助特别大的bug?或者是印象深刻的bug?
提交了一个bug,开发认为不是bug,作为测试怎么办?
首先确认开发环境是否跟自己测试环境一致(有时候开发是在他们已更新代码的环境上验证bug的,所以bug就没出现,但在测试环境上面会出现;还要确认缓存有无清除),确认在测试环境能重现,如果确认是缺陷跟开发保持有效的沟通,如果是级别较低的建议性bug,可以先记录到bug平台,先保留沟通;如果是bug级别较高的问题,对应需求文档的预期结果跟开发说明,更有说服力;耐心讲解bug的危害,不行就找产品确认,确认是bug注明情况并再次指派给开发
你是如何部署测试环境的?能说说具体步骤吗?测试环境如何更新? 会用到哪些命令?查看日志的命令是什么?你们用的tomcat、jdk等这些版本号是多少?你们公司有几台服务器?
1:a) 项目用的数据库mysql,然后部署到tomcat,首先确保服务器上tomcat、jdk、mysql已安装好 b) 新建一个库,运行开发提供的sql脚本,创建好对应项目的数据库表信息 c) 把开发提供的项目部署包放到tomcat的webapps里面,配置文件放到tomcat的conf里面,并修改好配置文件的IP地址和数据库连接信息 d)启动tomcat,并在浏览器输入项目访问地址,是否能打开项目界面,确认项目环境是否搭建成功 2:开发修改代码后,会提交新的项目包,会替换tomcat的webapps原有的代码包,然后清除work下的缓存,重启tomcat;另外有涉及数据库升级脚本,同步执行升级脚本;大概就是这样。 3:cd ps -ef|grep tomcat kill ls vi ll ./startup.sh;查看日志tail -f 日志文件名 4:版本号自己好好去看下当时环境的版本号 注意,涉及到具体数据,灵活变通。 5:三台服务器;开发环境,测试环境,生产环境各一台,当然最少说3台,多的可以说有10来台都是可以的
你们接口项目有多少个接口? 说一下你们是怎么做接口测试的?
2、 先对开发提供的接口文档做好需求分析,进行用例编写及评审,然后就是选择jmeter做接口预测,确保接口功能能正常调用,然后才进行详细的测试。
具体测试是用jmeter来完成的,比如测试加标接口,先在测试计划下面添加线程组,添加http请求,页面进行相对应的接口请求地址、请求方式、传入参数的设置;然后添加查看结果树;点击运行,关注查看结果树中的响应结果中的status、code、msg信息是否跟预期一致,同步关注数据库变化,像这里会在数据库项目表中插入一条标信息,要确保插入表的各个字段数据的正确性;碰到报错的时候,需要通过日志排查下问题。大致就是这样
请列出接口测试用例的设计思路或方法?接口测试用例是怎么写的?
首先必要的了解接口需求,查看概要设计文档,弄懂业务逻辑和功能模块 1)先保证这个接口功能是好的,也就是输入正常的参数输入,是否可以返回正确的结果 2)然后考虑接口异常验证:包括必填项验证、长度、类型异常等;比如说手机号11位,输入非11位,10位、12位的来验证 3)还有需要考虑接口的业务逻辑。比如说必须执行了回款计划,才能修改标的状态到还款中 4)一些必要的接口安全验证要考虑到,例如注册接口中传入的密码是需要加密的;还有就是权限这块,必须是已登录已实名的账户才能投资,这跟业务逻辑是一样的 5)编写用例的时候注意用例内容包括用例id、接口名称、请求方式、接口地址、用例标题、输入参数、预期结果(包括返回结果、数据库表字段变化)
接口测试你是怎么定位bug的?请详细说明一个bug的发现过程
1)如果返回结果是正常的:查看数据库以及日志是否有问题,无问题,则测试通过;有问题例如数据库数据增删改有问题就提交bug到bug管理系统; 2)如果返回结果是异常的: a、先确认地址、参数名、参数传值等是否正确,有问题对应修改; b、如果这些请求设置,传值都没问题,查看数据库以及日志是否有问题,有问题,则提交bug到bug管理系统,并且附上有问题的数据以及日志。 Bug提交自行举例。
有没有写过测试计划?里面包括哪些内容?
一般是我老大写的;测试计划包括的内容:测试目的、测试范围、测试时间安排、人员任务分配、测试策略及方法、测试环境内容、风险评估;(参考“5W+1H”去记忆)
你觉得一个测试工程师应该具备哪些素质和技能?
计算机知识,包括操作系统,数据库,通讯协议原理,熟悉至少一门编程语言;软件测试知识,包括测试理论,测试方法,测试用例编写,缺陷跟踪流程,软件质量评估等;产品业务分析能力,熟悉所测产品的一些隐藏需求或功能。 素质就是测试相关例如:耐心细心 。 责任心,对自己测试的项目有一定的责任心。良好的沟通能力,在出现问题的时候,才能跟开发进行良好的沟通。让整个项目进展更加顺利。 团结及合作能力。 学习能力。分析及解决问题能力
用fiddler做什么?说下具体过程?
1)抓包,分析定位系统问题。 2)利用fiddler可以将测试环境资源重定向到本地,快速验证一些bug。 3)利用fiddler可以完成做一些简单的接口测试。 4)利用fiddler的断点可以完成一些特殊场景下的测试,比如安全测试。 web抓包,先进行fiddler的代理设置,默认端口号是8888,然后浏览器也要确认是否开启了网络代理; 代理设置确认后,浏览器输入要访问的网站,然后fiddler就可以抓取到对应的网站信息了,这里如果不想抓取所有网络资源,可以fiddler的过滤器设置一下只抓取自己网站的
给你一个项目,你会怎么测试?
按工作流程来回答:1)需求分析2)制定计划3)编写测试用例以及相关文档4)执行测试/回归测试/提交bug5)出具测试报告/上线后进行维护性测试 按测试方法来说:黑盒测试/功能测试:我们重点体现在:测试用例的设计,采用常用的设计方法:等价类划分、边界值、错误推测法、场景法
如何测试一个纸杯?(类似于铅笔、椅子、电梯、雨伞等!)
容量:倒入白水,得出最大盛水量外观, 兼容性:分别倒入不同的液体,是否可以装不同的液体,分别在不同环境下使用(大风、大雨、大雪等)是否可以正常使用。 外观:观察杯子是否符合大众审美需求,图案是否正确,拿在手上是否掉色。 安全性:是否对人体有害, 性能:是否可以承受不同温度,内壁防水膜是否会脱落,倒入不同的液体静放一段时间,观察杯子几天之后会漏。 压力:用手按压杯子,是否容易变形 易用性,观察杯子形状,是否容易倒入液体,是否方便喝水。
一天能写多少条用例?能执行多少条用例?发现多少bug?如何保证测试用例的覆盖率?
一天写多少用例或者是执行多少用例发现多少bug是根据项目的需求是否明确,项目功能模块是否复杂、程序员的代码质量以及当天的时间安排来确定的。
如果问:bug这么少?—直接回答,可能是我们程序员的需求分析做的好,功能代码写的好。 保证用例覆盖率的话,首先自己在编写测试用例的时候,尽量覆盖所有的功能+功能业务,采用合理的用例设计方法去包含所有的正面、反面的测试点,然后我们会开展测试用例评审会议,开发测试产品一起讨论,进一步保证用例已全部覆盖所有的需求功能;测试执行过程中,发现的未被覆盖完整的用例,测试完整后,会进行用例完善。尽量确保下一次用例的覆盖完整。
测试数据你们是怎么做的?怎么在用例里面体现出来?
我理解的测试数据包括测试输入的数据,还有作为待测对象的数据例如报表记录这种数据。 测试输入的数据是自己准备的,有难度的才叫开发帮忙,比如设计到数据库加密处理这种数据。举个例子说明:最近测试的一个投资功能,我们需要提前准备好用户数据,用户的登录信息,用户的账户余额准备,以及到后台加好要投资的标。这些都是我们自己通过后台以及结合数据库做的测试数据。
对于复现率不高的bug怎么处理?
先在出现问题的环境上尽量重现,保持浏览器环境、出现问题的特定账号等的一致,多次尝试仍然不能重现,也要记录到bug平台,将出现问题的特征步骤尽量描述清楚,附带问题截图及日志截图,注明偶现; 如果项目时间允许,bug等级高,需要开发协助重现;如果时间不允许,记录到bug平台后续再跟进。多次测试版本验证,如果这个bug仍然复现不了,可能会视严重程度关闭。
请写出内连接,左链接,右链接的关键字,并分别简述其作用。
left join:左连接,会读取左表全部数据,即便右表没有对应数据。左连接从左表产生一套完整的记录,和右表匹配的记录 .如果右边没有匹配记录,右侧结果集字段将为null right join:右连接,以右表为基础,与LEFT JOIN相反 inner jon:内连接,或等值连接,可以获取两个表中字段匹配关系的记录。
你们什么时候做接口测试啊?为什么要做接口测试?
一般是前端还没有开发出来,但后端已经开发差不多的时候做。 开发代码初期,UI和web页面设计还没有到位,提前介入测试更早发现问题,否则底层的一个bug可能会引起外面的8个bug;处于接口安全层面考虑,前端进行限制容易绕过,需要同样测试后端的限制;另外测试接口验证数据的加密传输,例如用户密码
Post 和get 的区别是什么?
1、GET提交的数据会放在URL之后,以 ?分割URL和传输数据,参数之间用 & 相连;POST方法是把提交的数据放在HTTP包的Body中 2、GET提交的数据大小有限制(注意:HTTP协议规范没有对URL长度进行限制,这个限制是特定的浏览器及服务器对它的限制);POST方法提交的数据没有限制 。 3、对参数的数据类型,GET只接受ASCII字符;而POST没有限制 4、GET请求参数会被完整保留在浏览器历史记录里;而POST中的参数不会被保留 5、GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息
测试报告包括哪些内容?测试报告交付文档有哪些?你认为测试报告的侧重点是什么?
测试报告中主要包括本次测试记录,像测试范围、测试开始结束时间、测试人员、用例覆盖、执行通过率;还有bug统计及分析,总体bug汇总、bug不同维度的统计分析等;最后还有测试结论 交付物主要是测试用例、提交的bug、测试报告; 侧重点我认为是bug的结果分析以及测试结论。
测试过程中用过哪些测试工具?怎么使用的?
自己会用的工具:Jmeter、soapui、fiddler等。jmeter简单压力测试、接口测试;soapui接口测试;fiddler抓包工具; 举例子简述如何操作:用的比较多的是Jmeter,我们一般用来测试接口。比如说以前测试过投资接口,首先创建一个线程组,添加一个http类型的请求,把url以及参数都填写到http请求界面,然后再添加一个查看结果树,方便我们自己查看http请求以及返回结果。根据接口测试用例来一一测试接口,并把发现的bug提交到禅道上面。
在平时测试工作中你是如何保障测试的质量的 ?
——从需求阶段开始,会先理清楚产品的大致功能及功能模块的联系,进而再去熟悉需求细节,把需求不明确的部分会及时跟产品进行沟通; ——需求确定后,时间紧张的话,我会按功能模块去整理测试点,整理过程中也会参考同行业的产品去进去测试点设计;整理完成后,我们测试内部会进行测试点的评审,进而保证对于需求覆盖的完整性; ——测试执行过程中,注意bug格式规范,提交详细有用的bug信息,便于开发解决问题;且会做好bug跟踪。碰到测试点覆盖不到但出现bug的地方,都会做好文档总结; ——每天会发送日报汇报进度安排,便于项目管理跟踪——项目结束后会进行项目总结,便于下次项目测试。
有做过安全测试吗?
没有做过规范化的安全测试,拿我们项目来说,安全测试主要是对用户登录的校验、密码加密;充值、提现必须是绑定手机号的短信验证码校验;所有投资操作必须是实名认证为前提的,做压力测试的时候如果同一个ip地址的请求过多,网站会判断为恶意攻击,打入黑名单。
为什么要转行到测试行业呢?
我大学的专业是软件工程专业,是计算机方面的,然后毕业以后想做一个自己喜欢的并且跟专业契合的工作。我有计算机的基础,同时有开发能力,所有在这个方向,我相信自己可以坐的很好。测试主要是发现问题,我又善于去找问题。开发转测试的优势:容易上手,然后可以看懂底层的代码,发现问题以后更容易定位到问题 开发转测试: 1.对软件测试的未来看好—这样既说明你很了解行业发展,也很有规划和选择; 2. 开发的要求是深度,测试的要求是广度,所以测试可以让自己知识涉猎更加广泛一点。 3. 具有开发经验,Linux系统熟悉,对SQL熟悉,对软件测试会有相当大的帮助,更能胜任软件测试工作; 4 做过开发,逻辑思维能力强; 5 对软件内部实现、功能需求、功能实现了解更深入,能根据自己的经验分析,那里容易出错,快速定位找出bug出现的地方,更有针对性。 6. 会代码,更适合做自动化测试。 7. 自身性格特点-- 很细致很有条理,很擅长找bug,很擅长沟通。
是否做过性能测试?你对性能测试了解哪些?
有简单的接触过。采用的工具是Jmeter,进行轻量级的压力测试。 1)确定好压力测试的功能模块,首先利用JMETER录制脚本,然后对脚本进行优化 2)对一些测试数据进行参数化,利用CSV导入存在txt文档里面的数据 3)设计测试场景 4)执行压力测试 5)查看压力测试结果,并对数据进行分析,主要考虑错误率 吞吐量 平均等待时间这些。 6)出压力测试报告
用python如何实现接口自动化测试
1、安装requests库 pip install requests 2、根据接口文档,使用python编写接口请求 3、根据测试方法,编写正常、异常测试用例
HTTPS和HTTP的区别主要如下:
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。 2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。 3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。 4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
怎么判断前后端bug?
前端没有发出请求,就是前端的问题。 前端发出了请求,但是请求的参数有错误,就是前端的问题 前端发出了请求,参数没有问题,后端返回数据有问题,就是后端的问题。 前端发出了请求,参数没有问题,后端没有响应,就是后端的问题。
熟悉 adb 命令,能够使用 adb 命令查看后台日志,分析定位问题;
1、adb devices 查看当前已连接的设备 2.adb install <apk文件路径>将指定的apk文件安装到设备上 3、adb uninstall <包名> 卸载设备上的指定程序 4、 adb push/pull 复制文件 5、adb kill-server 关闭adb服务 6、adb start-server 启动adb服务 7、adb logcat 查看日志 9、adb help 显示帮助信息
|