软件测试面试题:WEB+网络|接口测试|性能测试|自动化测试

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件测试面试题:WEB+网络|接口测试|性能测试|自动化测试相关的知识,希望对你有一定的参考价值。

参考技术A


1. http代码表,常考题目

404:找不到资源

500:服务器内部错误,无法完成请求。

501:服务器不支持请求的功能,无法完成请求。

502:充当网关或代理的服务器,从远端服务器接收到了一个无效的请求。

301:永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI,今后任何新的请求都应使用新的URI代替。

302:临时移动。与301类似。但资源只是临时被移动,客户端应继续使用原有URI。

200:成功。

2. TCP/IP四层网络模型

链路层、网络层、传输层、应用层。

3. TCP/UDP区别?

TCP: 可靠传输协议,需要三次握手连接,有确认重传机制,特点是可靠、准确、有拥塞控制,缺点就是比较慢,传输量比较小,适用于升级、下载;一句话:TCP是可靠的传输。

UDP: 不可靠传输协议,面向非连接的协议,优点是传输量大、速度快,缺点是已丢失、没有拥塞控制,适用于直播、视频等。一句话:UDP是不可靠的传输。

4. html css js运行的先后顺序是什么?

界面加载的时候先加载html在加载css最后加载js

5. session和cookie的区别是什么

1. session存放在服务器端用来校验客户端的身份

2. cookie存放在客户端,每次从客户端往服务器发请求时,将cookie带到服务器端,用来校验客户端的身份



1. 怎么用JMeter测试接口?

如果使用JMeter进行接口测试:

1) 测试前了解需求,根据接口规格说明书梳理业务;

2) 接下来设计用例,分析接口的入参和出参,分清楚有哪些有效输入和无效输入,设计用例(原则:用最少的用例覆盖所有有效输入,针对每一个无效的输入设计一个测试用例,如果有错误码没有覆盖到,还要对每个未覆盖的错误码分别设计一个用例);

3) 准备测试数据,比如:测试所需的账号、密码、key 等信息;

4) 打开JMeter,创建一个线程组,根据接口类型,填写好对应的接口地址和请求方式等;

5) 参数化配置,添加配置元件CSV Data Set Config,定义变量,并准备CSV格式的数据,变量的引用用$变量名的格式;

6) 添加断言来判断测试结果的正确性,用得最多的是响应断言;

7) 添加监听器,比如查看结果树,对测试结果进行监听;

8) 运行测试用例;

9) 查看监听器结果,来判断用例的执行是成功还是失败,针对失败的用例,分析其失败原因;

10) 针对测试中发现的问题,给开发提单,直到问题最终解决。

11) 最后输出测试报告。

2. 怎么用Postman测试接口?

如果使用Postman测试接口:

其中1,2,3点相同,工具使用方面则比JMeter跟简单,工具的主要的步骤是添加对应的请求、填写主机URL及入参、添加测试套、运行测试套、分析结果出报告。

3. 在JMeter上如何把上一个请求的结果作为下一个请求的参数?

使用正则表达式提取器提取上一个请求的响应中的信息,保存一个引用名称比如abc,在下一个请求的参数中,用$abc的格式来引用提取的结果。

常用的正则表达式格式:(.+?),其中.表示匹配任意字符串,+表示只匹配一次,?表示匹配到就停下来。



一般是我们功能测试完成最后两三天时间测试性能。

1、先是分析需求计算出并发数,TPS,响应时间和 CPU,内存,硬盘和网络IO这些指标。

2、制定测试方案,主要包括环境,计划和具体测试那些场景(如可靠性,并发,负载,压力测试等)

3、根据场景用Badboy录制脚本,导出为JMeter工具支持的脚本。

4、用JMeter工具打开脚本,进行脚本调试,加一些断言,监听器,参数化等。

5、接下来执行性能测试,然后主要收集监听器和收集服务器CPU,内存,硬盘和网络IO等分析是否满足需求,如果满足就输出性能测试报告。

