面经-软件测试面试常见面试题全套合集系列4-5

目录

十五、app测试

15.1  app测试你具体怎么做的?

15.2  Web测试与app测试区别?

15.3  常用的adb的命令?

15.4  adb的作用的?

15.5  App兼容性测试怎么做的?

15.6  App稳定怎么做的? Monkey怎么用(App稳定测试)?

15.7  App弱网测试怎么做的 ?

15.8  App的性能测试

15.9  对于内存具体怎么测呢?

15.10  对于CPU具体怎么测呢?

15.11  对于流量具体怎么测?

15.12  对于FPS具体怎么测?

15.15  App交互性怎么做的?

15.16  App的安装,卸载,更新测试具体从哪些方面考虑?

15.17  H5界面怎么测试

15.18  你们之前是用什么手机什么版本做兼容性测试的?

15.19  Android跟ios测试有什么区别?

15.20  小程序怎么测试

15.21  公众号,小程序比app更火,你怎么看

15.22  微信开发者工具如何使用

十六、安全测试

16.1  安全测试怎么测试?

16.2  appscan的原理是什么

十七、 python编程

17.1  一个变量没有定义报什么错误

17.2  列表与元组的区别

17.3  python序列有哪些?

17.4  Python区分大小写吗?

17.5  如何获取字典中的所有键?

17.6  列表和字典有什么区别?

17.7   截取字符串里面部分字符怎么做?

17.8  如何遍历列表,字典?

17.9  列出5个 python标准库?

17.10  字典如何删除键和合并两个字典?

17.11  python实现列表去重的方法?

17.12  python内建数据类型有哪些?

17.13  列出 python中可变数据类型和不可变数据类型,并简述原理?

17.14  如何将字符串转换为小写?

17.15  现场出了一个100-10000之间,打印出各位数字相加能被15整除的整数,每行打印十个

17.16  然后现场出了一个 Python题目1689年到2019年打印出所有的闰年

17.17  打印九九乘法表

17.18  冒泡排序

17.19写一个程序进行货币间币值转换函数

17.20  回文数

17.21  python中生成随机整数、随机小数、0-1之间小数方法

17.22  fixture装饰器的作用与默认值

17.23  如何进行异常处理

17.24  类的继承与多态意思

17.25 json与字典的区别?

17.26  如何获取字典中的所有键?

十八、白盒测试

18.1 白盒测试怎么测


前言:

加班加点终于的把续集写出来了,这个系列的文字也快要结束了,铁子们还想要看哪方面的文字可以直接练习凡叔哦。

 Python自动化测试全栈+性能测试全栈+全套资料免费领取

十五、app测试

15.1  app测试你具体怎么做的?

对于App这块,我们一般首先都先做功能,先保证功能过关是第一位,对于功能这块的话,基本都跟Web端是一样的。

除了功能之外,公司还要求做了一些专项测试,像:安装,卸载测试,兼容性测试,稳定性测试,性能测试,弱网测试,交互性测试,都有测试过的,专项测试这块,我主要负责的是:兼容性测试,稳定性测试,性能测试,弱网测试,交互性测试,这是我这边负责的。

像兼容性测试,公司有提供了差不多了7-8款的真机,像:华为,小米,三星, vivo, oppo等这些主流的机型都在真机想有测试过,其他的机型,公司用的是云测,云测平台我们用的Testln这个平台,公司会给我们提供账号。

稳定性测试这块,用的 Monkey命令工具去测的,主要就是通过 monkey模拟用户发送一些伪随机时间,看app是否有Crash, ANR, Exception等现象,一般都是在晚上的时候去执行 monkey命令,然后出报告,分析性能测试,用的GT工具结合 Android Studio工具去检测app在手机上运行的时候的CPU,内存,电量,流量,启动时间,安装,卸载时间以及页面的响应时间。

弱网我们用的 fiddler工具去进行模拟的,模拟2G/3G/4G等弱网场景,看app在弱网情况,功能是否能正常使用。

交互性测试这块主要就是看app与其他应用程序之间的交互运行,以及与系统应用程序之间交互运行,来回进行前后台切换,看是否会出现闪退,数据丢失等现象。

15.2  Web测试与app测试区别?

其实功能这块,app测试与Web测试基本是一样,没有什么区别。(需求分析->提炼测试点>编写测试用例->执行用例->提Bug->复测,回归)等等的。

区别主要在于,web端是B/S架构的,App是C/S架构的,由于架构的不同,所以web端一般服务器更新的时候,客户端不需要更新,

因为它是通过浏览器来访问的,服务器更新了,客户端也更新。app服务端要更新,同时客户端软件要进行升级更新,才算是新的版本。

对于app测试来讲,除了功能之外,更多的还要考虑一些专项测试,比如:

Web测试是基于浏览器的所以不必考虑安装卸载。而app是客户端的,则必须测试安装、更新、卸载

兼容性、稳定性、性能测试、弱网测试、交互性测试等等。

还有就是,对于兼容性这块,Web端主要考虑是:不同的浏览器,不同的操作系统的兼容性接口。

而对于app测兼容性更多的考虑:不同的品牌机型,不同操作系统,不同手机屏幕大小,屏幕分辨率

性能方面也会有所不同:Web端性能测试更多关注的后台的性能,

app的性能测试关注的是手机本身的资源的性能问题:

比如:CPU内存,电量,流量,页面加载响应时间,软件启动时间等等

