WEB/APP性能测试
1.性能测试关注的指标是什么
1.吞吐量(Rps):每秒钟系统能够处理的请求数、任务数
2.响应时间(Rt):服务处理一个请求或一个任务的耗时
3.错误率:一批请求中结果出错的请求所占比例
4.从服务器的角度看,性能测试主要关注CPU、内存、服务器负载、网络、磁盘IO等。
5.每秒事物数(TPS)
6.内存(CPU)
7.网络(IO)
8.每秒点击数\
2.要进行性能测试,你是如何展开操作的
1.确定关键业务,关键路径;
2.确定测试的关键数据。比如并发量,响应时间,循环次数等;
3.准备测试环境,完成脚本录制或脚本开发;
4.执行测试,观察或监控输出参数,比如吞吐量,响应时间,资源占有率等;
5.对执行结果进行分析,分析性能问题。
3.怎么分析性能测试结果
1.查看聚合报告和服务器的资源使用图,检查响应时间,事务成功率,CPU,内存和IO使用率是否达到要求,如果出错率达到了总请求的3%,我们会检查是什么原因导致的,修改好后,重新测试;
2.如果出现了性能瓶颈,比如响应时间,或者CPU使用率不达标,我们会从服务器上导出日志,分析是哪个地方导致响应时间过长,如果分析不出来,就叫上开发一起讨论,确定问题后,就提单给代发修复,修复好了就进行回归测试。
3.查看聚合报告和服务器的资源使用图,检查响应时间,事务成功率,CPU,内存和IO使用率是否达到要求,如果出错率达到了总请求数的3%,我们会检查是什么原因导致的,修改好后,重新测试;事务通过率为100%,90%的事务响应时间不超过5秒,并发用户为1000人,CPU和内存的使用率为70%以下
4.如何判断网络是否存在瓶颈
查看在整个性能测试过程中,网络的吞吐量是多少,如果网络的吞吐量占到了服务器的70%以上,我们就认为网络存在瓶颈,通常会增加带宽或者压缩传输数据。
5.如何判断响应时间不达标
根据性能测试结果先检查看下是否是服务器带宽存在问题,如果带宽存在瓶颈,则会考虑增加带宽或者压缩传输数据,如果带宽没有问题的话,我们会从服务器上导出日志,开发一起讨论分析是哪个地方导致响应时间过长,确定问题后,就提单给开发修复,修复好了就进行回归测试。
6.如何判断CPU使用率不达标
CPU使用率不达标,我们会从服务器上导出日志,分析是哪个地方导致CPU使用率不达标,如果分析不出来,就叫上开发一起讨论,确定问题后,就提单给开发修复,修复好了就进行回归测试
7.项目最佳的并发用户数是多少
通过负载测试,不断增加用户数,随着用户数的增加,各项性能指标也会相应产生变化,当出现了性能拐点,比如,当用户数达到某个数量级时,响应时间突然增长,那么这个拐点处对应的用户数就是系统能承载的最大用户数,我们当时做到1500个并发用户的时候,查询功能的响应时间超过了性能指标2秒多,原因是有几个表的索引建得不合理导致的,重新建索引后,问题就解决了。我们当时做到1500并发用户后,就没再继续增加用户量了,
8.App常见崩溃原因
1.设备碎片化:由于设备极具多样性,App在不同的设备上可能有不同表现形式;
2.宽带限制:宽带不佳的网络对App所需的快速响应时间不够;
3.网络的变化:不同网络的切换可能会影响App的稳定性;
4.内存管理:可能内存过低,或者是授权的内存位置的使用可能会导致App失败;
5.用户过多:连续数量过多可能会导致App崩溃;
6.代码错误:没有经过测试的新功能,可能会导致App在生产环境中失败;
7.第三方服务:广告或弹出屏幕可能会导致App崩溃。
9.弱网情况下你是如何测试的
A.2G的网速150kbps,折合下载速度15-20K/S.B=8b.g
B.3G的网速 1-6Mbps,折合下载速度120K/S-600K/S.
C.4G的网速10-100Mbps,折合下载速度1.5M/s-10M/s.
a)使用真实的SIM卡,运营上网络来进行测试。
b)通过代理的方式模拟弱网环境下进行测试(charles应延迟)
c)链接模拟弱网的热点进行测试(如360wifi助手可以设置)
1.在Charles中设置需要模拟弱网的主机和端口号
2.切换2G3G4G网络,测试客户端的容错能力(崩溃或者ANR问题)
3.还可以设置带宽、利用率、最大传输单元、不稳定性范围等参数模拟不同的网络环境,测试客户端的容错能力
10.测试手机兼容性如何测试的
一般测试手机兼容性的时候会考虑到手机的型号,分辨率以及安卓版本号,一般常用的手机型号如:华为,锤子,小米,魅族等,一般碎片化会严重,从Android6.0到Android10.0的版本是不一样的,而最近的版本号已经到10了,也就是AndroidQ,它是协助开发者利用5G,折叠屏,无框屏,设备内置Al等最新技术继续创新,同时确保用户安全,隐私及数字健康。向分辨率这块大部分是19201080,还有好多的分变率,如7201280,还有大的分辨率,都要考虑兼容,不然的话手机视觉体验就会不太好,一般会买真机去测。
11.压力测试与负载测试的区别
1.负载测试 背10个人跑
2.压力测试 背一个 在背一个 在背一个
12.你是如何篡改请求数据的
1.我使用的是Charles进行篡改响应数据的
2.在配置好代理以后,抓取对应想要测试的接口,对该接口设置断点
3.再次进入这个请求,断点停留在当前的接口位置,点击下一步(excute)
4.在顶部点击Edit request修改请求数据,再次点击excute
5.查看接口放回的相应数据是否和对应错误参数的提示一致,是否有异常数值
13.App提示无法连接网络,你会如何排查
1.首先看其他app能否连接网络,如果也连不上就是网络问题
2接着切换流量,wifi,热点,几种网络之间来回切换,如果在流量下访问不到,就是欠费啦
3.接着在排查wifi是否设置了代理,如果开了代理就通过抓包工具看看请求响应是否正常,如果没有响应或者400 404之类的就是后端问题 如果抓不到包就是代理配置有问题或者https证书问题
ADB命令
1.说几个常见的adb命令
-
查看当前连接设备:adb devices
-
查看日志:adb logcat
-
安装apk文件:adb install -r (apk的绝对路径)
-
卸载App: adb uninstall 包名 adb uninstall -k 包名 (保存配置及缓存文件)
-
列出所有的包名: adb shell pm list package
-
列出第三方的包名: adb shell pm list package - 3
-
列出系统应用的包名: adb shell pm list package - s
-
查看手机内存的命令: adb shell dumpsys meminfo 包名
-
启动: adb start server
-
关闭: adb kill-server
-
adb logcat . 日志级别 V Verbose 最低 D Debug bug I Info 信息 W Warn 警告 E Error 错误 F Fatal 致命S Silent (supress all output) adb install -r xx.apk 覆盖低版本的
adb install -r -d 覆盖高版本的
2.性能测试的adb命令
adb shell dumpsys cpuinfo 查看手机cpu的使用情况
adb shell getprop|findstr dalvik 手机系统自己运行的内存使用
Monkey命令
1.说几个monkey指令
-
打印日志的命令: adb shell monkey 200 >d: / monkeylog. txt
-
触摸事件:--pct-touch
-
动作事件:--pct-motion
-
轨迹事件:--pct-tackball
-
系统按键:--pct-sykeys
-
基本导航:--pct-nav
-
主要导航:--pct-majornav
-
启动事件:--pct-qppswitch
-
指定弹窗事件:--pct-flip
-
指定其他事件:--pct-anyevent
-
指定缩放事件:--pct-pinchzoom
-
忽略崩溃:--ignore-crashes
-
忽略超时:--ignore-timeouts
-
忽略许可异常:--ignore-security-exeptions
-
延时:--throttle
-
adb shell monkey -p com.sxxh.linghuo -s 23 --throttle 200 --ignore-crashes --ignore-timeouts -v -v -v 400
postman
1.postman与jmeter的区别是什么?
1.用例组织不同:jmeter的组织是比较偏扁平,首先它没有工作空间的概念,直接就是测试计划,而postman功能上更简单,组织方式是轻量级,他主要针对的是单个的http请求。
2.支持接口的类型与测试的类型不同:jmeter的功能更强大,可以通过各种类型的接口,不支持的页可以通过网上或者自己编写的插件进行扩展,而postman更轻量级,定位不同,可用来测试rest接口。
3.配置不同:jmeter可以在线程组里添加http,tcp,而postman只支持rest接口。
2.postman做接口测试
1.postman上将接口地址 传参方式以及参数写在对应的输入框里面 点击send按钮 会在下面reponse文本框显示返回的数据是以json凡是返回来的,这个 时候我们会对应接口文档 惊醒正返例数据的填写 对比接口文档查看数据是否符合标准 2.创建项目》选择请求方式》输入接口地址》配置参数名以及参数值》send按钮》看看是否有返回数据
3.postman配置测试环境
-
1:在Postman中设置两个环境,本地环境、测试环境
-
2:在两个环境中分别设置变量名为 base_url的变量,存放各自环境的IP地址
Postman 中获取环境变量值的方式为:{{变量名}},这样就可以获取变量值。
这里base_url的值获取方式就是:{{base_url}}
-
3:在Postman的URL地址栏中设置 为 {{base_url}}/login
-
4:切换不同的环境,base_url的值就会发生改变,这样就达到了IP地址切换的效果。
4.postman中如何实现接口之间的关联
获取响应文本,通过json提取器或正则表达式提取相关参数,下一个接口直接引用定义的参数
如何取:
第一个接口tests中用pm.response.json() 获取所有返回值,根据自己的需要取,用pm.globals.set(变量名,取数据的表达式) 定义为全局变量
如何用:
在第二个接口中直接用{{变量名}} 引用即可
Mysql数据库
1.Mysql数据库查询语句有哪些/多表联查
数据库语言最常用的是SQL
多表联查:select * from table1 t1,table2 t2 where tl.id=t2.id
这样就是多表联查。
left join
right join
inner join
2.Mysql数据库的增删改查
增:alter table 数据表名 add birthday datetime;
删:alter table 表名 drop 列名;
改:
1.修改字段,不重命名,用modify alter table 数据表名 modify birthday date;
2.修改字段,重命名,用change alter table 表名 change 原名 新名 类型及约束 alter table 数据表名 change birthday birth date;
查:查询表使用数据 select * from 表名;
部分查询 select * from 表名 where 条件;
可以使用as 为列表指定别名 select 字段 as 别名,字段 as 别名 from 数据表名 where…;
3.sql内关联和内关联的区别
内关联是求交集 外关联是以主表为标准,去附表找需要的信息
4.熟悉数据库嘛 平时数据库用的多吗
还行,一般出现问题,遇到bug,就要去查询数据库,初步定为问题。开发会给到我们一个库表设计的excel(数据字典),里面有描述表名和表中的字段,我把交易过程的一些唯一标识,把他作为where条件去查询数据。初步分析后,再把问题暴露给开发。
(比如做智联项目支付时,输入支付密码后,已经返回了支付成功的提示信息,然后界面上的订单查询还是待付款,这个时候就要去查询订单表的数据,找到自己刚才做的交易的那一笔订单,去分析一下错误,再暴露给开发
Jmeter
1.Jmeter是如何测试的,如何使用的
1.打开jmeter;
2.创建线程组;
3.设置线程数和循环次数;
4.配置元件;
5.配置我们需要进行测试的程序协议、地址和端口;
6.构造http请求;
7.添加http请求头;
8.添加断言;
9.添加查看结果树;
10.添加Summary Report;
11.执行测试计划,执行测试计划不能用GUI,需要用命令来执行;
12.web报告。
2.jmeter连接数据库
1.在jmeter的线程组中分别添加JDBC Connection ConfigConfiguration 、JDBC Request 、 Debug Sampler 、 查看结果数。
2.在测试计划中将连接mysql需要的包加到classpath中。
3.在JDBC Connection Configuration 中添加JDBC的配置。
3.jmeter为什么要参数化
1,多用户登录的时候,如果不进行参数化就没演示了。
2,需要使用CSV将参数放到文件,来演示多用户登陆。
3,在进行录制的时候,有可能存在第二个请求的参数是从第一个请求中获取出来的,需要在第一个请求下,去将参数提取出来,再到第二个请求中进行参数化。
4.jmeter如何进行压力测试
我们在公司大部分是进行的数据库压测以及接口压测
创建线程组设置循环次数创建http请求添加查看结果数和聚合报告
jmeter设置线程数 启动时间 循环次数运行 检查并保存运行数据 判断是否需要优化
5.jmeter的接口测试是怎么做的
1.把线程组设置数量为1,循环次数为1
2.配置好全局变量URL通过配置元件---用户自定义的变量添加
3.增加配置元件http请求默认值,添加事物控制器
4.在事物控制中添加http请求添加接口请求信息
5.添加对应的断言元件进行断言
6.监听器(查看结果树,图形结果,聚合报告等)
6.jmeter中的关联是怎么做的
我们的一个接口,需要另外一个接口,响应里边的某个参数 会用jmeter中提取方法,常用的四种方法 边界提取器 xpath提取器 beanshel
1. 正则表达式提取器
解决方案分析 1. 测试计划->线程组
2. 线程组->HTTP请求(获取title)
3. 获取title->后置处理器->正则表示式提取器
4. 线程组->HTTP请求(使用title)
5. 测试计划->察看结果树
2. XPath Extractor
解决方案分析 1. 测试计划->线程组
2. 线程组->HTTP请求(获取title)
3. 获取title->后置处理器->XPath Extractor
4. 线程组->HTTP请求(使用title)
5. 测试计划->察看结果树
Linux
1.Linux系统操作的指令增加 删除 复制 移动等
Cd:进入目录
Cd app:切换到app目录
Cd.. :切换到上一层目录
Cd/ : 切换到系统根目录
Ifconfig :查看ip
Ll:查看文件及其属性
Vi: 编辑
Rm-rf: 删除
Cp:复制
Mv 隐藏文件
Ls -d只显示隐藏文件
Pwd:显示当前路径
Mv:移动
Df 磁盘空间
Touch:创建文件
Ps:查看进程
cat /proc/cpuinfo:查看CPU信息
2.Linux查看日志命令
1.Tail【参数】【文件】
tail -f info.log : 动态查看实时输出info.log日志
tail -n 200 info.log: 查看info.log日志后200行
tail -f info.log | grep "orderId": 动态查看含有关键字orderId的日志
2.Cat
cat info.log:查看info.log的全部日志内容
cat info.log | grep "java":查看info.log的java关键字关联的全部内容
cat info.log | grep -A 5 "java":查看info.log的java关键字后5行关联的全部内容
cat info.log | grep -B 10 "java":查看info.log的java关键字前10行关联的全部内容
cat info.log | grep -C 20 "java":查看info.log的java关键字前后20行关联的全部内容
3.Less
less info.log :从头开始查看info.log日志内容
4.More
more info.log: 查看info.log的日志内容,按下方附加操作滚动日志内容
more info.log |grep "test": 查看全部关键字test关联内容
5.Head
head -n 20 info.log: 查看info.log日志的前20行内容
3.Linux系统日志查看指令,压缩,解压指令等问题
tar -xvf 文件名 :解压
Tar -n logcat 查看系统日志
tar -zcvf 文件名:压缩
4.Linux 中 find和grep的区别
grep是根据文件的内容进行查找,会对文件的每一行按照给定的模式进行匹配查找。语法: find 查找位置 文件名或目录名
find是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访问时间,修改时间 语法:grep 字符串 文件名
5.Linux 一个文件的访问权限是755,其含义是什么
1、第一位7,代表文件所有者拥有的权限为可读
2、第二位5,代表文件所有者同组用户的权限为可读
3、第三位5,代表公共用户的权限为可读
6.linux查看文件用什么命令 查看进程用什么命令
查看进程:ps -ef | grep 进程号
查看文件内容的命令有 more less head tail cat
查看日志文件常用:less、view
7.查看日志主要查看什么内容
主要查看程序运行的记录,比如支付失败,后台就有报错信息打印到.log日志文件中,就可以通过分析日志信息来初步定为问题。(补充:同时也去查询数据库,分析订单数据,查看支付状态等等)
总结:
感谢每一个认真阅读我文章的人!!!
作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。