6、如果指标不能满足,反馈给开发进行调优。调优后继续测试,一直到满足需求后最终输出测试报告。



1. Python怎么定义一个函数?

你可以定义一个由自己想要功能的函数,以下是简单的规则:

1) 函数代码块以def关键词开头,后接函数标识符名称和圆括号()。

2) 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。

3) 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。

4) 函数内容以冒号起始,并且缩进

5) return[表达式]结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回None


2 Python切片

3. Python上用过什么库/模块?

webdriver:定位和操作元素

time:设置等待时间

ActionChains:动作链,完成鼠标的相关操作

Keys:键盘的相关操作

WebDriverWait:设置显式等待

Expect_Conditions:针对单个元素,设置显式等待的场景

PIL:截图

Select:下拉选择框的操作

unittest python:自带的单元测试框架

HTMLTestRunner:运行脚本,生成报告

ddt:实现数据驱动测试,行为和数据分离

4. 你做过自动化测试吗?

我在上一份工作中,公司去年下半年也开始规划做Web 自动化,采用Python作为开发语言,通过Selenium WebDriver定位和操作页面元素,自动化框架用的是unittest。我主要负责写测试脚本。

假设一个测试团队有5个人:1资深(测试经理)+2~3个中级(自动化+手动)+1 个初级(手动)

5. 使用什么工具进行的自动化测试

使用的工具是Selenium(Web自动化工具)

6. 用的什么编程语言

用的Python

7. Selenium 用的是哪个版本的的?Python用的是哪个版本的?

用的是selenium 3.11.0和Python2.7.10

8. Selenium的工作原理?

1)对html元素定位

2)模拟对第一步定位到的元素进行点击、输入、选择等操作一句话:定位元素,操作元素。

9. 元素定位方法有哪些?

要点:8种定位方法

1) 根据元素的属性值定位,比如 id、name、class、标签名、链接文字和部分链接文字;

2) 根据CSS选择器定位;

3) 根据 XPath 定位;

10. 子页面里的元素怎么定位?

先切换到框架里,然后再定位,用switch_to_frame函数根据子页面id或name,切换到子页面;定位完了如果要再定位主页面的元素,要用switch_to_default_content 函数先返回主页面。

11. 怎么定位alert弹窗?或者这样问:怎么处理JS原生窗口?

要点:主要涉及点击弹窗确认按钮、强行关闭弹窗、获取弹窗中的文字等操作。

1) 点击弹窗的确定按钮,用如下函数:

driver.switch_to_alert().accept()

2) 强行关闭,点击右上角的叉叉,用如下函数:

driver.switch_to_alert().dismiss()

3) 获取弹窗里的文字,用如下函数:

driver.switch_to_alert().text

12. 怎么运行自动化用例并生成测试报告?

以unittest为例,我通常的做法是把用例加载到测试套中,做成一个脚本,在命令窗口下运行脚本,报告的生成用第三方模块HTML TestRunner来生成。

13. 怎么定位/操作图片中的验证码?

用tesseract OCR引擎处理图片中的验证码,步骤:

(1)对整个屏幕截屏,保存成png格式的图片;

(2)在截取的图片中定位验证码图片的位置坐标;

(3)根据坐标对验证码截图;

(4)在图片中提取验证码,输入到输入框。

跳槽季--性能测试面试题(带答案)

一、性能测试开展过程:

答:第一步:找产品沟通哪些接口需要压测,需要达到什么样的预期值(TPS和响应时间)

第二步:编写测试计划,人员、时间周期、工具

第三步:环境搭建

第四步:造数据

第五步:场景测试(单接口基准测试、单接口压力测试、混合接口测试、稳定性测试)

第六步:结果分析,提交测试报告

第七步:等待开发性能调优,复测

二、交付一个性能测试项目,请阐述你的性能测试流程 (偏高级的回答)

答:1:明确测试需求

2:基于需求设计测试用例,测试方案,测试计划