他们两个之间的区别差不多就这些吧。

15.3  常用的adb的命令?

adb start-server

adb kill-server

adb devices

adb -s设备 ID install路径/包名.apk

adb -s设备 ID shell pm list packages -3

adb -s设备 ID uninstall com.baidu.BaiduMap

#电脑端文件传输到手机上

adb -s设备 ID push D:\路径文件\ sdcard\路径\

#手机上的文件传输到电脑端

adb -s设备 ID pull \sdcard\路径\文件\D:\路径

#查看手机端的日志

adb logcat

adb logcat -d #打印完所有的日志文件之后,退出shell终端

adb logcat -c #清除手机系统运行生成的日志文件

adb logcat -v time #需要打印日志详细时间的简单数据

adb logcat -d *:E #需要打印级别为Eror的信息

adb logcat -d *:E>D:\hello.log

adb logcat -d *:l>D:\hello555.log #打印1以上级别的所有日志信息

adb logcat-d *:E | findstr cn.csdn.activity > D:/hello_error2.log

查看所有的手机软件包名  adb shell pm list package  

查看第三方的手机软件包名 adb shell pm list package -3

查看后台运行的包名 adb shell am monitor

查看手机当前使用的内存情况,各个线程的内存占用情况 adb shell dumpsys meminfo

查看手机的电池信息 adb shell dumpsys batteryinfo

查看系统资源状态 adb shell top

adb命令录屏:

adb shell screenrecord --time-imit 10/sdcard/demo.mp4 (10表示录制10秒,默认是180秒)

15.4  adb的作用的?

adb其实是一个 android调试桥,主要是用来监控手机设备的,实现手机端与电脑端的通信,通过adb来实现对手机的管控。比如:通过adb安装软件卸载软件,通过adb可以查看手机的资源使用情况,可以查看cpu内存等资源。还通过adb实现手机端与电脑的文件的传输通过adb查看手机端app运行的日志,通过看日志来分析具体问题。

15.5  App兼容性测试怎么做的?

像兼容性这块当时,我们主要用真机测试为主,公司当时使用提供大概7、8款机型吧,

我记得像华为荣耀系列两款,例外小米机型有选择2款,还有就是像 vivo, oppo当时都有测过,

对了还有三星等这些系列机型上都有做过真机测试。

真机这块,像系统版本主要覆盖的系统其中6.0\7.0\8.0为主, 5.0以下公司当时都不要求测,

对于其他的机型覆盖不到位,我们都是通过云测进行覆盖的,云测这边,我们公司用的 testin这个云测平台,公司有提供账号给我们只要登录上去,然后把apk上传上去,之后选择机型要测试的机型,当时我们在云测测试有差不多有60款多款机型吧,主要是市面上流程的主流机型,每个系列都会选个几款,如果用真机测了的就不在选择了,然后做一些相关的配置,云测平台上主要帮我们做了智能遍历,安装,启动,运行,卸载,初始化, Monkey测试相关的测试,不过 monkey一般都是通过真机测的,云测平台没有测过,配置好了之后,提交测试就可以了,一般提交测试之后,需要几个小时就会出报告。然后分报告,主看遍历,安装,启动,运行,卸载,初始化相关哪些机型有出问题,对于出问题的机型,一般会先补测一下,如果还有问题,我们项目组一般会向公司申请真机再真机进行复测,如果真机复测有问题,就通过利用 adb logcat查看错误日志,分析具体的问题所在。

其实我们做兼容性测试主要就是看软件在不同机型,不同系统版本下能不能正常安装,卸载是否能正常启动,运行,初始化,我们都把各个功能都进行运行一遍,主要就是跑下主流程,看有不有问题。例外,就是看软件在不同屏幕大小,不同的分辨率的手机下显示是否正常,有不有拉伸,显示不全,或者显不清晰的等问题。

当时我们兼容性就这么做测。

15.6  App稳定怎么做的? Monkey怎么用(App稳定测试)?

稳定性这块,我们当时用的是SDK自动的一个 Monkey工具进行测试的,其实 Monkey工具主要通过模拟用户发送伪随机时间去操作软件,通过执行 Monkey命令,它会自动出报告,执行测试大概在10万次,每个动作的间隔时间250ms,主要就是看软件长时间,随机乱操作的情况,是否会出现异常,闪退,崩溃等现象。

一般我都是在下班的时间晚上时间执行 Monkey命令,并把生成的报告导出到电脑端,大概需要6、7小时,第二天早上看报告,分析报告,如果出现问题,一般利用上次执行的那个种子值,再进行执行命令进行复测一下,

像 monkey命令:

adb shell monkey -p com.xy.android.junit -s 种子值 --throttle 250  --ignore -crashes --ignore -timeouts -monitor-native-crashes -v -v 100000 > E:\monkey_log\monkey_log.txt

这里主要关注几个点,1、指定种子值  2、忽路一些异常,保证能正常执行完成  

3、设置间隔时间  4、配置一些时间比例   5、然后就是执行的次数。

对于报告怎么分析这块,主要看有不有 CRASH(崩溃),ANR(超时无响应), Exception(异常)等的情况像看有不有空指针异常( NullPointException)啊,0OM等现象啊等等,

