先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024b (备注软件测试)
正文
- 开放性问题,带点主观意见
- 1.对比其他熟悉的自动化工具的优缺点
- 2.自动化的简要方案(简要的同时关键内容请具体)。(提示:appnium 等)
4.Android 测试与 web 测试有什么区别?
相同点:
- 1.设计测试用例均依据等价类、边界值等方法,测试原理相同;
- 2.大多数都采用黑盒测试方法来验证业务功能;
- 3.需要检查界面布局、风格和按钮是否美观、统一等(UI测试);
- 4.测试页面载入和翻页的速度、登录时长是否溢出等问题(性能测试)
- 5.测试应用系统的稳定性;
不同点:
- 1.手机作为通信工具,通信等一些行为会对APP产生(中断测试)
- 2.手机用户对app 产品的安装卸载操作:从上一版本/上两个版本直接升级到最新版本(安装卸载测试);
- 3.web自动化测试使用的工具较常用的是selenium,而android手机自动化测试比较常用的自动化工具是monkey、monkeyrunner、Appium(测试工具不一样)
5.app 测试有哪几种环境?
本地环境:app 安装的手机环境和电脑搭建的自动化测试环境(比如安卓 SDK 等等)。
服务器环境:war 包部署的服务器, 服务器可以通过浏览器访问, 也可以通过 app 去访问。(访问的是 web 程序的接口)
6.简单介绍一下 Android SDK 的安装步骤:
- 下载 jdk 和安卓 sdk
- 安装 jdk, 配置环境变量(java_home、 classpath、 path)
7.请简要介绍一下移动应用及其服务端的测试点?
移动应用主要有权限、安装运行卸载、UI、功能、性能、中断、兼容性、安全性、回归、升级更新、用户体验。(app的11 大测试点)
服务端有接口测试、性能测试、安全测试。
8.如何判断 app 的 bug 是客户端问题还是后台问题
这个要根据业务来,一般数据的问题前端的问题多些,一般做法是有问题提给前端开发, 他们知道是他们自己的问题还是后台返回的数据问题。
9.安卓中如何取出日志信息?
把安卓系统日志信息实时导入到本地:adb logcat -v time > d:\mylog.log
运行使用某个 app,实时获取该 app 的日志信息(cmd 里面的返回信息) :
adb shell monkey -p com.android.calendar -v 1000 > d:\mylog2.log
10.常见的 adb 命令:
- 查看当前连接的设备:adb devices
- 安装软件:adb install 路径\xx.apk
- 卸载软件:adb uninstall <包名>
- 从电脑上发送文件到设备:adb push <本地路径> <远程路径>
- adb push C:\test1.txt /sdcard/
- 从设备上下载文件到电脑:adb pull <远程路径> <本地路径>
- adb pull /sdcard/test1.txt D:
- 实时获取日志:adb logcat -v time > D:\mylog.log
- 登录终端设备 shell:adb shell
- 查找包名/活动名:adb logcat | findstr START
- 启动 APP 启动:adb shell am start -n packageName/activity
- 关闭 app语法:adb shell am force-stop 包名
- 监控 APP 启动时间:adb shell am start -W packageName/activity
- Monkey 命令:adb shell monkey -v -p mypackage 50
11.APP 这么多主流机型如何测试 ?
我们公司就买了, 魅族, 华为, 小米, iphone7、 iphone8 、 iphone8plus 、 iphone x 测试兼容性,有些没有的机型,先借用同事的手机进行测试,同时申请公司购买,或者采用云真机。
12.App 崩溃(闪退),可能是什么原因导致的?
-
缓存垃圾过多:由于安卓系统的特性,如果长时间不清理垃圾文件.会导致越来越卡.也会出现闪退情况.
-
运行的程序过多,导致内存不足
-
应用版本兼容问题:如果应用版本太低,会导致不兼容,造成闪退。此外,有些新版本在调试中,也会造成应用闪退。解决方法:如果是版本太旧,更新为新版本即可;如果是新版本闪退,可能是应用在改版调试,可卸载后安装旧版。
-
检查 APP 中访问网络的地方,组件中的 ImageView 是否可以正常的下载并显示到 app 页面上。
-
检查 APP 的 sdk 和手机的系统是否兼容。
-
在一些特定情况下的闪退,比如播放视频,在 Android5.0 升级到 Android6.0 的时候,有些系统 API 老版本
-
有,新版本没有,到时回去对象的时候失败,报空,系统就会出现闪退
13.Appium 都有哪些启动方式
- 1.客户端启动
- 2.命令行启动
14.请简单介绍一下使用过的安卓UI自动化测试工具?
参考答案:appium:是一个移动端的自动化框架,可用于测试原生应用,移动网页应用和混合型应用,且是跨平台的。robotium:是一款国外的Android自动化测试框架,主要针对Android平台的应用进行黑盒自动化测试,它提供了模拟各种手势操作(点击、长按、滑动等)、查找和断言机制的API,能够对各种控件进行操作。
15.请说明Android手机和IOS手机,系统有什么区别?
- 两者运行机制不同:IOS采用的是沙盒运行机制,安卓采用的是虚拟机运行机制。
- 两者后台制度不同:IOS中任何第三方程序都不能在后台运行;安卓中任何程序都能在后台运行,直到没有内存才会关闭。
- IOS中用于UI指令权限最高,安卓中数据处理指令权限最高。
三、接口自动化测试
1.按你的理解,软件接口是什么?
就是指程序中具体负责在不同模块之间传输或接受数据的并做处理的类或者函数。
2.HTTP和HTTPS协议区别?
- https协议需要到CA(Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用;
- http是超文本传输协议,信息是明文传输,Https协议是由SSL+Http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全;
- http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443;
3.HTTPS在哪一层?
以前我面试很喜欢提网络协议的问题,有朋友说我装X,不实用。稍有点研究网络知识,实际就不难回答
HTTPS在应用层。
4.get和post区别是什么?
POST和GET都是向服务器提交数据,并且都会从服务器获取数据。
区别:
- 1)传送方式:get通过地址栏传输,post通过报文传输
- 2)传送长度:get参数有长度限制(受限于url长度),而post无限制
- 3)GET产生一个TCP数据包(对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200返回数据),POST产生两个TCP数据包(对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok返回数据)
- 4)get请求参数会被完整保留在浏览历史记录里,而post中的参数不会被保留
- 5)在做数据查询时,建议用GET方式;而在做数据添加、修改或删除时,建议用post方式
5.常见的POST提交数据方式
主要有四种方式:application/x-www-form-urlencoded、multipart/form-data、application/json、text/xML等。
6.什么是Http协议无状态协议?怎么解决HTTP协议无状态协议
无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即我们给服务器发送 HTTP 请求之后,服务器根据请求,会给我们发送数据过来,但是,发送完,不会记录任何信息。HTTP 是一个无状态协议,这意味着每个请求都是独立的,Keep-Alive 没能改变这个结果。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。HTTP 协议这种特性有优点也有缺点,优点在于解放了服务器,每一次请求“点到为止”不会造成不必要连接占用,缺点在于每次请求会传输大量重复的内容信息。客户端与服务器进行动态交互的 Web 应用程序出现之后,HTTP 无状态的特性严重阻碍了这些应用程序的实现,毕竟交互是需要承前启后的,简单的购物车程序也要知道用户到底在之前选择了什么商品。于是,两种用于保持 HTTP 连接状态的技术就应运而生了,一个是 Cookie,而另一个则是 Session。
7.cookie和session的区别
- cookie数据存放在客户的浏览器上,session数据放在服务器上
- cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session
- session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面应当使用cookie
- 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie可以将登陆信息等重要信息存放为session;其他信息需要保存,可以放在cookie
8.什么是DNS?
DNS 是域名系统 (Domain Name System),DNS是用来做域名解析的,它会在你上网输入网址后,把它转换成IP,然后去访问对方服务器;没有它,你想上百度就要记住百度的IP,但有了DNS的处理,你只需要记住对应网站的域名,即网址就可以了。
9.请问你们公司是如何做接口测试的?
接口测试实际跟一般测试不同就是测试用例的设计部分。
- ①获取接口规范。
- ②设计接口测试功能用例(主要从用户角度出发看接口能否实现业务需求,用例设计就是黑盒用例那一套)。
- ③各种入参验证(正常情况,异常情况包括输入参数个数不对,类型不对,可选/必选,还有考虑参数有互斥或关联的情况)。
- ④接口返回值各种验证(符合接口文档需求)
- ⑤了解接口实现逻辑,实现逻辑覆盖(语句/条件/分支/判定/…)
- ⑥接口能并发执行吗、安全吗,性能满足要求吗?
- ⑦采用工具或者自写代码来验证。
- ⑧发现问题跟功能测试一样,该报bug报bug,该跟踪状态的跟踪状态。
10.怎么设计接口测试用例?
通常,设计接口测试用例需要考虑以下几个方面:
①是否满足前提条件
有些接口需要满足前提,才可成功获取数据。常见的,需要登录Token
逆向用例:针对是否满足前置条件(假设为n个条件),设计0~n条用例
②是否携带默认值参数
正向用例:带默认值的参数都不填写、不传参,必填参数都填写正确且存在的“常规”值,其他不填写,设计1条用例
③业务规则、功能需求
这里根据时间情况,结合接口参数说明,可能需要设计N条正向用例和逆向用例
④参数是否必填
逆向用例:针对每个必填参数,都设计1条参数值为空的逆向用例
⑤参数之间是否存在关联
有些参数彼此之间存在相互制约的关系
⑥参数数据类型限制
逆向用例:针对每个参数都设计1条参数值类型不符的逆向用例
⑦参数数据类型自身的数据范围值限制
正向用例:针对所有参数,设计1条每个参数的参数值在数据范围内为最大值的正向用例
11.平常用什么工具测接口的?
常用http协议接口测试工具,如:postman、fiddler、jmeter;webService接口用SoapUI、jmeter等。
12.没有接口文档,如果做接口测试?
本题主要考情商,通俗来说就是忽悠能力,先唬住面试官了再说,进去了也是瞎测测,随时做好背锅的准备,当然,你肯定不能回答面试官不测(心理mmp,脸上笑嘻嘻),接下来就是扯犊子时间
用抓包工具把接口抓取处理,然后针对性进行测试;接口中字段信息不清楚的,找时间集中寻求开发解答。(常用抓包工具Fiddler、Charles等)
13.在手工接口测试或者自动化接口测试的过程中,上下游接口有数据依赖如何处理?
用一个全局变量来处理依赖的数据,比如登录后返回token,其它接口都需要这个token,那就用全局变量来传token参数。
14.依赖于第三方数据的接口如何进行测试?
mock
接着面试官会问你,如果mock的,然后你就顺着坑继续挖,搭建mock服务。
15.接口测试中,依赖登录状态的接口如何测试?
依赖登录状态的接口的本质上是在每次发送请求时需要带上session或者cookie才能发送成功,在构建POST请求时添加必要的session或者cookie
16.如何模拟弱网做测试?
Fiddler和charles都可以模拟弱网测试,平常说的模拟丢包,也是模拟弱网测试。
17.你平常做接口测试的过程中发现过哪些bug?
面试官出这个题,主要是想知道你是不是真的做过接口测试,毕竟现在很多小伙伴简历经过包装(不包装连面试机会都没有,没办法,为了生存,能理解)
常规错误,接口没实现,没按约定返回结果,边界值处理出错等。
输入异常值(空值、特殊字符、超过约定长度等),接口抛错,没做封装处理;
输入错误的参数、多输入、少输入参数,接口可能出现的错误;
安全性问题,如明文传输、返回结果含有敏感信息,没对用户身份信息做校验,没做恶意请求拦截等;
性能问题,如接口并发插入多条相同操作,响应时间过长,接口压测出现瓶颈等;
18.当一个接口出现异常时候,你是如何分析异常的?
先抓包,用fiddler(charles)工具抓包,或者浏览器上F12调试工具;APP上的话,那就用Fiddler做代理,通过手机设置代理去看请求和返回报文;
查看后端日志,如Linux系统通过xhell连上服务器,查看接口日志,查看是否有报错信息(命令:tail -f 日志文件);
19.如何分析一个bug是前端还是后端的?
平常提bug的时候,前端开发和后端开发总是扯皮,不承认是对方的bug。
这种情况很容易判断,先抓包看请求报文,对着接口文档,看请求报文有没问题,有问题就是前端发的数据不对;
请求报文没问题,那就看返回报文,返回的数据不对,那就是后端开发的问题咯。
20.你们做接口测试自动化吗?
现在针对大量应用,普遍推崇做接口测试自动化,维护成本低、收益高。常用的工具有许多,如Jmeter、Robot Framework、pytest等。
21.列出几个JMeter监听器?
- 一些JMeter监听器是:
- 集合报告
- 汇总报告
- 查看结果树
- 用表格查看结果
- 图形结果
- BeanShell Listener
- 摘要报告等
22.在python中进行数据驱动测试
在unittest中,没有自带的数据驱动,我们得借助ddt来实现,首先,我们得在python运行环境中安装ddt,用下列命令安装
pip install ddt
另外一个测试框架pytest,它自带数据驱动实现,是通过@pytest.mark.parametrize(argnames,argvalues) 来实现参数化的。
也可以根据自己需求用python实现数据的读取和驱动。
23.接口自动化中的关联怎么处理?
把上一个请求返回的结果传入到下一个请求的参数中,将请求的结果反射到一个类属性(使用setattr()函数),下一个请求去调用这个类属性
24.自动化测试怎么校验结果?
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注软件测试)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
arametrize(argnames,argvalues) 来实现参数化的。
也可以根据自己需求用python实现数据的读取和驱动。
23.接口自动化中的关联怎么处理?
把上一个请求返回的结果传入到下一个请求的参数中,将请求的结果反射到一个类属性(使用setattr()函数),下一个请求去调用这个类属性
24.自动化测试怎么校验结果?
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注软件测试)
[外链图片转存中…(img-XO9P2yRd-1713481014785)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!