3:准备测试数据,测试账号(预估并发量),设计测试脚本(参数化,表达式,断言,控制器)

4:运行测试脚本,数据监听(响应时间,tps,活动线程),结果分析(判断性能瓶颈)

5:基本性能瓶颈做调优(tomcat线程池,jvm内存,swap内存,带宽)

6:调优之后做性能回归,和前期结果做对比,是否有明显的优化。

7:代码问题优化(自己定位或者交给开发定位)

8:性能测试报告。整理性能测试数据(包括调优之前和调优之后)

9:构建持久化的性能监听平台,监听线上的服务性能

性能测试贯穿项目始终,从需求分析到上线之后,都需要持续跟踪分析发现问题,响应解决问题

三、什么是性能测试?

答:测试系统有没有性能问题

考虑时间,空间

服务端资源是否足够?

响应时间是否超时?

系统是否足够稳定?

四、性能测试的核心原则是什么?

答:基于协议,多线程,场景设计

协议:所有的请求都是基于协议发出去 http,https,udp,tcp,mqtt

多线程:压力测试是基于java多线程原理,通过线程去模拟用户的行为

基于场景:控制器+定时器设计各种场景满足压测要求

并发场景、负载场景、稳定性、压力测试

... ....

五、什么是负载?有哪些负载模式?

答:负载就是对服务器迭代式加压,从而寻求性能测试拐点

1:用户模式。不断增加的用户数带来的压力

1个用户1s内发起20个请求,rps=20/s

2:请求模式,不断增加的请求数带来的压力

10个用户,1s用户1s内发起1个请求,rps=10/s

不能单纯的通用用户去衡量压力,直接通过每秒请求数去衡量压力。直接从服务端考虑

六、性能测试的应用领域有哪些?

答:1、能力验证:乙方向甲方交付项目时,声明项目的性能数据。

2、瓶颈分析:在能力验证的过程中可能会发现一些瓶颈,通过技术手段分析瓶颈,得到分析数据,为后续调优做理论依据。

3、响应超时:什么负载量的时候出现超时现象?

4、tps达到瓶颈,波动剧烈:tps瓶颈点在哪里?,在什么地方出现性能衰减?

5、性能调优:在得到瓶颈分析数据之后,做性能调优。

6、降低超时,提高tps,减少抖动。。

7、容量规划:基于未来。为将来的用户激增提前做准备

8、数据库扩容

9、服务端硬件优化(增加cpu,扩充磁盘,提升带宽,分布式,负载均衡。。。)

七、压力工具的工作原理是什么?

答:jmeter工作原理:基于协议,通过多线程的方式模拟用户行为,设计各种场景压测服务端,得到性能数据,分析性能瓶颈

八、性能测试基本思路是什么?

答:1、测什么:明确测试目标(明确需求)

2、怎么测:怎么设计场景?

测试计划,测试用例,测试方案、数据准备、参数化,表达式,断言、场景设计(并发,负载,压测)

得到性能测试结果、测试结果验证

验证结果数据是否符合预期

如果预期响应时间是3s,但是实际结果响应时间达到了5s 不合格

预期最大tps需要达到500,但是实际最大的tps只有300 不合格

八、测试哪些关键场景?

答:1、浏览器层面:

web端和app端(H5页面)

关注首屏时间(页面打开到完全呈现)

脚本加载时间,cpu占用,fps频率(帧频率越高,流畅度越高)

2、接口层面

权限划分

普通用户权限(非常多的的用户)

大并发场景:包括查询,表单提交

数据量也需要考虑(电商平台,门户网站)

负载场景:用户长期在线访问,对资源的要求会很高

3、管理员权限(几个用户)

大数据量的场景(管理几十万用户数据)

列表查询时间,分页时间

数据下载(excel,数据导出)是否会内存溢出

mysql数据库是否会死锁,sql查询是否异常

4、超管(1个)

大数据量的场景(管理几十万用户数据)