找到 CRASH崩溃ANR超时无响应 Exception异常的位置,看出现错误的上一个动作是什么,什么做了什么动作导致错误出现。异常信息会详细的指出哪个 Activity出现了问题,甚至于哪个函数出问题了,具体哪个位置。然后把报告中出现的日志信息截图发给开发,开发修复完成之后,我们会根据种子值在进行复测一下。

稳定性这块我们当时就是这么做的。

我在运行 monkey发现过很多的问题我就简单的说几个问题,举个例子在查看 monkey运行日志中

  1.  com.androidserver.am.NativeCrashListener.run(NativeCrashListener.java:129)

属于本地监听代码导致的崩溃,手机监听代码导致的崩溃,他是手机产生的原因,不是代码的原因不做处理。

  1. ∥Short Msg:java.lang.IllegalArgumentException传参异常:需要一个stng类型,给我一个int类型
  2. ∥Short Msg:java.lang.NullPointerException 空指针异常
  3. ∥Short Msg:Native crash 本地代码导致的奔溃
  4. (com.koudaizhekou.tbk/com.uzmap.pkg.EntranceActivity) 超时无响应

等等等……

15.7  App弱网测试怎么做的 ?

弱网测试这块我用的 fiddler工具做的,通过 fiddler实现延迟发送数据或接收的数据的时间来限制网络的下载速度和上传速度,从而达到模拟2G\3G\4G的移动网络的弱网场景,还有设置随机数来模拟网络不稳定的情况。

操作:首先保证手机与电脑在同一个网络,然后在手机上,设置代理服务器,指定服务器为装了 fiddler的电脑的ip地址,端口为8888然后就是在fiddler上设置上行,下行速率,实现对发送,接受数据的进行网络延迟具体在 fiddler的菜单上有一个Rules -> CustomizeRules,打开 Fiddler的 ScriptEditor文件,在其中找到 m_SimulateMode标志位,然后修改上行,下载的网络延迟时间即可,具体设置参数的值SE那边有给到一个参考文档

2G上行440,下行400, 3G上行100,下行100

模拟网络不稳定的情况

生活当中,网络并不是固定不变,一般处于不稳定的状态,我们这个时候编写随机数来模拟网络不稳定的情况

1,在 Customize Rules文件中,写一个随机的数

static function randlnt(min,max){

return Math.round(Math,random()*(max-min)+min);

}

2,在 Customize Rules文件中,限制网络的参数修改成随机数

