zoukankan      html  css  js  c++  java
  • 测试工程师面试题

    选择题

    1. 进行兼容性测试的目的在于()
    • A、测试程序在不同的平台上可以正常运行
    • B、测试程序与平台上的其他程序可以同时正常运行
    • C、测试数据格式在不同应用程序之间可以通用
    • D、以上选项都正确
    1. 某个 Android 应用耗电问题严重,以下那个是可能的因素()
    • A、频繁 GC
    • B、开 GPS
    • C、网络连接
    • D、后台服务数量
    1. 以下那个是 Android APP 的测试工具()
    • A、QTP
    • B、Selenium
    • C、Robotium
    • D、Uiautomator
    1. 一个 Andorid 应用从按 home 键回到主屏,到重新启动 APP,其 activity 的生命周期执行顺序是()
    • A、onPause() -> onStop() -> onRestart() -> onStart() -> onResume()
    • B、onStop() -> onRestart() -> onStart() -> onResume()
    • C、onPause() -> onStop() -> onRestart() -> onResume()
    • D、onPause() -> onStop() -> onDestroy() -> onRestart() -> onResume()
    1. 以下哪个选项表示申请 GSM 网络的使用权限()
    • A、android.permission.CHANGE_WIFI_STATE
    • B、android.permission.ACCESS_WIFI_STATE
    • C、android.permission.ACCESS_NETWORK_STATE
    • D、android.permission.READ_SMS

    问答题

    1.请尝试简述 Android 四层架构,四层架构包含哪些?并挑选写出每层中一到两个部件。

    在这里插入图片描述

    2. 简述 Android 四大组件,并选择两个阐述生命周期。

    • Activity 活动
      应用程序中,一个 activity 通常就是一个单独的屏幕,它上面可以显示一些控件,也可以监听并处理用户的事件做出响应。
    • service 服务
      一个Service 是一段长生命周期的,没有用户界面的程序,可以用来开发如监控类程序。
    • Content Provider 内容提供者
      android平台提供了Content Provider使一个应用程序的指定数据集提供给其他应用程序。这些数据可以存储在文件系统中、在一个SQLite数据库、或以任何其他合理的方式,
      其他应用可以通过ContentResolver类(见ContentProviderAccessApp例子)从该内容提供者中获取或存入数据.(相当于在应用外包了一层壳),只有需要在多个应用程序间共享数据是才需要内容提供者。例如,通讯录数据被多个应用程序使用,且必须存储在一个内容提供者中。它的好处:统一数据访问方式。
    • BroadcastReceiver 广播接收器
      过滤外部事件做出响应。通知可以用很多种方式来吸引用户的注意力──闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。
      注意:
      • 生命周期只有十秒左右,如果在 onReceive() 内做超过十秒内的事情,就会报ANR(Application No Response) 程序无响应的错误信息

    3. 如何对一个 Android 应用进行稳定性测试?请简述测试思路,可能用到的技术手段和工具。

    使用 Monkey 进行稳定性测试,多次进行测试,对日志进行分析,保证程序在压力测试下不会崩溃。由于 monkey 是随机点击,所以有两个问题需要解决:

    • 会误触通知栏导致断网等其他操作,所以需要使用 simiasque屏蔽知栏;
    • 有时会跳到非测试 webview 页面,如广告页面或在同一页面点击过多不跳出,所以需要新增一个 monkey checker的线程来同步执行,加入跳出判断。

    4. 如何对 Android APP 进行性能测试?请简述测试思路,测试方法,分析思路。

    APP 性能测试主要为以下几个方面:

    • 专项测试
      通过 GT、Emmage、solopi 等工具查看并分析性能数据,或通过 profile 查看(需 debug 包)
    • 接口性能
      jmeter、loadrunner 进行接口压测/并发测试
    • 稳定性测试
      monkey 测试

    5. 请描述 OOM 的成因。

    Android 系统为每个应用程序设置了一个硬性的 Dalvik Heap Size 最大限制阀值,这个阀值在不同的设备上会因为 RAM 大小不同而各有差异。如果接近阀值,再次尝试分配内存,容易出现 Out Of Memory 的问题。

    • 加载大图/高清图/长图,需要先对 bitmap 进行压缩再放入 imageView 中显示;
    • Bitmap使用完没有释放,bitmap在使用完后要recycle后置null;
    • 文件流使用后没有关闭,文件流用后要close掉。

    6. 请描述 ANR 的成因。

    • KeyDispatchTimeout最常见的一种类型,原因就是 View 的点击事件或者触摸事件在特定的时间(5s)内无法得到响应;
    • BroadcaseTimeout原因是 BroadcastReceiver 的 OnReceive() 函数运行在主线程中,在特定的时间(10s)内无法完成处理;
    • ServiceTimeout比较少出现的一种类型,原因是 Service 的各个生命周期函数在特定时间(20s)内无法完成处理。

    典型的 ANR 问题场景:

    • 应用程序UI线程存在耗时操作。例如在UI线程中进行联网请求,数据库操作或者文件操作等;
    • 应用程序的UI线程等待子线程释放某个锁,从而无法处理用户的输入;
    • 耗时的动画需要大量的计算工作,可能导致CPU负载过重。

    7. Adb 命令是 Android 测试中的重要工具之一,请写出实现如下功能的命令。

    • 安装一个 xx.apk
      adb install xx.apk

    • 查看将运行日志保存至 PC 1.txt 文件
      adb logcat > 1.txt

    • A 为手机路径,B 为电脑路径,分别写出将 a.txt 文件从电脑传输到手机和从手机传输到电脑的命令。
      手机->电脑:adb pull /sdcard/a.txt /Desktop
      电脑->手机:adb push /Desktop/a.txt /sdcard

    • 编写一个 monkey 命令,要求对包名为 com.test.android 的应用进行 50000 次测试,要求限定操作间隔时间为 1000 毫秒,触摸事件百分比为 10%,seed 值为 20

    adb shell monkey -p com.test.android --pct-touch 10 --throttle 1000 -s 20 5000
    
    • 1

    8. 请说明 Android 多线程需要使用什么方法实现?

    • 继承 Thread 类
    • 实现 Runnable 接口
    • Handler

    编程题

    1. 请使用数组实现一个栈。
    class Stack(object):
    	def __init__(self):
    		self.items = []
    
    	def is_empty(self):
    		"""
    		测试栈是否为空。
    		不需要参数,并返回布尔值
    		"""
    		return self.items == []
    
    	def push(self, data):
    		"""
    		将一个新项添加到栈的顶部
    		它需要 item 做参数并不返回任何内容
    		"""
    		self.items.append(data)
    
    	def pop(self):
    		"""
    		从栈中删除顶部项
    		它不需要参数并返回 item,栈被修改
    		"""
    		return self.items.pop()
    
    	def peek(self):
    		"""
    		从栈返回顶部项,但不会删除它。
    		不需要参数。 不修改栈
    		"""
    		return self.items[-1]
    
    	def size(self):
    		"""
    		返回栈中的 item 数量。
    		不需要参数,并返回一个整数
    		"""
    		return len(self.items)
    
    	def show_item(self):
    		print(self.items)
    
    
    if __name__ == '__main__':
    	stack = Stack()
    	print(stack.is_empty())
    
    	stack.push('cc')
    	stack.push('aa')
    	stack.show_item()
    	
    	print(stack.peek())
    
    	stack.pop()
    	stack.show_item()
    
    	print(stack.size())
    

    输出结果 >>>

    True
    ['cc', 'aa']
    aa
    ['cc']
    1
    [Finished in 0.1s]
    
    1. 按要求编写算法,输出两个字符串中相同的字符。例:String A = “abctd”,String B = “abfyt”,输入 “abt”
    a = 'abctd'
    b = 'abfyt'
    c = []
    
    for i in range(len(a)):
    	if a[i] in b:
    		c.append(a[i])
    print(c[0]+c[1]+c[2])
    1. 冒泡排序。
    a = [10, 6, 8, 53]
    
    for i in range(len(a)-1):
    	for j in range(len(a)-1-i):
    		if a[j] > a[j+1]:
    			a[j], a[j+1] = a[j+1], a[j]
    	
    print(a)
  • 相关阅读:
    javascript之全局函数
    讲真,MySQL索引优化看这篇文章就够了
    aws亚马逊磁盘扩展卷步骤
    google支付回调验证(备用)
    Linux TCP状态TIME_WAIT 过多的处理
    MySQL索引优化分析
    CSS使图片变模糊,亲测非常好用
    linux ss 命令用法说明
    php一行代码获取本周一,本周日,上周一,上周日,本月一日,本月最后一日,上月一日,上月最后一日日期
    有哪些你追了很多女生才明白的道理?
  • 原文地址:https://www.cnblogs.com/LWK5100/p/14246306.html
Copyright © 2011-2022 走看看