九、前端性能测试关注哪些点?了解哪些前端性能优化方法?

答:首屏时间:页面完全展现需要的时间

白屏时间:页面第一帧画面出现之前的时间

脚本加载时间,fps,cpu,network

前端性能优化:使用缓存,压缩图片,压缩js,css,gc回收优化,js前置

十、解释常用的性能指标的名称与具体含义

答:1、用户角度

响应时间(rt)从发起请求,到接口响应,到页面渲染

错误率(error)

2、 服务端角度

rps(request persecond)每秒请求数,用户发起的

tps(transaction persecond)每秒完成事物数,服务端决定的

通过rps指标,来测试tps,从而衡量服务端性能。

3、浏览器层面

qps(query perecond)每秒查询接口数(uv pv)

刷新一次页面,调用了三个接口

hps(hit persecond)每秒点击率

十一、性能测试类型有哪些?按顺序描述

答:并发数先确定

基准测试(得到性能数据,为后续的回归测试做理论依据)

单接口基准测试

容量基准测试

负载测试

不断增加负载量(压力),一直到瓶颈点出现,可以停止

压力测试

1:稳定性压测

假设瓶颈点在300tps,用对应的负载量的80%-90%做持续性(几小时或者几天)的压测。目的是发现稳定性问题(内存溢出等等)

2:破坏性压测

用对应负载量的100%或者150%做压测,直接让服务器出现异常。目的是及早的暴露问题

失效恢复测试

服务端出现异常之后能不能及时恢复

十二、什么是集合点?设置集合点有什么意义?jmeter中如何设置集合点?

答:集合点更多的运用在并发测试

为了让压力尽可能的落在同一个时间点

十三、什么是固定等待和隐式等待?

答:固定等待:超时时间=0

线程数一定要>=集合数。一定要集合完毕才发起请求

隐式等待:超时时间>0

达到超时时间范围,无论集合多少线程都会发起请求

十四、你在测试中遇到过哪些性能问题?

答:h5页面响应时间过长

h5的分页经常卡死,sql查询过多,数据量过大

导出excel时间过长,页面503,后台报内存溢出

功能涉及到算法的时候,一定要在测试环境用大量数据去模拟

只要点击,后台cpu立刻就是300%

十五、你在性能场景设计中用到哪些方法?

答:参数化,关联,断言,jdbc连接

十六、什么是关联,如何动态关联?有哪几种关联的方法?

答:正则关联,json关联,xpath关联

保证接口上下游是衔接的

十七、jmeter负载测试中怎么保持session会话?

答:$__setProperty(cookie$counter,$COOKIE_beegosessionID,) 存储session

$__P(cookie,) 从属性表提取session

十八、什么是Ramp up?你如何设置?

答:线程启动的时间

ramp越大,单位时间内的压力越小。ramp=0表示单位时间压力无穷大,线程启动时间无穷小。ramp=0不代表时间为0

十九、如何识别性能瓶颈?

答:随着负载不断升高,tps也是不断升高的,正常逻辑

随着负载不断增加,tps不再增加,甚至下降。表示单位线程的tps实际在衰减。tps的瓶颈点

二十、简述堆区的空间分配和gc原理

答:年轻代

1个eden

2个存活区(S1和S2)

老年代

GC(垃圾回收)

内存溢出:OOM(OUT OF memory)

1:运行内存>当前空间剩余内存

2:垃圾不能及时回收

年轻代GC:

1:最初的对象是存活在eden;伊甸园空间满了之后,会进行第一次GC;

2:第一次GC之后,依然存活的对象,会被丢到S1(第一个存活区);

3:S1初次满了之后,会进行第二次GC(年轻代GC)

4:第二次GC之后,依然存活的对象,会被丢到S2(第二个存活区),同时清空伊甸园和S1;

5:S2满了之后,会进行第三次GC,依然存活的对象,会再次被丢到S1,同时清空伊甸园和S2;