if (m_Simulate Modem){

// Delay sends by 300ms per KB uploaded.2kb/s

oSession["request-trickle-delay"]=""+randlnt(1,20000);

// Delay receives by 150ms per KB downloaded.2.5kb/s

oSession["response-trickle-delay"]=""+randlnt(1,20000);

3,重新勾选

Rues-> Performance->勾选 Simulate Modem Speeds

弱网测试,看我们软件在弱网场景下是否会有丢包的现象,丢包率是否严重,页面是否能正

常展示,是否有空白页,数据是否有丢失,页面加载速度是否会严重影响用户体验。

15.8  App的性能测试

内容要点:

指标:cpu,内存,电量,流量,FPS,

怎么测?  cpu,内存,流量 android studio

cpu不能超过10-20%   普通业务要求在10%左右,核心的业务,尤其是一些绘图的业务,

要求在20%左右。指标:SE给到,竞品分析

内存主要看有内存泄露的情况,怎么看?

流量:一刷新使用软件,流量会逐渐增加

具体操作:

1,对于cpu内存,流量这3个指标,我们用的 android studio来检测的,结合sdk里面的一个插件 android Monitor,它可以帮我们试试检测cpu,内存,流量的曲线图

2,这里我们需要开启手机端的开发者模式,还有usb调试模式,例外,开发给我们提供的apk包,必须需要开启 debug模式,开发开启之后打包给测试人员就可以了

3,主要就是对我们需要测的功能进行操作,然后实时查看图表,看他是否有内存oom内存泄漏,cpu是否使用过高,是否有内存抖动,造成的卡顿等现象,是否有图片过大造成流量使用过大这些问题等,是否有频繁使用流量,没有使用缓存等问题

4,像fps帧率是通过adb命令来测的,还有电量我们当时用的是手机自带的一个第三方软件测的?

Python自动化测试全栈+性能测试全栈+全套资料免费领取Python自动化测试全栈+性能测试全栈,全套资料-功能-接口-自动化-性能-测试开发-面试全套资料全套资料https://mp.weixin.qq.com/s/nLyx6PEOqGCEnF-1kc-IfA

15.9  对于内存具体怎么测呢?

对于内存其实主要看有没有内存泄漏的问题

具体我们是这样做的:

1、首先我会频繁操作同一个业务,看他的内存和cpu是否逐步增长,最后稳定在一个固定大小的范围,如果在频繁操作同一个业务,内存一直在增长,可能存在有内存泄漏问题,尝试手动GC(手动回收内存,因为内存泄漏,系统已经回收不了,所以尝试下手动回收内存),内存明显或者断崖式的下降,基本就可以判断有内存泄漏的现象

再通过 damp java这个去分析,分析结果如果出现 leaked,就说明有了,里面可以找到是哪个对象,截图提bug,

2、使用app过程中,内存一直在增长,那基本可以判断有内存泄漏的情况,还有看是否有内存抖动的现象:这里主要原因还是有因为大量小的对象频繁创建,频繁的回收内存,会导数cpu频繁使用,造成cpu使用过大,造成app卡顿,导致内存碎片,内存泄漏等问题

15.10  对于CPU具体怎么测呢?

cpu主要就是看有没有过高,有没有超过我们的指标范围

具体是这样做的:

首先频繁使用某一个业务,cpu是否逐步增长,最后稳定在一个固定大小的范围,对于一把基础业务,对cpu要求不高的业务,cpu不能超过10%,对于cpu要求比较高的,比如某个业务需要加载地图,大量的图片,视频等的业务,或者需要做大量的数据统计分析的业务,

我们要求cpu不能超过20%

15.11  对于流量具体怎么测?

a,首先看在没有操作功能业务的情况下,没操作流量不应该有,或者是流量使用不是很大,就几KB因为app肯能实时刷新消息,比如如果一个登陆,你就使用1M的流量,查询个图片使用3-4M的流量图片,这个肯定流量使用过大

b,频繁操作同一个业务,流量一直在刷,说明没有使用缓存

如何处理:图片过大处理方法:图片压缩传输,要么降低图片分辨率,

15.12  对于FPS具体怎么测?

对于Fps帧率的问题,我们当时用的adb命令来测的

知识点拓展: Android设备的屏幕刷新率为60帧/s,要保持画面流畅不卡顿,要求每一帧的时间不超过1000/60=16.6ms,这就是16ms的黄金准则,

  1. 打开手机:开发者选项-> profile GPU rendering ->

 in adb shell dumpsys gfxinfo(开启GPU渲染模式)

b. 操作要测试的apk

C. cmd窗口输入命令: adb shell dumpsys gfxinfo 包名

d. 得到一个矩阵数据,计算矩阵中帧率大于16的点所占比例,即为卡顿比

e. 通过execl进行表格处理可以直观的查看软件的流畅度

15.14对于电量具体怎么测?

电量这一块,我们当时用的手机自带的第三方软件测的

15.15  App交互性怎么做的?

交互性这块,主要从以下几个方面去考虑测试的是:

  1. 看我们软件与其他应用软件的同时运行来回切换是否有问题
  2. 看软件切换到后台一段时间,再切换到前端,或者前后台来回切换,

软件是否会有异常,比如:进程被杀死,或者切换到前端页面出现问题,或者页面数据丢失等等。

  1. 看软件被在使用过程中被其他应用中断,或者其他意外情况中断,比如:来电,来短信,闹铃,低电量测试等,还要注意手机端硬件上,如:待机,锁屏,插拔数据线,耳机等操作不会影响客户端。

15.16  App的安装,卸载,更新测试具体从哪些方面考虑?

安装测试:

  1. 正常安装测试,检查是否安装成功安装完成后,能否正常启动应用程序
  2. 是否支持第三方安装,比如豌豆荚及91助手等工具可以正常安装及卸载程序
  3. 检测在各大手机市场上下载,并直接安装,看是否能正常安装,安装完成之后,能否能正常启动。
  4. 检测APP版本覆盖测试(先安装一个低版本,不卸载。然后再直接安装一个高版本,看是否会覆盖 低版本。(直接覆盖是否成功,卸载之后,再下载新版本,看是否能安装成功)
  5. 检测版本回退(先装高版本,不卸载,直接再重新安装一个低版本,是否会覆盖高版本。
  6. 检测在内存不足的情况下,去安装软件,系统应该会有提示
  7. 在安装过程中,所有的提示信息必须是英文或者中文,提示信息中不能出现代码符号、乱码等。
  8. 检测在未允许外来程序的安装的情况下,安装软件是否会有提示信息
  9. 如果软件需要用到网络,GPS定位,联系人等其他系统应用程序的时候,安装App会有相应的提 示。在不允许的情况,软件是否能正常使用。
  10. 安装完成后,是否对其他应用程序造成影响。
  11. 多进程进行安装,是否安装成功。(同时安装多个软件,是否能正常安装)
  12. 在不同型号、系统的手机进行安装。(兼容性)
  13. 安装过程中,取消安装,再次重新安装,是否能正常安装。
  14. 安装完成后,检查手机桌面能否添加快捷方式。(是否有快捷图标生成。)

卸载测试:

  1. 正常卸载,软件是否能正常被卸载,相应的桌面图标是否会删除
  2. 卸载之后,对应的文件是否删除干净,进入安装位置,去看下是否有残留的文件
  3. 程序正在运行的时候,卸载程序,是否能正常卸载
  4. 卸载过程中,取消卸载,看是否正常退出卸载程序,检查软件是否还能继续正常使
  5. 在没用使用程序时,删除目录文件,看程序是否能运行。
  6. 不同系统、硬件环境下进行卸载
  7. 卸载成功后,是否对其他程序有影响
  8. 卸载后再次安装,是否正常使用
  9. 在卸载过程中,所有的提示信息必须是英文或者中文,

提示信息中不能出现代码是否有相关的提示信息

  1. 卸载过程中,出现意外(比如手机关机,没电,查看信息,接打电话),程序是否还能运行
  2. 在卸载过程中,突然重启设备,再次访问程序,是否还能运行。

更新测试

  1. 当客户端有新版本时,提示更新
  2. 非强制更新,可以取消更新,旧版本正常使用,下次使用软件时,仍然会出现更新提示
  3. 强制更新,强制更新而用户没有更新时,退出客户端,下次启动,依然提示更新
  4. 不卸载,更新,检查是否可以更新
  5. 不卸载更新,检查资源同名文件如图片等是否更新成最新版本。
  6. 非wifi网络下,提示是否更新,取消就加入待下载,wifi下自动更新。

15.17  H5界面怎么测试

基本功能测试:(浏览器、微信内置浏览器)

登陆

目前H5与 native各个客户端都做了互通,所以大家在测试的时候要注意两点:

A、若客户端已登录,那么进入H5后仍然是登录状态

B、若客户端未登录,进入H5,点击对应按钮OR链接,如果需要登录,须拉起 native登录。若取消登录,是否可再次拉起登录,或者停留在的页面是否有对应的登录提示.。

ps:本次测试过程中就发现,第一次点击链接,可以拉起登录,第二次却不能

翻页

遇到翻页加载的页面,需要注意内容为1页或者多页的情况。

A、数据分页加载时,注意后续页面请求数据的正确。

ps:这个需要注意在快速操作场景中,请求页数是不是依次递增,快速操作(如第1页尚未 loading出来的时候仍然继续上拉操作)时是否发出去对应的请求了。

刷新与返回

A、下拉刷新是否仍然处于当前页面。

B、用户主动点击刷新按钮是否仍然处于当前页面

C、点击返回与back键,回退页面是否是期望页面

ps:本次测试过程中就发现,mtop接口请求成功,但是data内无数据时,返回到的就是个空白页面,无法正常发送请求。

H5适配相关

H5的适配其实比客户端的相对来说,要少一些,手机品牌之间的差异不大,所以不用太多关注,最容易出现问题的是 android2.3系统,这个要特别关注下:

  1. 大屏(如720*1280,重点关注页面背景是否完全撑开页面,刷新是否有抖动)

小屏手机(如320*480,重点关注下弹框样式和文案折行)

B. android2.3、android4.X随机找一个即可

C. ios5、ios6、ios7

体验相关

资源相关

A、页面中有图片的话,淘宝那边建议图片一般不大于50kb,本着一个原则,尽量缩小图片

B、资源是否压缩、是否通过CDN加载

C、如何保证二次发布后有效更新。

流量

A、对于一些不会变化的图片,如游戏动画效果相关图片,不需要每次都请求的东西,做本地缓存

B、数据较多时是否做了分页加载。

页面展现时间

A、关注页面首屏加载时间

页面提示

A、弱网络下,数据加载较慢,是否有对应的 loading提示

B、接口获取异常时,提示是否友好

C、刷新页面或者加载新内容时页面是否有抖动

手机操作相关

A、锁屏之后展示页面

B.回退到后台之后,重新呼出在前端展示

15.18  你们之前是用什么手机什么版本做兼容性测试的?

有用到三星note5 Android 6.0.1 三星s6 Android 6.0.1

红米1s Android 5.1     小米5 Android 7.0

华为mate9 Android 6.0 乐视2 Android 6.0

华为mate20 Android 9.0 三星s8 Android 8.0

iphoneos ios 10.3.2        iphone ios 10.0.2

iphone ios 8.4.1 iPhone X ios 11.0

15.19  Android跟ios测试有什么区别?

Android和ios测试的共同点都需要进行界面测试、功能测试、兼容性测试、网络测试、交互性测试、易用性专项测试、异常测试、安全专项测试以及权限测试。不同的是 Android测试除了以上的测试之外还要用 monkey进行稳定性专项测试以及用 emmagee或者gt进行性能专项测试。los是用itools工具对功能进行测试:安装、传输文件以及查看日志。

从操作系统,安装卸载,按键操作,开发语言这几个方面去区分操作系统: android操作系统较多,iOS较少只能升级不能降级,并目新的版本的资源库不能完全兼容旧版中系统中的应用,如果低版本应用调用了高版本的资源库,可能会导致系统崩溃。

安装卸载测试,应用发布后:下载安卓包的平台和渠道很多:豌豆英、应用宝、360手机助手等;

iOS主要有 App store、 iTunes,安全性会更高点

本地测试:安卓手机可以通过扫码或者直接安卓APK包安装测试包;iOS要安装测试包必须绑定手机的id(证书)才可以安装ipa测试包

按键操作测试:安卓手机针对每一款手机有不一样的操作;苹果手机操作习惯单一

开发语言:虽然同样的业务安卓和iOS的展示形式和业务一致,但是底层全完不一样,安卓的应用是有java语言实现的,iOS用OC实现。

15.20  小程序怎么测试

1,小程序测试(多用第一人称,口语化表达,多讲一些,讲细一些,先宏观,在微观)参考面试问题STAR法则:

我们原来主要测试,几个方面,界面测试,功能测试,交互性测试,兼容性测试,安全测试,

易用性测试,异常测试,权限测试

界面测试:主要是测试跟界面的原型图是否一致,同时我也要考虑不同屏幕大小跟分辨率

功能测试:跟所有的功能测试都是一样的,还有小程序有位置功能,检查下,微信小程序,附近中是否能找到对应小程序,使用小程序是否记录,

交互性测试:要考虑跟微信的功能交互使用,比如说一些,卡包,支付等功,考虑跟手机固有功能交互,比如说来电,短信等

兼容性测试:考虑跟微信不同版本的兼容,还有同时还要考虑不同手机厂商跟手机型号兼容,还要考虑当微信清除缓存后,小程序还能否继续使用

安全测试:测试数据加密,包括sql与xss脚本攻击这块

易用性测试:考虑功能是否方便还用

异常测试:考虑断网,手机重启,关机的情况

权限测试:小程序继承微信权限,测试手机对微信权限,还要考虑微信对小程序授权,是否允许操作

原来我们测试阶段,上传小程序到微信小程序平台,上传到开发版本里面,通过扫描二维码去下载小程序进行测试,

上线后,我们也要测试下,微信搜索小程序中能否搜索的到

15.21  公众号,小程序比app更火,你怎么看

小程序有安装包,一般控制在1M以内

1,基于微信大的平台,有流量的入口

2,不需要安装,操作更加方便

15.22  微信开发者工具如何使用

原来我们的下载一个微信开发者工具,导入开发给的小程序代码包,在输入开发给予的

appid,调试与测试小程序代码包,

如果真机测试,也可以扫描开发在微信开发者工具生成的二维码进行测试

十六、安全测试

16.1  安全测试怎么测试?

安全测试我们常用的方法是:1,sql 注入   2,xss脚本攻击   3,数据加密   4,权限控制

运用扫描工具 appscan扫描web系统。扫描app的一般用腾讯 wettest等平台测试测试,

前端(web)时我们首先检查检查一下用户的感敏信息有没有进行加密显示,通过Fiddle抓包工具检查一下用户的感敏信息有没有进行加密后传输如:用户密码,相应的银行卡,个人信息等,再到日志中搜索关键信息,搜索到,就泄密,存在安全漏洞,数据库中是否做了加密处理。还有就是把发送请求的数据篡改例如:打开fiddle工具,设置过滤器,设置断点把商城里的支付订单的1000完金额修改成1块钱,再放行发送数据,看是否,支付1块钱,订单支付成功,如果成功则是bug,预期结果是支付金额不对才行,用sql语句注入和xss脚本攻击,把sql语句或xss脚本编缉成csv文档通过 jmeter 工具添加"CSV数据文件设置"来调用里面的语句来在所有的查询位置、所有的接口请求、url请求链接参数中,进行sql语句注入或xss脚本攻击:模拟sql语句xss脚本攻击数据库,看它是否把sql注入代码或xss脚本当成字符处理,如果不是就是bug,再看功能不能正常使用、系统是否崩溃,错误弹出框,界面是否变形。还有在所有可以保存的地方,都添加xss脚本攻击代码,看看是否出现异常。权限控制(用户的校验)校验用户安全认证信息是否正确,如没有权限的界面不能进入,不能提供操作入口或不能通过url直接去访问:例如;把所有需要权限的界面,全部复制一份出来然后退出用户再通过url链接去访问功能如果可以访问,就是bug,如有提示登录,属于正常。还有登陆用户再退出用户后,点击浏览器的后退不能进入原来的界面。

通过 appscan扫描工具去扫描,我们般是这样操作的;

  1. 启动软件进入主界面->选择创建新的扫
  2. 在弹出的新建扫描对话框中选择常规扫描;
  3. 在弹出的扫描配置向导对话框中选择 AppScan(自动或手动),点击下一步;
  4. 在此页面中填写需要扫描系统的同址,点击下一步:
  5. 选择登陆方式为记录,点击下一步;
  6. 完成系统登录操作后,关闭浏览器选择登录管理中的“详细信息”;

7、在“详细信息”中,取消“激活会话中的检测”,同时在“登录会话标识中”,对变量参数值进行跟踪以确保参数的正确处理而获得系统访问权限;

8、把密码修改页面URL、用户权限删除URL等页面添加至排除测试范围,防止 Appscan的请求产生相应影响(防止 Appscan修改密码或删除用户帐号);

9、在“自动表单填充中,填入用户名和密码参数,并填写参数值,其余不做修;

10、如果测试过程中,应用服务出现性能响应过慢的问题,适当调整测试线程数为2~5;

11、测试策路选择为严重性”进行过滤只勾选关注的严重性级别,把“高”、“中”和低”选上,

13、点击确定按钮,结束扫描配置工作;

14、点击扫描按钮,选择“仅探索”, Appscan开始执行探索工作;

15、探索自动结束后,点击“手动探索”按钮,此时,在弹出的E浏览器窗口中登录系统,手工的任意访问系统页面(1-10个),关闭浏览器;

16、在弹出的参数添加窗口中,点击确定按钮”

17、点击扫描按钮,选择“完全扫描”, Appscan开始执行测试工作;

18、测试执行结束后,点击报告按钮,选择关注的测试结果信息,勾选“报告内容”里的所有勾选;

19、保存报告,保存类型建议选择为html;然后分析报告。(只需了解面试尽量不要提及)

16.2  appscan的原理是什么

对一个综合性的大型网站来说,可能存在成干上万的页面。以登录界面为例,至少要输入用户名和密码,即该页面存在两个字段,当提交了用户名和密码等登录信息,网站需要检查是否正确,这就可能存在一个新的检查页面这里的每个页面的每个参数都可能存在安全漏洞,可能成为被攻击对象。 AppScan正是通过按照设定策略和规则,对Web应用进行安全攻击,以此来检查网站是否存在安全漏洞。

在使用 AppScan的时候,通过配置网站的URL网址, Appscan会利用“探索”技术去发现这个网站存在多少个目录,多少个页面,页面中有哪些参数等,即探索出网站的整体结构通过“探索”可确定测试的目标和范围,然后利用 AppScan的扫描规则库,针对发现的每个页面的每个参数,进行安全检查。

简言之, APPScan的工作原理如下:

  1. 通过“探索”功能,利用 Http Request和 Response的内容,爬行出指定网站的整个Web应用结构。

2) AppScan本身有一个内置的漏洞扫描的规则库,可随版本进行更新,从探索出的url中,修改参数or目录名等方式,构造不同的url对照组向服务器发送请求or攻击。

3) 根据 Http Response返回的内容,和正常请求所返回的响应作对比,是否产生差异性,而这种差异性又是否符合扫描规则库的设定规则,以此来判断是否存在不同类型的安全洞。

4) 若 APPScan可判断存在安全漏洞,则对这些漏洞的威胁风验给出说明,进行严重程度提示,并给出修复的建议和方法,以及漏洞发现的位置提示。

