-
什么是压力面试:
a) 压力面试是指有意制造紧张,以了解求职者如何面对压力
b) 提出生硬的、不礼貌的问题故意使候选人感到不舒服
c) 针对某一事项或问题做连串的发问,直至无法回答 -
压力面试的目的:
a) 确定求职者对压力的承受能力
b) 确定求职者在压力前的应变能力
c) 确定求职者在压力前的人际关系能力 -
压力测试的适用范围:
a) 高级管理人员 -
如何处理压力面试
a) 秉持真诚
b) 控制语速
c) 控制情绪 -
什么是非压力面试
a) 非压力面试和压力面试正相反,面试官营造良好沟通范围
b) 面试官让面试者尽可能多的表达,以获得有用的信息 -
非压力面试的目的是什么
a) 获取更多的有用信息,技术能力、管理能力、沟通能力
b) 全方位观察应试者,以确定性格、情绪控制、态度等 -
如何处理非压力面试
a) 通过语言表达各项的能力
b) 通过语调、手势和眼神,表现各项素质 -
N对1面试都有哪些情况
a) 1对1面试,一般是技术面试
b) 2对1面试,技术和HR
c) 2对1面试,多轮 -
群面都包含那些内容
a) 多个面试官,有明确的打分标准
b) 形式:问题讨论,分组对抗
c) 时间:半小时左右 -
群面可能的评价标准是什么
a) 应试者发言次数
b) 是否能创造一个好的沟通范围
c) 在团队中起到的作用,提出了哪些建议
d) 是否尊重他人,是否倾听他人
e) 语言表达能力和总结能力
f) 是否具备很强的自信心 -
什么是情境面试
a) 给定一个情景,看应聘者在特定的情境中是如何反应的
b) 情景模拟面试的理论依据是动机理论中的目标设置理论 -
情景模式的目的是什么
a) 给应试者设置一系列工作中可能会遇到的事件
b) 询问“在这种情况下你会怎么做”
c) 鉴别应试者与工作相关的行为意见 -
情景面试可能问题
a) 从用户角度看是问题,从技术方面 看开发认为不是,如何处理
b) 如何处理开发认为测试误报的bug过多的问题
c) 开发提测后,频繁改动代码,影响测试进度怎么处理 -
什么情况下会出现电话面试
a) 简历在可以与不可以之间时
b) 面试公司与面试距离较远
c) 面试者比较强势,被挖时 -
电话面试都应该注意哪些问题
a) 应试者比较被动,尤其逻辑思维弱,不能短时间show自我的
b) 准备好纸和笔,随时准备记录一些重要信息
c) 把握提问的机会,提出具有深度思考的问题 -
什么是开放式问题
a) 需要较长的答案,面试官希望尽可能的详细
i. 如何处理开发和产品之间的关系
ii. 详细介绍一下你使用过的自动化测试框架及原理 -
开放式问题的一般特征是什么
a) 寻求求职者的想法和反应
b) 获取求职者的观念和感觉
c) 将谈话控制权交给求职者 -
什么是封闭式面试
a) 求职者仅需用一个词或短语回答,回答的内容具体明确
i. 你今年多大
ii. 写过多少行自动化代码 -
封闭式问题的一般特征是
a) 获取更多的事实
b) 持续掌握谈话的控制权
c) 缓解沟通气氛
d) 快速获取答案 -
什么是首因效应
a) 第一印象作用或先入为主效应
b) 第一印象作用时间长且重要 -
什么是近因效应
a) 主要取决于后来出现的刺激
b) 面试过程中,我们对他疼最近、最新的认知占了主体地位 -
如何打造和人气质
a) 着装得体,给人可信任的感觉
b) 口腔清洁,主要口腔异味
c) 注意服装清洁,避免有异味
d) 勤刮胡子、鼻毛,保持清洁
e) 不要躲闪对方的眼光
f) 语调不急不慢,适当停顿,确认对方已经听清楚
g) 自信的交流,即使能力不足,也要给人一种坚定的感觉 -
沟通过程包括
a) 倾听
b) 理解
c) 反馈 -
面试官需要知道什么
-
我需要说什么
-
我到底想说什么
-
哪些信息需要一定包含
-
哪些信息可以忽略
-
传达信息需要保持:清晰、积极、简洁、正确、礼貌、完整
-
初级岗位应该具备哪些能力
a) 了解测试过程、bug处理流程、测试用例设计方法
b) 文档总结能力、测试报告编写能力
c) 常用工具Fiddler、Firebug、postman、jmeter、idea
d) 熟悉计算机、网络相关的基础知识、linux、http、web等
e) 抗压能力 -
中级岗位应该具备哪些能力
a) Bug’分析定位能力,独立解决问题能力
b) 数据分析能力,发现流程中存在的问题
c) 编写脚本的能力,实现自动化测试
d) 为改进测试流程提出有效建议
e) 掌握数据库相关知识,了解mysql、redis等
f) 了解内存、CPU、QPS、响应时间等概念
g) 可以使用脚本采集数据、分析
h) 熟练使用Loadrunner、Jmeter等压力工具 -
高级岗位应该具备哪些能力
a) 自动化框架开发
b) 测试平台开发
c) 推动测试流程改进
d) 较强的沟通能力
e) 较好的团队合作能力
f) 较好的表达、演讲能力 -
资深专家的能力
a) 制定测试方案,选择或研发测试工具、平台
b) 对各个测试内容进行有效的度量分析
c) 解决测试过程中的技术需求
d) 在领域内有一定的影响力,主导产品的测试质量 -
测试页面输入框,有什么测试内容
a) 大的范围
i. 功能性、兼容性、稳定性、性能、安全、接口、线上监控、自动化
b) 小的范围
i. 功能、兼容性、安全
c) 确认面试的题目
i. 如果时间允许的话,我想从各个方面说一下我考虑到的内容
d) 功能性测试
i. 常规可输入的内容、数字、字符串、特殊字符、转义字符等
ii. 非常规有一定含义的,html标签,css,js代码,url,sql语句等
iii. 输入内容的边界,空字符、超长文本(边界值+1,-1)
e) 兼容性测试
i. 根据用户分布,手机品牌、分辨率、选择topN机型
ii. Web端测试不同浏览器
iii. 关注的问题,页面渲染、页面布局等,借助firebug调试
f) 稳定性测试
i. 并发用户访问同一请求或者同一页面不同请求
ii. 多次查询,返回的内容相对稳定
g) 性能测试
i. QPS,Query Per Second每秒处理的请求数
ii. 载入界面耗时情况
iii. 加载的页面大小,资源的数量等 -
简历表现
a) 技术能力
b) 管理能力
c) 学习能力
d) 沟通能力
e) 创新能力
f) 团队协作 -
好的简历
a) 文案简洁,格式清晰
b) 概括重点,重点突出
c) 多用数据,多用图表 -
测试流程(参考就行)
a) 需求沟通
b) 制定测试方案
c) 设计测试用例
d) 准备测试环境
e) 测试执行
f) Bug处理
g) 回归验证
h) 跟进上线 -
Bug处理流程
a) 新建待修改待验证已验证关闭或遗留或误报 -
Bug处理流程
a) Bug分级,优先级(高中低)、严重程度(高中低)
b) Bug分类,UI,系统,接口
c) Bug状态,新建,待修改,待验证,已验证,遗留,关闭 -
沟通的对象和方法
a) 产品,开发,UED
b) 市场,运维,运营
c) 领导,下属
d) 面对面沟通
e) 邮件沟通
f) 即时通讯软件(微信QQ) -
常用的测试工具
a) 网络调试工具:fiddler
b) 页面调试工具:chrome inspector firebug
c) Web自动化工具:QTP,selenium
d) 移动端工具:ADB,Monkey,monkeyrunner
e) 移动端自动化框架:appium,robotium, uiautomator,selendroid
f) 平台知识:window,ios,Android,linux
g) 服务端压力测试工具:loadrunner,jmeter
h) 数据库工具:navicat -
如何设计测试用例,管理测试用例
a) 测试用例设计原则
b) 测试用例设计方法
c) 测试用例管理方式 -
工作效率如何,都有什么成果
a) 如何安排任务,提高测试效率
b) 工作中的成果都有哪些
c) 如何团队间协调工作 -
问题背后的意图是什么
a) 通过问题看能力
b) 通过回答看人品
c) 通过表现看态度 -
测试阶段
a) 单元测试集成测试系统测试验收测试 -
如何做好测试计划
a) 明确测试什么(app还是服务端)
b) 明确测试目标(性能或者功能点)
c) 明确项目开始,结束时间
d) 明确测试方案(自动化,手工,性能)
e) 明确资料的位置 -
常见的测试用例设计方法
a) 等价类划分法(将集合的数据用某几个数据代表)
b) 边界值分析法(大于小于等于边界值)
c) 错误推测法(以测试人员经验推测)
d) 正交表分析法(横纵坐标影响元素交错)
e) 场景分析法(登录场景或者购买场景)
f) 因果图法(集合输入输出) -
一条bug记录包含哪些内容
a) 测试工程师,开发人员,bug日期
b) Bug标题,bug正文,复现步骤
c) Bug优先级,bug严重等级
d) Bug所属模块
e) Bug状态(新建,已修复,已验证,遗留等)
f) Bug处理记录 -
如何分层自动化测试
a) UI自动化回归
b) 接口自动化
c) 单元测试-白盒测试 -
如何保证脚本有效性
a) 保证定位有效性,封装处理异常
b) 保证流程有效性,封装独立方法
c) 保证数据有效性,数据备份和回复 -
如何降低自动化维护成本
a) UI自动化,针对不长变的页面
b) 接口自动化,周期短,变动频繁
c) 框架分层,用例与框架分离 -
常见测试覆盖类型
a) 语句覆盖
b) 判定覆盖
c) 条件覆盖
d) 判定/条件覆盖
e) 条件组合覆盖
f) 路径覆盖 -
B/S和C/S架构有什么区别
a) C/S是client/server或客户/服务器模式,如:杀毒软件
b) B/S是Browe/Server的缩写,如:慕课网网站 -
安全性测试都包含哪些内容
a) 用户访问认证
b) 传输数据加密
c) 安全防护策略:如安全日志,入侵检测,隔离防护,漏洞扫描
d) 数据备份与恢复
e) 防病毒系统
f) SQL注入,JS注入 -
测试报告都包含哪些内容
a) 测试背景说明
b) 测试范围说明
c) 测试环境说明
d) 测试方法说明
e) 测试结果结论
f) 质量或风险评估 -
Alpha测试与beta测试的区别
a) Alpha测试是由一个用户在开发环境下进行的测试
b) Beat测试在用户真实环境测试,通过后进入发布阶段 -
Bug的类型有哪些
a) Bug,有代码编写错误导致的功能问题
b) Defect即缺陷,实现与需求不一致
c) Fault即故障,由于环境系统问题引发运行失败
d) Error即错误,语法错误,逻辑错误,不易发现 -
面向对象的概念
a) 面向对象编程,简称OOP,是一种程序设计思想
b) 主要包括:类,继承,多态,实例,属性,方法 -
什么是进程,线程,协程
a) 进程:独立数据空间,进程间不共享数据,系统调度。(from multiprocessing import Process)
b) 线程:执行程序的最小单元,进程内线程间共享资源,系统调度。(threading.Thread(target=show,args(I,))
c) 协程:程序员调度,分解一个线程成为多个“微线程”(gevent.spawn(class)) -
如何使用python实现 socket编程
a) Socket又称套接字,应用程序通过套接字向网络发出请求
b) 应用程序通过套接字应答网络请求
c) 使主机间或者一台计算机上的进程间可以通讯
d) 个人理解:两台计算机的进程通过IP+port端口进行通讯 -
什么是lambda表达式
n = lambda x: x ** 2 + 10
print(n(10))
结果:110 -
Tuple和list区别
a) Tuple为元组,list为列表
b) 元组不可修改,列表可以修改 -
Range函数的用法
a) 返回一系列连续增加的整数
b) 工作方式类似于分片
c) 可以生成一个列表对象
d) 示例:range(0,101) ; range(0,101,2) -
字符串的拆分方法有哪些
a) String的split方法,不允许有多个分隔符
b) 函数re.split(“”,“”),允许为分隔符指定多个正则模式 -
单引号,双引号,三引号的区别
a) 单引号双引号没有区别,都可以用来表示字符串
b) 三引号,字符串内可以直接换行 -
*args,**kwargs什么作用
a) *args,可变的参数列表
b) **kwargs,键值对参数列表
def test_kwargs(first, *args, **kwargs):
print(first)
for i in args:
print(“args %s” % i)
for k, v in kwargs.items():
print(“kwargs”, (k, v))
test_kwargs(1, 2, 3, 4, a0=1, a1=2, a3=4)
1
args 2
args 3
args 4
kwargs (‘a3’, 4)
kwargs (‘a1’, 2)
kwargs (‘a0’, 1) -
Python中pass语句的作业
a) 占位符 -
Re模块中match和search方法的不同
a) Search,扫描整个字符串查找匹配
b) Match,只在字符串开始位置匹配 -
解释一下WSGI和faseCGI的关系
a) CGI:公共网关接口(CommonGeteway Interface)
i. HTTP服务器与机器上的程序进行交互的一种工具
ii. 程序必须运行在网络服务器上,和语言无关
iii. 个人理解:对页面端信息的处理
b) WSGI:Python Web Server Gateway Interface
i. Python应用程序和web服务器之间的一种接口
c) FastCGI:像是一个常驻(long-live)型的CGI,它可以一直执行 -
Python是如何操作文件的
a) With open(“test.txt”, “at”) as f:
f.write(“\nhello mook”)
追加内容自动关闭文件 -
Python的内存管理机制
a) 引用计数
i. From sys import Getrefcount Getrefcount (a1)
b) 垃圾回收
c) 内存池 -
Dici的items与iteritems区别
a) Items方法类似以列表方式返回,返回时没有特殊顺序 (不可迭代)
b) Iteritems方法类似,但返回的是一个迭代器对象 (可迭代) -
排序
a) 从小到大排序:sorted(list) ;改变真实顺序:list.sort()
b) 从大到小排序:sorted(list, reverse=True) ;改变真实顺序:list.sort(reverse=True) -
冒泡
a) 比较相邻的元素,如果第一个比第二个大,就交换
b) 一轮遍历,每两相邻元素,重复对比,最大的放队尾 -
快排
a) 从列表中挑出一个元素,作为基准值key
b) 小于key’的放左边,大于key的放右边 -
堆排序
a) 堆排序指利用堆的数据结构设计的一种排序算法
b) 堆近似一个完全二叉树结构
c) 子节点的键值小于(或者大于)它的父节点 -
二分查找
a) 折半查找
b) 必须采用顺序存储结构
c) 必须按关键字大小有序排列 -
素数
a) 除了1和它自身外,不能被其他自然数整除的数 -
OSI七层模型指的是哪些内容
a) 物理层:建立,维护,断开物理连接
b) 数据链路层:逻辑连接,硬件地址寻址,差错校验
c) 网络层:逻辑地址寻址,不同网络之间的路劲选择,IP
d) 传输层:传输数据的协议,TCP,UDP
e) 会话层:建立,管理,终止会话,本地与远程主机的会话
f) 表示层:数据的标示,安全,压缩,JPEG,ASCII等
g) 应用层:与最终用户的接口,HTTP,HTTPS,SMTP等 -
http协议中get,post的区别
a) 功能差异(get适合查询,post适合修改)
b) 数据查询(get明文显示,post内容都在body)
c) 安全性(post比get安全) -
Tcp和udp的区别
a) Tcp
i. 面向连接
ii. 可靠的
iii. 传输大量的数据
iv. 慢
b) Udp
i. 面向非连接
ii. 不可靠
iii. 少量数据
iv. 快 -
TCP连接三次握手具体过程
a) 主机A发送SYN信息(序列号=x)
b) 主机B接收SYN信息并发送SYN,ACK信息(序列号=y,确认号=x+1)
c) 主机A接收SYN,ACK信息(序列号=y,确认号=x+1)并发送ACK信息(确认号=y+1)
d) 主机B接收ACK信息(确认号=y+1)
e) 在此期间AB持续进行交流 -
TCP四次挥手过程
a) -
Socket建立连接的过程
a) 服务器建立监听,socket,bind,listen
b) 客户端发送请求,connect,send
c) 连接确认,accept,response -
进程与线程的区别
a) 进程:独立数据空间,进程间不共享数据,系统调度。
b) 执行程序的最小单元,进程内线程间共享资源,系统调度。
c) 一个进程可以有多个线程,多个线程也可以并发执行。 -
进程都有哪些状态
a) 就绪状态:已获处理机以外所需资源,等待分配处理机资源
b) 运行状态:占用处理机资源运行,此状态进程数<=CPU数
c) 阻塞状态:进程等待某种条件,在条件满足之前无法执行
d) -
进程同步与互斥的区别
a) 互斥:
i. 某一资源同时只允许一个访问者对其进行访问
ii. 具有唯一性和排它性
iii. 互斥无法限制访问者对资源的访问顺序,即访问是无序的
b) 同步:
i. 基于互斥,经其它机制实现访问者对资源的有序访问
ii. 大多数情况下,同步已经实现了互斥,写入资源是互斥的
iii. 少数情况下,可以允许多个访问者同时访问资源 -
进程间通信都包括哪些
a) 管道:半双工通信方式,数据单项流动,父子进程间
b) 命名管道:半双工通信方式,无亲缘关系进程间通信
c) 信号量:是计数器,锁机制,控制多进程对资源访问
d) 消息队列:消息链表,存放在内核中由消息队列标识符标识
e) 信号:比较复杂的通信方式,通知进程某个事件已经发生
f) 映射一段能被多个进程可访问的内存 -
进程的调度算法都有哪些
a) 先来先服务
b) 短作业优先
c) 时间片轮转调度算法
d) 高响应优先
e) 优先权调度算法
f) 多级队列调度算法 -
死锁产生的原因
a) 资源竞争
b) 进程推进顺序不当
c) 必要条件:互斥,不剥夺,请求与保持,环路等待
d) 预防死锁,破坏四个必要条件之一 -
页面的置换算法都有哪些
a) 最佳置换算法
b) 先进先出置换算法
c) 最近最久未使用置换算法
d) Clock置换算法,也叫最近未使用算法
e) 最少使用置换算法 -
Makefile作用是什么
a) 定义规则,指定哪些文件先编译,后编译,重新编译
b) Makefile的好处,自动化编译
c) Makefile需要make关于解释执行 -
什么是虚存,实存,共享内存
a) 虚存(VIRI = SWAP + RES):
i. 进程“需要的”虚拟内存大小
ii. 包括进程使用的库,代码,数据,以及malloc,new分配的堆空间和分配的栈空间等
iii. 申请10MB,使用1MB,增长10MB
b) 实存(RES = CODE + DATA):
i. 包括使用中的malloc,new分配的堆空间和分配的栈空间,但不包括swap out量
ii. 申请10MB,使用1MB,增长1MB
c) 共享内存(SHR)
i. 自身,也包括其他进程的共享内存
ii. 进程只使用了几个共享库的函数,但包含整个共享库大小
iii. 某个进程所占的物理内存大小:RES – SHR -
如何创建一个数据库
a) Create database 数据库名 -
如何创建一个数据表
a) Create table 表名 -
如何操作数据表中的数据
a) Select * from table where tiaojian
b) Update class set ziduan = xinziduan where tiaojian
c) Insert into table values
d) Delete from table where tiaojian
e) Drop table tablename -
Fiddler 抓包
a) PC打开fiddler代理,设置 端口
b) 移动端连接同一WIFI,打开手动代理
c) 输入PC端ip地址以及端口号
d) 手机访问PC的IP地址下载证书设置一个密码 -
设置请求过滤
filters
a) -
慢网速设置
a) RulesPerformanceSimulate Modem Speeds 打开
b) FiddlerSsciptGo to: OnBeforeRequestm_SimulateModem 设置 -
Android的四大组件是什么
a) Activity:程序与用户的交互窗口
b) Service:在程序后台,完成用户的操作
c) ContentProvider:提供数据的统一访问格式
d) BroadcastReceiver:应用程序之间传输信息的机制 -
Activity的生命周期是什么
a) onCreate:activity正在被创建,执行一些初始化工作
i. 如:调用setContentview加载界面布局资源,初始化activity所需数据
b) onStart:activity正在被启动,这时activity已经可见(对应用可见),只不过在后台,用户还看不到;
c) onResume:表示activity已经出现在前台,用户可见
d) onPause:activity正在停止,可以执行存储数据,停止动画等不太耗时的工作
e) onStop: acticity即将停止,可以做一些稍微重量级的工作,同时不能太耗时
f) onDestory:axticity即将被销毁,执行回收工作和资源释放
g) onRestart:activity正在重启,执行顺序为:onPauseonStoponRestartonStartonResume
h) -
什么是ANR
a) Application Not Responding
b) Activity 的最长执行时间是5秒
c) 用户可以选择“等待”让程序继续运行,或“强制关闭” -
Android常见的五种布局是什么
a) FrameLayout(框架布局)
b) LinearLayout(线性布局)
c) AbsoluteLayout(绝对布局)
d) RelativeLayout(相对布局)
e) TableLayout(表格布局) -
Android中动画有哪几种类型
a) Tween动画,组件移动,缩放,透明度的变化
b) Frame动画,通过顺序播放来实现,类似电影 -
如何重启adb服务
a) adb kill-server
b) adb start-server -
App的安装和卸载
a) Adb -s ip或者设备名 install -r
b) Adb -s ip或者设备名 uninstall -
如何在电脑和手机之间传输数据
a) Adb push D:\test.apk /data/local/tmp/test.apk
b) Adb pull /data/local/tmp/test.txt D:\ -
如何静默安装app
a) Adb push D:\test.apk /data/temp/test.apk
b) Adb shell pm install -f /data/temp/test.apk -
如何使用adb启停一个app
a) Adb shell am start -W -S package/activity
b) Adb shell am force-stop package -
如何通过某个关键字查找已安装的包
a) Adb shell pm list package -f keyword -
如何截屏,录屏
a) Adb shell screencap /data/local/tmp/screen.png
b) Adb shell screenrecord /data/local/tmp/demo.mp4 -
如何抓取logcat日志
a) Adb logcat
b) Adb shell logcat -
如何获取当前cpu,内存状态
a) Adb shell dumpsys meminfo package
b) Adb shell dumpsys cpuinfo | findstr package -
Monkey 进行压力测试的命令
a) Adb shell monkey -p -vvv -
如何重现Crash, ANR过程
a) Adb shell monkey -s 6789 -p -vvv
i. (保证触发序列一样)
b) Crash:程序崩溃或闪退
c) ANR:程序未响应 -
如何提取Crash,ANR的信息
a) 将monkey执行过程中的日志重定向到文件
i. adb shell monkey -v -v -v -p com.hyt.meeting.plus -vvv 100 > 20200707.log
b) 测试班app连接第三方统计平台 -
如何设置monkey运行8小时
a) 添加参数 –throttle
b) Adb shell monkey -v -v -v -s 6789 –throttle 300 -p com.hyt.meeting.plus 1000 -
在crash/ANR后,如何继续执行
a) 添加忽略crash参数 –ignore-crashes
b) 添加忽略ANR参数 –ignore-timeouts -
如何让monkey执行指定的事件
a) 触摸事件 --pct-touch
b) 动作事件 –pct-motion
c) 轨迹球事件 –pct-trackball
d) 基本导航事件 –pct-nav
e) 主要导航事件 –pct-majornav
f) 系统导航事件 –pct-syseys
g) 应用启动事件 –pct-appswitch
h) 其他类型事件 –pct-anyevent -
Instrumentation原理是什么
a) 基于JUnit,因此既可以直接使用Junit 进行测试,也可以使用Instrumentation 来测试Android 组件 -
Instrumentation测试什么
a) 功能性测试
b) Activity生命周期的测试
c) 模拟数据库操作的测试和兼容性测试 -
什么情况使用Instrumentation?
a) 使用Java Junit框架
b) 需要进行白盒测试时
c) 需要使用Mock技术模拟系统对象时 -
UIAutomator原理是什么
a) UIAutomator是Android UI自动化测试工具
b) 不需要源码,基于Java开发语言
c) UiDevice, UiSelector, UiScrollable, UiObject, UiCollection (类库) -
UIAutomator可以测试什么
a) App UI层的交互操作
b) 不需要源码,可以模拟跨进程过程
c) 基于Java Junit框架,黑盒UI自动化 -
如何识别App视图内的元素
a) UIAutomatorViewer
b) 可以识别元素的id,classname,bounds等 -
Selendroid的原理是什么
a) 四大组件
i. Selendroid Client:Webdriver + 移动特性的实现
ii. Selend Server: 一个Instrumentation APK
iii. AndroidDriver-APP:一个WebViewActivity,即浏览器
iv. Selendroid-Standalone: 大总管,负责准备环境
- Robotium的原理是什么
a) 基于Instrumentation进行封装,实现的Android测试框架
b) 封装了一个Solo类库,提供自动化测试API
c) 由于是基于Instrumentation,测试时需要源码 - 什么是Appium
a) 一个开源的移动端UI自动化测试框架 - Appium的理念是什么
a) 不需要app源码
b) 不局限于语言或者框架
c) 接口统一,不需要重复开发
d) 必须是开源的 - Appium 概念
a) C/S架构,appium核心是一个web服务器
b) Session, 客户端初始化session于服务端交互
c) Desired Capabilites, 初始化时的键值对组合
d) Appium Server, 操作与驱动手机
e) Appium Client,支持多语言调用 - Appium 环境
a) Android SDK,JDK,Appium
b) Pycharm, python环境
c) 库:Selenium, Appium-Python-Client - Appium 支持哪些语言
a) Java,Javascript,PHP,Python
b) Ruby,C#,Perl,Object,C - Appium初始化需要配置哪些内容
a) platformName,目标设备平台Android/IOS
b) platformVersion,目标设备的平台版本
c) deviceNmame,目标设备名称
d) appPackage,App包名(Android)
e) appActivity,App Activity名称(Android)
f) automationName,自动化驱动类型Seledroid/Appium
g) unicodeKeyboard,是否使用Appium输入法
h) resetKeyboard,是否恢复默认键盘 - Appium测试Native App的原理是什么
a) PythonappiumAndroid uiautomator手机app - Appium 测试Hybrid App的原理是什么
a) Pythonappiumselendroid手机app - Appium测试IOS app的原理是什么
a) Test ScriptsJSON wire protocolAppium serverWebDriverAgentwda app - 元素的定位,识别工具
a) UIAutomatorViewer
b) Appium的Inspector
c) WebView部分,Chrome浏览器的调试模式 - 定位元素的API
a) Find_elemet_by_id
b) Find_element_by_name
c) Find_element_by_xpath
d) Find_element_by_class_name
e) Find_element_by_link_text
f) Find_element_by_class_name - 脚本的编写规则
a) LOVE规则
i. L:Locate 定位
ii. O:Operate 操作
iii. V:Verify验证
iv. E:Exception异常处理 - 初始化注意事项
a) Native
i. 不需要指定app的包路劲
ii. 默认使用appium驱动
iii. 如果需要输入中文,需要加入输入法相关配置
b) Hybrid
i. 需要指定驱动名称为:Selendroid
ii. 需要指定app的路径,因为需要重新签名 - Selenium测试WEB环境准备
a) 工具:pycharm,chrome
b) 包:selenium,Python
c) Webdriver:chrome driver/firefox driver/ie driver等 -
a) 其他配置都一样,追加参数:Appium测试WEB页面
b) ‘browserName’: ‘Chrome’ - Unittest框架都包含哪些内容
a) TestFixture
i. SetUp
ii. TestCase
iii. TearDown
b) TestCase
c) TestSuite
d) TestRunner - 什么是数据驱动测试
a) 黑盒测试,又称功能测试
b) 数据驱动单元测试为数据源中的每行重复进行一种单元测试
c) 数据驱动单元测试,常用情况是使用多个输入值测试API - DDT的原理是什么
a) @data(测试用例)
b) Python下的数据驱动框架名称也叫DDT
c) 效果:使用多个数据运行一条用例,使其表现为多条用例
d) 原理:通过python的装饰器,装饰每条用例 - 数据驱动测试的意义
a) 代码复用率高,一次编写多条数据复用逻辑
b) 异常排查效率高,测试执行隔离,数据间无影响
c) 代码的可维护性高,提高了代码的易读性 - 什么是行为驱动
a) 行为驱动开发简写:BDD
b) BDD是敏捷软件开发的技术 - Lettuce的原理是什么
a) Lettuce是基于Python语言的行为驱动测试框架
b) Lettuce将测试用例和自动化测试代码分离
c) Lettuce写测试用例就像写文本一样清晰 - 行为驱动的实现
a) 使用feature定义测试用例,导入Lettuce模块
b) - 什么是关键字驱动
a) 关键字驱动测试也成为表格驱动测试或行为驱动测试
b) 它将创建测试程序的步骤分为规划及实现两个阶段
c) 关键字驱动使不懂代码的人可以完成自动化过程 - Robot Framework的原理
a) 基于RIDE可视化工具,导入appiumLibrary
b) 使用appiumLibrary中提供的关键字,实现用例过程
c) 使用RIDE完成用例的执行与结果的管理 - 如何手机测试结果
a) 使用HTMLTestRunner.py生成HTML测试报告 - 如何管理测试报告
a) 以时间戳作为报告的名称 - 如何定义自己的邮件服务
a) 在所使用的邮箱中打开服务 - 如何自动发送测试报告
a) 使用SendReport.py发送测试报告 - 抓取的手机数据包中都包含哪些内容
a) 状态码,协议类型
b) Request(Header:User-Agent, Cookies, Referer)
c) Response(Header, Data) - 如何设置AutoResponder
a) 抓取请求
b) 制作数据
c) 设置规则 - 如何使用Fiddler发送Get/post请求
a) 构造URL (Get&Post)
b) 构造参数 (Get&Post)
c) 构造数据 (Post) - 如何使用Fiddler构造慢网速
a) RulesPerformancesSimulate Modem Speeds
b) 修改代码,配置需要的速度 - 如何使用Fiddler抓取https包
a) Fiddler https相关设置
b) 在浏览器中安装证书 - 如何使用PostMan发送Get/post请求
a) 构造URL (Get&Post)
b) 构造参数 (Get&Post)
c) 构造数据 (Post) - 如何实现一个API测试框架
a) 用例层TestCases DDT
控制层Unittest TestReport Email
驱动层PythonRequests - 什么是持续集成
a) 持续集成是指开发阶段,对项目进行持续性自动化编译,测试,以达到控制代码质量的手段
b) 持续集成是一种软件实践理念 - 持续集成都包括哪些内容
a) 开发人员,版本控制
b) CI服务器,构建脚本
c) 反馈机制,集成构建 - 持续集成的意义是什么
a) 减少风险,减少重复过程
b) 任何时间,任何地点生成可部署的软件
c) 增强项目的可见性,建立团队对开发产品的信心 - 持续集成工具都有哪些
a) Jenkins,Buildbot
b) Travis CI,Strider
c) Go,Integrity - 如何搭建Jenkins持续集成平台
a) 下载jenkins.wat
b) 命令行运行:java -jar Jenkins.wat
c) 在浏览器窗口打开:http://localhost:8080 - 使用Jenkins都需要做哪些配置
a) 系统级配置
b) 工程级配置 - 如何配置一个APP打包的过程
a) 开发配合 - 如何持续执行脚本
a) 配置shell,python,java根据需求在平台配置脚本1 - 如何使用持续基础工具执行Monkey
a) 平台下载monkey插件,自己配置 - 服务端的压力工具都包含哪些
a) LoadRunner
b) JMeter
c) 自主研发的工具 - 服务端测试的指标
a) CPU
b) 内存(虚存,实存)
c) QPS(每秒请求),平均响应时间
d) 吞吐量
e) 磁盘I/O - 如何开展服务端的压力测试
a) 搭建服务端模块,并启动服务
b) 监控进程相关指标,内存,CPU
c) 监控模块的执行情况,QPS,平均响应时间
d) 收集数据并分析,生成曲线图
e) 根据分析结果得到测试结论 - app兼容性测试都考虑哪些因素
a) 系统版本(Android&IOS平台,不同版本)
b) 分辨率(大屏,小屏,全屏)
c) 手机品牌(华为,小米) - Wap兼容性测试考虑哪些因素
a) 不同平台的不同浏览器(safari,chrome等)
b) 分辨率(大屏,小屏,全屏)
c) 转发到QQ,微信,微博等第三方平台 - PC页面兼容性测试都考虑哪些因素
a) 操作系统(Windows,mac os, 平板)
b) 浏览器(IE系列,firefox,chrome等)
c) 分辨率(笔记本,台式机,窗口缩放等) - 调试app相关的bug常用哪些工具
a) 网络相关工具,fiddler,wareshark,Charles
b) Adb,am,logcat等
c) 云平台,bug复现