在日常测试工作,很多测试同学对很对基础的知识理解很模糊,特意整理了下一些面试以及日常工作中涉及的知识点,希望能帮助测试同学更好的开展工作。
1、如何制定测试计划?
考点:
1、是否拥有测试计划的制定经验
2、是否具备合理安排测试的能力
3、是否具备文档输出的能力
参考答案:
测试计划包括测试目标、测试范围、测试环境的说明、测试类型的说明(功能,安全,性能,稳定性)、测试工具、模块的划分、测试负责人、测试执行轮次的时间安排、相关文档在文档管理库中的位置、测试的风脸。其中模块划分需要根据测试人员对于业务的熟悉程度及个人能力进行分配,工作量的估算需要根据以往测试时的经验,结合本次需求的修改,可以大致估算出测试量
2、在项目中如何保证软件质量?
考点:
1、考察对测试工作的理解
2、考察求职者有没有对测试工作有一些自己的思考和认识
参考答案:
项目质量不仅仅是某个人或某个团队来保障的,而是整个团队一起努力的结果,在公司级别需要有一个规范的项目流程
1、产品,保证迭代过程中的产品逻辑,对于可能的兼容,升级做出预判,并给出方案
2、设计,满足产品表达的同时,保证设计的延续性
3、开发,产品细节的保证,技术方案选择要严谨,考虑兼容,性能、开发完成后要充分自测,严格遵循开发规范操作
4、测试,验证产品逻辑,站在用户角度对交互设计进行系统验证,尽可能多的使用技术手段保证测试质量
3、持续集成的目的是什么?
考点:
1、是否熟悉持续集成
2、是否具备参与持续集成的能力
3、是否理解持续集成的意义
参考答案:
持续集成指的是,频繁地(一天多次)将代码集成到主干。它的好处主要有两个:
(1)快速发现错误。每完成一点更新,就集成到主干,可以快速发明错误,定位错误也比较容易。
(2)防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。
持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试,只要有一个测试用例失败,就不能集成。
4、接口测试用例的编写要点有哪些?
考点:
接口测试用例设计
参考答案:
1)必填字段:请求参数必填项、可选项
2)合法性:输入输出合法、非法参数
3)边界:请求参数边界值等
4)容错能力:大容量数据、频繁请求、重复请求(如:订单)、异常网络等的处理
5)响应数据校验:断言、数据提取传递到下一级接口…
6)逻辑校验:如两个请求的接口有严格的先后顺序,需要测试调转顺序的情况
7)性能:对接口模拟并发测试,逐步加压,分析瓶颈点
8) 安全性:构造恶意的字符请求, 如:SQL注入、XSS、敏感信息、业务逻辑(如:跳过某些关键步骤;未经验证操纵敏感数据)
5、Bug优先级和严重程度如何划分?
考点:
对于优先级和严重程度的理解
参考答案:
Proity(优先级) 和Severity (严重程度) 是提交bug的两个重要属性。通第, 试人员在提交Bug时, 只定义Bug的Severity, 即该Bug的严重程度, 而将Priority交给Project Leader或Team Leader来定义, 由他们来决定该Bug被修复的优先等级。某种意义上来说,Priority的定义要依赖于Severity , 在大多数情况下, Severity越严重, 那这个Bug的Priority就越高。Severity (严重程度) 如下:
Blocker(有妨碍的):即系统无法执行、崩溃或严重资源不足、应用模块无法启动或异常退出、无法测试、造成系统不稳定
Critical (紧要的):即影响系统功能或操作, 主要功能存在严重缺陷,但不会影响到系统稳定性
Major (严重的):即界面、性能缺陷、兼容性。
Minor /Trivial(次要的/不严重的):即易用性及建议性问题。
Priority (优先级):Immediate (立刻)、Urgent(紧要、优先)、High (高度重视)、Normal(正常)、Low(稍缓)
6、做好测试用例设计工作的关键是什么?
考点:
1、考察对于测试用例的认知
2、考察测试用例需要的方方面面于优先级和严重程度的理解
参考答案:
关键点就是熟悉需求,但是需求可以分为以下几个方面
1.熟悉本次业务需求
2.熟悉其他系统和本次需求的关联
3.熟悉开发设计文档,了解开发实现逻辑
4.熟悉数据库设计文档,了解数据存储
5.熟悉项目架构,发现隐藏需求
7、用过docker吗?常用的docker命令有哪些?
考点:
1、考察Dev opts相关技术
2、考察是否具备docker实际使用经验
参考答案:
docker pull:拉取镜像
docker images:查看本地镜像
docker run:运行镜像为容器
docker ps:查看正在运行的容器
docker logs:查看容器日志
docker cp:拷贝容器文件
docker start/stop/restart:启动、停止、重启容器
8、pytest参数化怎么实现
考点:
py test对参数化的理解
参考答案:
使用@py test.mark.parametrize装饰器
范例:
@py test.mark.parametrize(‘字符串形式接收参数名’, [(参数1-1, ‘参数2-1) , (参数1-2, ‘参数2-2’) ] , ids=[第1条参数对应的用例名’, ‘第2条参数对应的用例名])
@py test.mark.parametrize(‘ goods_id, stock, exp’, [(12, 1, ‘缺失规格) , (‘商品编号’, ‘1’.’商品不存在或已删除) ] , ids=[不填写规格参数加购’,’商品编号为异常值])
9、说说pytest里的钩子函数
考点:
py test基础知识
参考答案:
几个常用的钩子:
py test_configure(config ) :添加自定义的标签等
py test_collection_modify items(items ) :在case收集后调用, 可以对项目顺序或其他功能进行自定义
py test_add option(parser ) :为命令行添加自定义参数
10、pytest里如何进行case的组装
考点:
考察使用py test组织case的能力
参考答案:
1.默认使用检查以test py或test .py命名的文件名, 在文件内那首找以test打头的方法或函数, 并执行
2.可以使用自定义marker(标签) , 比如py test运行的时就只运行s有该marker的测试用例, 比如下面的@pytestmark.PO
3.在命令行使用指定文件
4.参数:kargs模糊匹配case(关键字args:可以是py文件名, 也可以是函数名)
什么是PO模式,Po模式的优点是什么?
考点:
1、po模式理论
2、po模式分层思路
参考答案:
页面对象模型(PageObject是一种设计模式, 用来编写和维护自动化Po模式的优点:
1、PO提供了一种业务流程与页面元素操作分离的模式,这使得测试代码变得更加清晰。
2、页面对象与用例分离,使得我们更好的复用对象。
3、可复用的页面方法代码会变得更加优化
4、更加有效的命名方式使得我们更加清晰的知道方法所操作的UI元素如何编写PO模式:1.抽象每一个页面
2.页面中元素不暴露,仅报错操作元素的方法
3.页面不应该有繁顼的继承关系
4.页面中不是所有元素都需要涉及到,核型业务元素做建模使用5.把页面划分功能模块,在Page中实现这些功能方法
说说接口case的设计思路
考点:
接口测试思路
参考答案:
首先是分析接口:
1.分析接口对应的业务
3.分析接口之间的依赖关系
4.分析接口对应的业务依赖关系然后根据信息,可以从以下方向设计用例:
接口业务
接口参数单项测试
业务依赖
接口依赖
数据依赖
接口安全
接口性能
pytest单元框架里, 前置条件么处理?
考点:
对pytest框架的熟练程度
参考答案:
1.使用setup
函数级的(setup_function、teardown_function ) 只对函数用例生而且不在类中使用
类级的(setup_cass、teardown_class)在类中使用, 类执行之前运行一次,类执行之后运行一次
类中方法级的(setup_method、teardown_method)在每一个方法之前执行一次,在每一个方法之后执行一次
模块级的(setup_module、teardown_module )
2.使用conftest
@pytestfixture( scope=”module”)
scope参数的可选范围:
-function:每一个函数或方法都会调用
-class:每一个类调用一次,一个类中可以有多个方法
-module:每一个.py文件调用一次, 该文件内又有多个funct on和class
-session:是多个文件调用一次,可以跨py文件调用, 每个.py文件就是module
mock技术一般用在什么场景?简述mock-sever的设计思路
考点:
1、mock思路
2、mock项目实践
参考答案:
使用场景:
①需求提测后, 后端未提测但是前端完成。使用mock验证前端
②业务的自动化项目中, 有个别接口不稳定。使用mock代替
设计思路:使用flask编写mock-web服务
①按需实现mock逻辑
②针对不需要实现mock的业务, 使用通用透传方法处理
③mock响应数据, 应该抽离出来。方便维护
如何保证自动化测试的稳定性
考点:
1、是否具备自动化测试实际经验
2、是否碰到过稳定性造成的问题
3、是否具备解决稳定性相关的问题
参考答案:
自动化测试稳定性主要表现在两个方面:一个是元素定位的问题,一个是用例之间的依赖问题。元素定位问题可以采用智能等待的方式尽可能的避免;用例依赖可以解耦用例之间的关系,让每条用例都从一个共同的页面开始执行,比如首页,这就需要在测试框架中采用后置处理的方式使每条用例执行完成后都回到首页。
使用jmeter如何做接口之间的关联
考点:
1、是否熟悉jmeter
2、是否熟悉关联的业务场景
3、是否熟练关联所用到的组件
参考答案:
接口关联指的就是一个接口要使用另一个接口的返回值作为参数,在jmeter中针对不同的响应数据格式都有不同的处理组件,json格式的采用json提取器,xml或者html格式的采用xpath提取器, 其他格式的可以采用正则表达式提取器, BeanShell后置处理器也可以从响应结果中提取响应内容,通过这些组件提取所需内容后,在需要关联的接口中引用变量即可完成关联
接口测试中的加密参数如何处理?
考点:
1、是否熟悉加解密方式
2、是否具备处理加密参数的能力
3、是否实际应用过
参考答案:
首先了解参数的加解密方式, 常见的有md 5、aes、rsa等等, 如果是aes的需要找开发要私钥, 如果是rsa需要找开发要公钥和私钥, 然后在接口测试工具中引用加解密的代码实现参数的加解密过程,实现参数加解密的处理;如果公司有自定义的加密算法则需要找开发要加解密的代码实现,然后在测试工具中使用。
说一下你知道的HTTP状态码, 以及它们代表什么意思?
考点:
1、考察求职者对HTTP协议是否有一定了解
2、考察工作中常见HTTP状态码的含义
参考答案:
200(请求成功)
302(重定向)
400(Bad Request/错误请求)
401(Unauthorized/未授权)
403(Forbidden/禁止)
404(NotFound/未找到)
405(Method Not Allowed/方法未允许)
500(Internal Server Error/内部服务器错误)
502(Bad Gateway/错误的网关)
503(Service Unavailable/服务无法获得)
504(Gateway Timeout/网关超时)
web自动化中如何处理alert弹窗
考点:
1、考察web自动化测试中常见的一种处理场景
2、遇到alert弹窗如何去定位处理弹窗
参考答案:
selenium里提供了switch_to . alert方法处理弹窗, 代码如下(Python)
#切换到alert窗口alert=driver . switch_to . alert
Tcp三次握手流程
考点:
1、考察网络协议的理论基础
2、考察Tcp链接的创建过程
参考答案:
第一次握手:建立连接时, 客户端发送syn包(syn=j) 到服务器, 并进入SYN_SENT状态, 等待服务器确认
第二次握手:服务器收到syn包, 必须确认客户的SYN(ack=j 1) ,同时自己也发送一个SYN包(syn=k) , 即SYN ACK包, 此时服务器进入SYN_RECV状态
第三次握手:客户端收到服务器的SYN ACK包, 向服务器发送确认包ACK(ack=k 1) , 此包发送完毕, 客户端和服务器进入ESTABLISHED(TCP连接成功) 状态, 完成三次握手。
1、给你一个网站,如何开展测试
考点:
1、对于软件测试流程的理解
2、考察测试项目的计划安排能力
参考答案:
1.查找需求说明、网站设计等相关文档,分析测试需求。
2.制定测试计划,确定测试范围和测试策略。
3.设计测试用例,包括功能、兼容、性能、安全等方面4.开展测试执行
5.回归测试及测试总结
2、同步和异步区别
考点:
1、考察对企业中接口通信机制的认识
2、考察同步通信和异步通信的原理
参考答案:
同步和异步是一种通讯方式同步:执行一个操作时,需要等待其处理完成,然后再进行下一个异步:执行一个操作时,不需要等待返回,就进行下一个操作,一要使用消息中间件
举例:下单接口中,需要调用库存接口做库存判断,所以必须等待库存接口回数据才能进行下一步操作,这是同步;下单接口中,下单成功后需要调用邮件通知接口,不用等待接口返回,就可以直接进行下一步操作,这是异步
3、自动化测试在什么阶段执行会带来什么收益
考点:
1、自动化测试实施阶段
2、自动化测试的作用
参考答案:
对于接口测试来说均需要采用自动化的手段,因此在开发联调完成和集成测试之间可以介入,在进入集成测试之后接口测试自动化脚本可以用来做接口层面的回归测试,以保障接口方面不出问题;UI自动化会在产品稳定之后介入,主要用来保障UI层面的回归,那么自动化测试均是为了提升测试效率,保障原有功能的正确性
4、自动化测试框架都包括哪些模块
考点:
对于自动化测试框架的认知
参考答案:
自动化测试框架模块包括基础方法、数据驱动、PO模式分层、自定义异常、工具包、配置文件、测试报告、日志收集、关键字驱动、接口分层、接口数据管理等模块,以上模块均需要集成相关的工具进行二次封装。
5、性能测试中,TPS比较低,可能是哪些方面的问题
考点:
1、考察在工作中是否做过性能测试
2、考察是否具备一定性能分析能力
3、考察对于性能分析是否具备清晰的思路
参考答案:
1.压力机本身性能瓶颈
2.网络IO瓶颈
3.中间件(tomcat/nginx/mysql) 连接数限制
4.Java线程的阻塞、等待5.本系统资源的瓶颈(cpu、内存、磁盘、网络等)
6.其他外部系统响应时间过长, 造成本系统的time-wait
6、如何准备性能测试数据
考点:
1、考察性能测试数据的准备方法
2、考察技术全面性
参考答案:
a)调用业务接口构造数据,一般适用于数据逻辑比较复杂的情况下。
b)直接写jdbc代码造数据,一般适用于数据量较大且数据逻辑较简单的情况。
c)存储过程造数据,一般适用于数据量巨大且数据逻辑较简单的情况。
d)导入sql,一般适用于数据安全级别较低且数据量巨大的情况。
7、get和post的区别
考点:
http协议的请求方法
参考答案:
最常见的http/https协议的请求方式是GET和POST, 他们之间的区别如下:
1.请求参数的位置get在url里面传输,post在请求体里传输
2.安全性正因为传输参数位置的区别, 所以get的安全性不如post
3.传输数据的大小正因为传输参数位置的区别,get的参数长度受限于浏览器,post的长度不受限制
4.表现形式请求行的表现形式不一样,因为请求行里面包括请求方法,所以当然不一样了
8、性能测试过程中如何对瓶颈进分析
考点:
1、考察性能测试分析思路
2、考察性能瓶颈的理解
参考答案:
性能瓶颈分析参考准则:排除法,从上至下、从局部到整体!
针对不同的瓶颈采用不同的分析方法,一般分为:
内存分析方法、处理器分析法、磁盘I/O分析方法、进程分析方法、网络分析方法等等。
内存分析方法:内存分析用于判断系统有无内存瓶颈,是否需要通过增加内存等手段提高系统性能表现。
处理器分析法:通过处理器性能计数器的值体现服务器整体处理器利用率,判断是否存在处理器瓶颈。
磁盘I/O分析方法:通过磁盘/O性能计数器的值体现服务器整体磁盘I/O使用情况,判断是否存在处理器瓶颈。
进程分析方法:通过进程性能指标数据,断是否存在进程瓶颈。
网络分析方法:通过网络性能指标影据,判断是否存在!
如何模拟弱网测试
考点:
1、考察弱网概念
2、考察模拟弱网的思路
参考答案:
很多抓包工具都可以做到模拟网络情况, 比如fiddler、charles。如果是网站还可以采用chrome开发者工具模拟弱网, 如果是手机app则可以在手机自身的网络设置里设置为2G/3G/4G/飞行模式。
cookie和session的区别
考点:
会话跟踪技术
参考答案:
会话(Session) 跟踪是Web程序中常用的技术, 用来跟踪用户的整个会话
Cookie通过在客户端记录信息确定用户身份,Sesson通过在服务器端记录信息确定用户身份
区别:
1、数据存放位置不同:cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、安全程度不同:cookie不是很安全, 别人能分析存放本地的COOKIE并进行COOKIE欺骗, 考虑到安全应当使用session。
3、性能使用程度不同:session会在一定时间内保存在服务器上。当访问增多, 会比较占用你服务器的性能, 考虑到减轻服务器性能方面, 应当使用cookie
4、数据存储大小不同:单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie , 而session则存储与服务端, 浏览器对其没有限制。
http和https的区别
考点:
http协议和https协议
参考答案:
HTTP:超文本传输协议, 是一个客户端和服务器端的请求和应答的标准
HTTPS:是以安全为目标的HTTP通道, HTTP的安全版本, HTTP下加入SSL层, HTTPS的安全基础是SSL, 因此加密的详细内容就需要SSL
他们的区别如下:
1.HTTP信息是明文传输的, 而HTTPS是安全的具有安全性的ssl加密传输
2.HTTP标准端口是80, 而HTTPS的标准端口是443
3.HTTP无需证书, 而HTTPS需要认证证书.需要到CA申请证书,一般免费证书较少,因而需要一定费用。
进程和线程的区别
考点:
进程和线程的概念
参考答案:
进程与线程的区别
1、进程是资源分配最小单位,线程是程序执行的最小单位;
3、CPU切换一个线程比切换进程花费小;
4、创建一个线程比进程开销小;
5、线程占用的资源要比进程少很多。
6、线程之间通信更方便,同一个进程下,线程共享全局变量,静态变量等数据, 进程之间的通信需要以通信的方式(IPC) 进行;(但多线程程序处理好同步与互斥是个难点)
8、进程对资源保护要求高,开销大,效率相对较低,线程资源保护要求不高,但开销小,效率高,可频繁切换;
web driver中关闭浏览器的quite lose有什么区别
考点:
quit和close
参考答案:
简单来说, 两个都可以实现退出浏览器session功能, close是关闭你当前聚焦的tab页面, 而quit是关闭全部浏览器tab页面, 并退出浏览器session。知道这两个区别,我们就知道quit一般用在结束测试之前的操作,close用在执行用例过程中关闭某一个页面的操作
性能场景怎么设计?一般都有哪些性能场景?
考点:
1、对性能测试理论的掌握程度
2、性能场景设计能力
参考答案:
一般基本的场景包括:基准测试、单交易测试、混合测试、稳定性测试其他场景的可选场景:高可用性测试、异常测试等,以及其他的结合各自项目业务的场景
怎么根据线下环境评估线上环境的性能
考点:
1、环境比对的前提条件
参考答案:
1.首先线下必须要有专门的性能测试环境
2.线下环境单台机器配置和线上不能相差很大,可以通过单台的机器性能推算出多台机器性能
3.如果线下机器配置很差,只能测试出程序有无性能问题,这样线下测试出来的数据对线上没有太大参考意义
4.如果想获取比较准确的线上性能情况,建议最好做线上的性能测试