十七、 python编程

17.1  一个变量没有定义报什么错误

一般在 python中会有红色的波浪线标出来要是运行后,就直接会报变量没定义的错

NameError: name'i' is not defined

17.2  列表与元组的区别

他们最大的区别

  1. 列表可以修改,元组不可以修改,列表就相当于一个动态数组,而元组是一个静态数组。
  2. 从设计上说,列表是用来保存多个相互独立对象的数据集合,而元组设计的初衷就是为了描述一个不会改变的事物的多个属性。
  3. 然后列表的声明用中括号元组的声明用小括号,并且元组只有一个元素的时候需要在后面加逗号。

 Python自动化测试全栈+性能测试全栈+全套资料免费领取Python自动化测试全栈+性能测试全栈,全套资料-功能-接口-自动化-性能-测试开发-面试全套资料全套资料https://mp.weixin.qq.com/s/nLyx6PEOqGCEnF-1kc-IfA

17.3  python序列有哪些?

有序序列:字符串,元组,列表

无序序列:字典,集合

序列特点:

---都可以通过索引得到每一个元素

---默认索引值总是从零开始

---可以通过切片的方法得到一个范围内的元素的集合

---有很多共同的操作符(重复操作符、拼接操作符、成员关系操作符)

17.4  Python区分大小写吗?