年轻代里面的垃圾碎片都是比较小;老年代的碎片比较大;

让垃圾尽可能的在年轻代里面进行回收;否则会影响老年代空间的整理;

老年代GC:

1:年轻代的GC年龄超出阈值(默认16次),会把年轻代依然存活的对象扔到老年代;

2:对象的尺寸超出了阈值;对象尺寸超出了阈值,会直接进入老年代;

3:对象的大小超出了年轻代剩余的空间大小,直接进入老年代;

老年代GC=fullGC(一般默认)

1:老年代剩余空间不足以对象进入;老年代会直接进行一次fullGC;

2:老年代的对象无法进行GC;老年代会进行一次fullGC;

老年代的对象尺寸都比较大,所以gc时间会很长,同时所有线程会出现暂停;

jvm调优是为了规避fullgc的频繁出现;会影响到tps;

jstat -gcutil pid 1000 监听gc情况

jmap -heap pid 查看内存空间分配情况

jvm参数调优

调堆内存空间,调年轻代的gc年轻,调空间分配比例(老年代:年轻代 / eden:存活区);调gc回收器,并行回收机制

二十一、什么是内存溢出?

答:1:运行需要的内存大于空间剩余内存;会出现内存溢出

2:垃圾无法进行GC;会出现内存溢出

二十二、简述cpu的工作原理

答:分析cpu参数:lscpu

CPU(s): 2 cpu个数

Thread(s) per core: 1 每核的线程

Core(s) per socket: 1 每个卡槽的核

Socket(s): 2 每个cpu的卡槽

双cpu,4核多线程;每个cpu是双核;

cpu负载和利用率

可运行的进程(双r)+不可中断的进程(block)

running(运行中的)+runnable(等待运行的)+block(等待io)=cpu的负载

利用率:cpu双线程如果都在调度java进程,表示当前cpu利用率是100%;

cpu双线程如果只有一个java进程在调度,表示当前cpu利用率是50%;

最理想的情况:每个cpu线程都调度一个java进程,此时的负载=4;

不理想的情况:java进程数远大于cpu线程数,此时负载会远远超出cpu线程数;不能及时调度的进程就会排队;

cpu会给运行中的和等待运行的进程数均匀分配时间片;

cpu调度是以时间片为基准的;假设调度时间为1ns,调度超出1ns之后,进程会被挂起;切换到下一个进程

队列越长,cpu时间片就越小,调度时间就会越短,切换的越快;切换的过于频繁,cpu利用率就会很低,线程也会暂停

进程是最小资源分配单元;

线程最小调度单元;

二十三、什么是上下文切换?哪些场景会存在上下文切换?

答:1:线程的切换

切换的时间加载寄存器和计数器

保存数据和位置信息,然后切换到下一个线程并读取它的数据和位置信息

2:进程切换

3:特权切换

系统调用(切换两次上下文)

用户空间向内核空间发起申请,内核空间返回api给用户空间调用;

二十四、什么是swap空间?oomkiller了解吗?怎么开启swap空间

答:swap:从磁盘空间开辟的虚拟用户空间。

cat /proc/sys/vm/swappiness 查看swap比例

当内存空间使用超出了比例,会启用swap空间(内存交换)

so 换出

si 换入

swapon -a 启用swap

sudo sysctl vm.swappiness=10 临时修改swappiness比例

vim /etc/sysctl.conf 永久修改swappiness比例

学习安排上

 作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。【保证100%免费】

视频文档获取方式:

这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

 

以上是关于软件测试面试题:WEB+网络|接口测试|性能测试|自动化测试的主要内容,如果未能解决你的问题,请参考以下文章

面试了8家软件公司测试岗位,面试题大盘点,我真的尽力了

跳槽季--性能测试面试题(带答案)

接口测试面试题

2022最新整理软件测试常见面试题附答案

软件测试面试必杀篇:2023软件测试面试八股文宝典

速来!内部资料分享,软件测试面试一指禅,建议收藏