python中是区分大小写的

17.5  如何获取字典中的所有键?

我们可以直接遍历这个字典,用keys()函数取出所有的键

for key in dict.keys()

如果说要取出字典中所有的键和对应的值,我们用items0函数

for key,value in dict.items()

17.6  列表和字典有什么区别?

1) dict生成慢,查找快,list生成快,查找慢,

2) 另外list是有序的,dict是无需的,

3) list通过索引访问,dict使用key访问,

17.7   截取字符串里面部分字符怎么做?

1) 一般就是在定义的这个字符串变量后面用中括号[],然后里面填写需要截取的素引数

print(str[2:1)

print(str[:2]) # 从开始到2)

print(str[2:5])

print(str[:])

  1. 利用字符串的中的内置函数 split()

str1 = ‘2018-11-20 14:40:00’

print("年份: "str1.split(‘’)[0].split(‘-’)[0])

print("月份: "str1.split(‘’)[0].split(‘-’)[1])

print("日期: "str1.split(‘’)[0].split(‘-’)[2])

print("时: "str1.split(‘’)[1].split(‘:’)[0])

print("分: "str1.split(‘’)[1].split(‘:’)[1])

print("秒: "str1.split(‘’)[1].split(‘:’)[2])

17.8  如何遍历列表,字典?

1) 列表遍历

list=[3,4,6,89]

for i in range(0,len(list)):

print(‘%d’%list[i])

for i in list

print(i)

2) 字典遍历

dict ={‘name’:’jason’,’pwd’:’123456’}

for key in dict.keys():

print(dict[key])

for value in dict.values():

print(value)

for key,value in dict.items():

print(key,value)

17.9  列出5个 python标准库?

os: 提供了不少与操作系统相关联的函数

sys: 通常用于命令行参数

re: 正则匹配

math: 数学运算

datetime: 处理日期时间

17.10  字典如何删除键和合并两个字典?

字典dic1={‘name’:’laowang’,’age’:’18’},

dic2=(‘name’:’Xiaohua’},删除dic1中键名为’name’的键,并合并dc1和dic2

  1. 删除键名为name的键

dic1={‘name’:’laowang’,’age’:’18’}

del dic1[‘name’]

  1. 合并两个字典,使用字典的成员方法 update()

dic2.update(dic1)

print(dic2)

17.11  python实现列表去重的方法?

第一种方式:

#encoding = utf-8

import time

time_start=time.time()

print u"列表去重的七种方法"

prnt u"第一种测试方法"

repeat_list=[1,2,4,1,5,1,2,5]

result=[]

for i in repeat_list:

if i not in result;

result.append(i)

print u"第一种去重结果:", result

第二种方法:

repeat_list=[1,2,4,1,5,1,2,5]

print u"第三种去重结果:",list(set( repeat_list))

17.12  python内建数据类型有哪些?

整型 -- int

布尔型 -- bool

字符串 -- str

列表 -- list

元组 -- tuple

字典 -- dict

17.13  列出 python中可变数据类型和不可变数据类型,并简述原理?

1) 可变数据类型:列表list和字典dict;

2) 不可变数据类型:整型int、浮点型float、字符串型 string和元组 tuple

"python中的不可变数据类型,不允许变量的值发生变化,如果改变了变量的值,相当于是新建了一个对象,而对于相同的值的对象,

在内存中则只有一个对象,内部会有一个引用计数来记录有多少个变量引用这个对象;可变数据类型,允许变量的值发生变化,即如果对变量进行 append、+=等这种操作后,

只是改变了变量的值,而不会新建一个对象,变量引用的对象的地址也不会变化,不过对于相同的值的不同对象,在内存中则会存在不同的对象,即每个对象都有自己的地址,

相当于内存中对于同值的对象保存了多份,这里不存在引用计数,是实实在在的对象。

17.14  如何将字符串转换为小写?

S = "What is Your Name?"

print(s.lower())  #返回小写字符串

print(s.upper()) #返回大写字符串

print(s.capitalize()) #字符串首字符大写

print(s.title()) #每个单词的首字母大写

pint(s.swapcase()) #大小写互换

17.15  现场出了一个100-10000之间,打印出各位数字相加能被15整除的整数,每行打印十个

def chu(strum,endnum)

sum = 0

for i in range(strum,endnum):

if i%15 == 0;

sum=sum+1

print(i,’,’)

if sum%10==0

pint(‘/n’)

17.16  然后现场出了一个 Python题目1689年到2019年打印出所有的闰年

for i in range(2000,2501):

if i%4==0 and i%100!=0 or i%400==0;

print(i)

17.17  打印九九乘法表

def print99():

for i in range(1,10): #i=0表示打第1行  i=1表示打第2行  i=2表示打第3行

for j in range(1,i+ 1):

print(‘%d*%d=%d\t'%(j,i,i*j),end="")

#换行

print(‘’)

17.18  冒泡排序

list=[2,1,6,3,8]

def bubble_sort(list);

for i in range(0,len(list)-1):

for j in range(0,len(lists)-i-1):

if list[j] > list[j+1];

list[j],list[j+1] = list[j+1],list[j]

return list

另外自带函数排序: list.sorto    默认升序排列

list.sort(reverse=True)  降序排列

17.19写一个程序进行货币间币值转换函数

说明:其中人民币和美元间汇率固定为:

1美元=678人民币。程序可以接受人民币或美元输入,转换为美元或人民币输出。

人民币采RMB表示,美元采USD表示,符号和数值之间没有空格

示例:输入:USD:1  输出:RMB:6.78

while 1:

xuanze= int(input("请选择:1美元转化为人民币\t2.人民币转化为美元\t3结束"))

if xuanze == 1:

USD = float(input("输入美:USD: "))

if USD < 0:

print("你输入的数小于0")

break

usd_rmb = USD * 6.78

print("输入:USD:1  输出:RMB:%f" %(usd_rmb))

elif xuanze ==2;

RMB= float(input(输入人民币:RMB:"

if RMB <0;

print("你输入的数小于0")

break

rmb_usd= RMB/6.78

print(输入:RMB:1 输出:USD:%f" %(%usd_rmb))

elif xuanze ==3;

break

else;

print("没有选择美元或人民币")

except;

print("你输入错误,请输入数字")

17.20  回文数

num = input(‘Num:’)

if num == num[::-1];

print("回文数")

else:

print(不是)

17.21  python中生成随机整数、随机小数、0-1之间小数方法

import random

#生成1到100之间的随机整数

print(random.randint(1,100))

#生成0-1之间随机的小数

print(random.random())

#生成随机小数, randn(3)代表生成三个

print(np.random.randn(3)

17.22  fixture装饰器的作用与默认值

可以使用此装饰器(带或不带参数)来定义 fixture功能。 fixture功能的名称可以在以后,使用引用它会在运行测试之前调用它:test模块或类可以使用 pytest.mark.usefixtures

(fixturename标记。测试功能可以直接使用 fixture名称作为输入参数,在这种情况下,夹具实例从 fixture返回功能将被注入。

17.23  如何进行异常处理

try:

执行脚本代码

except:

脚本运行失败执行代码

断言错误(AssertionError)

其他类型错误(Exception)

else:

没有错误执行的代码

finally:

不管运行成功与否都运行的代码

17.24  类的继承与多态意思

1. 子类继承父类所有的方法

2. 父类不能继承子类

3. 子类再去修改父类里面的方法,子类都是新的方法(多态)

17.25 json与字典的区别?

区别总结:

定义上:字典是一种数据结构;

json是一种数据的表现形式,一种数据格式。

写法上:字典中的键key,只要是 hashable的数据类型即可;

但是json的键key(属性名称),必须是用双引号引起来的字符串。

17.26  如何获取字典中的所有键?

我们可以直接遍历这个字典,用keys()函数取出所有的键

如果说要取出字典中所有的键和对应的值,我们用items()函数

十八、白盒测试

18.1 白盒测试怎么测

原来工作中,没有涉及过,但是了解过

1、静态扫描

2、动态检查,构造测试数据去检查,语句覆盖---覆盖所有的代码

3、判定覆盖覆盖每个判定条件,每个判定都需要   真假值

4、条件覆盖每个条件  都需要一个真假值

5、判定/条件覆盖

6、组合覆盖,条件之间的组合场景   ---重点

7、路径覆盖----后面黑盒流程分析法   ---重点

 文章到这里就结束了,各位铁汁如果有什么觉得不对的可以发在评论区咱们来讨论哈,
听说关注我并三连的铁汁都已经升职加薪暴富了哦!!!!

猜你喜欢

转载自blog.csdn.net/csdnchengxi/article/details/124884232