移动端APP自动化测试超全基础汇总

 目录

一.面试过程

1.自动化岗位要求  2.面试流程,面试类型  3.沟通技巧,不同级别要求

二.真实面试案例

1.一个输入框的面试题(有人拿到高级岗位,有人连初级都没拿到,为什么)

三.自我分析

1.积累的知识决定了初入社会的岗位  2.什么是好的简历  3.需要掌握的基本知识

四.技术基础知识

1.常见测试理论  2.python语言常见问题  3.python常问算法  4.linux基本命令  5.计算机网络  6.操作系统  7.数据库相关  8.fiddler抓包工具  9.android系统相关工具  10.adb相关问题  11.monkey相关问题

五.自动化工具

1.Instrumentation  2.UIAutomator  3.Selendroid  4.Robotium  5.Appium  6.Selenium

六.自动化框架

1.Unittest框架  2.数据驱动DDT  3.行为驱动Lettuce  4.关键字驱动Robot Framework  5.测试报告管理  6.邮件服务管理

七.接口自动化

1.postman  2.python requests

八.持续集成(概念)  九.服务端性能测试  十.兼容性测试  十一.调试

正文

一.招聘要求  二.面试过程(笔试-技术-性格-薪资)  三.面试类型  四.问题类型  五.注意事项  六.高效沟通  七.岗位级别

软件的生命周期:定义规划——需求分析——软件设计——编码——测试——维护

面试案例:一个输入框的面试题(测试以下输入框,你会测试哪些内容)

 面试者A:左侧顶部菜单——全部、图片切换——右侧顶部小工具——登陆功能——输入框——底部链接

面试者B:确认题目:是仅测试输入框,不考虑其他内容吗?   回复:是的,仅测试输入框  

面试者B:大范围的话测功能、兼容性、稳定性、性能、安全、接口、线上监控、自动化八方面;小范围的话测功能、兼容性、安全三方面

    如果时间允许,我想从各方面说一下考虑的内容:

    关于功能:①常规:任意字符  ②非常规:有含义的字符串  ③边界、空格、超长文本(±1个字符,如-1个字符并输入中文)

    关于兼容性:①用户分布:机型、分辨率  ②浏览器  ③页面布局、渲染,借助firebug调试

    关于稳定性:①压力下,搜索是否正常返回  ②多次输入是否稳定

    关于性能:①QPS-每秒处理请求数  ②点击开始到完全加载,平均耗时  ③加载页面大小、资源(js、css)数量

    关于安全性:js注入、sql注入(输入框输入js代码)

    关于接口:①接口正确性  ②异常数据的容错情况  ③非浏览器环境下(绕过页面限制输入)

    关于线上监控:建立实时监控保障稳定性、降低影响

    关于自动化:基于selenium实现UI自动化,用selenium调用工具模拟浏览器UA返回页面,去做UI自动化。通过自动化可以例行回归验证,提高效率。

          比如有自动化,可以在所以浏览器/手机上去做功能验证,过程中同时截图,再用python的图像处理工具,对图片与图片之间进行对比,将异常图像拿出

          也可以利用android使用APPium基于UIAutomator,ios使用WDA做自动化测试。

简历表现:

简历要表现出:技术能力、管理能力、学习能力、沟通能力、创新能力、团队协作    不要写别人对自己的评价,文案简洁,概况说明突出重点,多用数据图标

简历对比:

  测试流程:

①需求沟通——制定测试方案——设计测试用例——准备测试环境——测试执行——bug处理——回归验证——跟进上线

②测试文档——产品、测试、开发评审——测试计划——测试用例——测试评审——开发完成提测——冒烟测试——正式测试——bug处理——评估质量——测试报告——上线跟进

bug:

①bug分级:优先级、严重程度  ②bug分类:UI、系统、接口  ③bug状态:新建、待修改、待验证、已验证、遗留、关闭

常用测试工具:

网络调试工具:fiddler  页面调试工具:Chrome Inspector、firebug  web自动化工具:QTP、selenium  移动端工具:ADB、monkey、MonkeyRunner

移动端自动化框架:appium、robotium、uiautomator、selendroid  平台知识:window、mac、android、linux  服务端压力工具:loadrunner、Jmeter  

数据库:mysql可视化工具navicat

自我分析:SWOT分析  strength优势——weakness劣势——Opportunity机会——Threat威胁

测试阶段:

单元测试(开发)——集成测试(开发)——系统测试——验收测试

测试流程:

需求沟通——制定测试方案——测试用例——测试环境——执行测试——bug处理——回归测试——跟进上线

测试计划:

5W原则:what明确测什么  why明确测试目标  when明确测试开始结束时间  how明确方案  where资料位置、路径、bug位置

测试用例方法:

1.等价类(相同属性集合,如0-9逻辑一样,只需验证一个)  2.边界值(±1)  3.错误推断  4.正交分析法(坐标系,如手机横坐标和浏览器纵坐标)

5.场景法(登陆成功、登陆失败)  6.因果图  7.判定表

bug包含什么:

①测试工程师、开发人员、bug日期  ②bug标题、bug正文、bug附件  ③优先级、严重程度  ④所属板块  ⑤bug状态(新建、修复、遗留、关闭)  ⑥bug处理记录

如何分层自动化:

UI自动化测试:针对不常变页面  接口自动化:周期短、变化频繁  单页测试(白盒)

B/S:浏览器与服务器  C/S客户端与服务器

安全测试包括:

①用户访问认证  ②传输数据加密  ③安全防护策略:安全日志、入侵检测  ④数据备份  ⑤防病毒  ⑥sql注入、js注入

测试报告包含:

①测试背景  ②测试范围  ③测试环境  ④测试方法  ⑤结论  ⑥质量风险评估

alpha测试:开发环境下测试  beta测试:用户真实环境下测试

bug类型:

①bug代码编写错误导致功能  ②defect缺陷,实现与需求不同  ③fault故障  ④error错误,逻辑语法错误,可能不影响用户体验

※※python※※

面向对象:OOP

    包含:类、继承、多态、实例、属性、方法

    

    

进程、线程、协程:

     进程【网线】:不共享数据(QQ与word)  线程【网线小细线】:执行程序最小单元(多个word)  协程:程序员调度,一个线程分多个“微线程”

 

 如何使用python实现socket编程:

socket:套接字,应用程序通过套接字想网络发出请求,应用程序通过套接字应答网络请求,使主机间或者一台计算机的进程间可以通讯

 

 什么是lambda函数

匿名函数,如:

 tuple为元组(不可改),list为列表(可改)

range函数

返回一系列连续的整数,可以生成一个列表对象,工作方式类似于分片

alist = range(2,101,2)  print(alist)  ——>2,4,6,8,10…… 100

re模块match(只在字符串开始匹配)、search(扫描整个字符串)

python操作文件:(把大象放冰箱,打开,操作,关)

 python算法:

常用算法:排序、冒泡、快排、堆排、二分查找

 

※※Linux※※

基础:cd切换目录  ls -l列出文件详细信息  ls -a列出当前目录文件  touch创建文件  mkdir创建目录  echo创建带内容文件  cat查内容  cp拷贝  mv移动  rm -r递归删除  rm -f强制删除  wc统计字节数  tree显示目录结构  grep查找  ln软连接

网络:curl文件传输  netstat网络信息  telnet远程主机

系统:ping连通  man查看帮助  kill杀死进程  top消耗最多进程信息  ps进程状态

更多参考本博客linux命令随笔

 

※※网络※※

想象广州——北京快递过程

物理层(公路)——数据链路层(十字路口,马路相连)——网络层(选择的路径)——传输层(运输车):TCP确保建立/慢,UDP直接发容易丢包/快——会话层(快递员)

表示层(快递包裹内容)数据内容——应用层(使用包裹):有http、https、smtp协议。

http中get与post区别:

功能:get——取东西(下载)  post——提交(上传)

传输方式:get——url+参数  post——放在body传输,安全

tcp与UDP:

 

 tcp三次握手,四次挥手

  

 socket建立连接:

①建立服务器监听,socket,bind,listen  ②客户端发送请求,connect,send  ③连接确认,accept,response

 

※※数据库※※

创建库:create database 数据库名    show databases(查看数据库)

创建表:create table 表名    show tables查看表

操作数据:

    插入  insert into 表名 values (内容);

    查询  select * from 表名 (where  );

    更新  updata 表名 set 字段=新值 where id=1;

    删除  drop table 表名;

 

※※fiddler※※

如何抓手机包

借助局域网,设置代理转发,将手机数据流转发到fiddler  可以去修改返回内容,去autoResponder设置

慢网速

Rules——Performance——simulate modem speeds      fiddlerscript 默认1kb延迟300ms

过滤筛选  filters——hosts

1**成功接收  2**成功处理  3**重定向、跳转  4**客户端错误  5**服务器错误

请求报文是key-value形式,返回报文是json串。 

 

※※Android※※

android四大组件:

  activity程序与用户交互窗口  service程序后台完成操作  content provide数据统一访问格式  broadcastreceiver应用间数据传输

ANR:

  持续等待还是强制关闭

常见五种布局:

  frame Layout 框架布局  linear Layout 线性布局  absolute Layout 绝对布局  relative Layout 相对布局  table Layout 表格布局

 

※※ADB※※

重启服务:  adb kill-server  adb start-server

安装:  adb -s 设备名 install (-r 覆盖)路径

卸载:  adb -s 设备名 uninstall 包名

包名获取:  adb logcat | grep/findstr start(grep是mac、findstr是windows)

adb push 电脑\ 手机/  电脑——>手机

adb pull 手机/ 电脑\  手机——>电脑

静默安装:adb shell pm install -f 手机/

adb启动app:  adb shell am start -w -s 手机/  (-w等待  -s先强制停止)

adb停止app:  adb shell am force-stop 手机/

查找已安装包:

  包含关键字:adb shell pm list package -f 关键字

  第三方安装:adb sehll pm list package -3 关键字

  已安装:adb shell pm list package -i 关键字

截屏:adb shell screencap 手机路径/  录屏:adb shell screenrecord 手机路径/

抓取logcat:adb logcat  后面可以加 find str

获取当前cpu: adb shell dumpsys cpuinfo/findstr 手机包(CPUinfo是mac,findstr是windows)     内存: adb shell dumpsys meminfo 手机包

 

※※Monkey※※

monkey向系统发送伪随机的用户事件流,实现对正在开发的应用程序进行压力测试。

monkey进行压力测试命令?☆☆☆

adb shell monkey -p 包名 事件数  如:adb shell monkey -p com.android.calculator2 100  

如何重现crash、ANR过程?如何提取?

monkey是随机执行的(伪随机),添加参数 -s seed 只需要提供相同的seed值即可复现

adb shell monkey 【-v -v -v 详细信息】-s 6789 -p 包名 事件数 >20200517.log      -v可以看参数  -v-v更加详细  -v-v-v最详细  并且导出到20200517.log日志

如何设置monkey运行8小时

添加参数--throttle

adb shell monkey -s 6789 --throttle 300 -p 包名 事件数  ——> 300ms点击一次,并填写合适的事件数

在Crash、ANR后继续执行?

填写忽略参数crash参数:--ignore-crashes    忽略ANR参数:--ignore-timeouts

如adb shell monkey -s 6789 --throttle 300 --ignore-crashes --ignore-timeouts -p 包名 事件数

如何让monkey指定事件

触摸  --pct-touch  动作  --pct-motion  轨迹球事件  --pct-trackball  基本导航事件  --pct-nav  主要导航事件  --pct-majornav  系统导航事件  --pct-syskeys

 

※※鲤鱼跳龙门第一招——自动化工具※※

一.Instrumentation    java语言编写

  原理:通过直接调用被测app类实现自动化,要求与被测app在一个进程内

  可以测功能、activity生命周期、模拟数据库操作测试和兼容性测试

  什么时候使用???  使用java Junit框架  进行白盒测试  使用mock技术模拟系统对象

二.UIautomator、UIAutomatorviewer  不依赖源码

三.selendroid(基于Instrumentation)、robotium(基于Instrumentation)  依赖源码

  原理:selendroid是基于Instrumentation进行的封装,指令通过http协议传输过来的

     robotium也是基于Instrumentation进行封装,实现android测试框架,封装了一个solo类库,提供自动化测试API,测试时也需要源码。    

四.Appium  跨语言☆☆☆  开源移动端UI自动化框架    

  理念:①不需源码②不限语言框架③接口统一,不需重复开发④开源

  概念:c/s框架,核心是一个web服务器

     session,客户端初始化session与服务器交互

     Desired capabilites,初始化时的键值对组合

     Appium server,操作与驱动手机

     appium client,支持多语言调用

  环境:①Android SDK、JDK、Appium  ②pycharm、python环境  ③库:selenium(appium的父类)、appium-python-client

  支持语言:java、python、JavaScript、php……

  appium初始化配置内容:appPackage(app包)、appActivity(appActivity名称)、automationName(自动化驱动类型selendroid/appium)

Appium测试native app原理:

  

 

 

 Appium测试Hybrid app原理:(测试混合型app,如浏览器、某些app加载了h5页面)

 

 

 Appium测试ios app原理:

 

 

 综述:appium自动化框架,本身不能实现自动化测试过程,完全是借助于当前业界流行的自动化框架做的一次封装。

Appium测试native app:

  元素定位:①UIautomatorViewer☆☆☆  ②使用appium的Inspector

  定位元素api:find_element_by_accessibility_id            find_elements_by_accessibility_id

         find_element_by_id                  find_elements_by_id

         find_element_by_name                 find_elements_by_name

         find_element_by_xpath                 find_elements_by_xpath      //绝对路径:/html/body/div/p  和相对路径://div//p

         find_element_by_class_name              find_elements_by_class_name

         补充:(ID选择器#  class类选择器.)(webDriver整个页面  webelement元素内部)

  写脚本规则:love规则

        locate定位    operate操作    verify操作    exception异常处理

  初始化注意事项:

        ①可以不使用App包路径(因为uiautomator不需要源码)  ②默认使用appium驱动

Appium测试Hybrid app:

  元素定位:基于native部分:①UIautomatorViewer☆☆☆  ②使用appium的Inspector

       基于webview部分:chrome浏览器的调试模式

  定位元素api:find_element_by_id                  find_elements_by_id    

         find_element_by_name                 find_elements_by_name

         find_element_by_xpath                 find_elements_by_xpath

         find_element_by_link_text                    find_elements_by_link_text

         find_element_by_tag_name               find_elements_by_tag_name

         find_element_by_class_name              find_elements_by_class_name

  写脚本规则:S-love规则

        native部分:locate定位    operate操作    verify操作    exception异常处理

        webview部分:用selenium(appium父类)  switch改变

  初始化注意事项:

        ①明确指定驱动:selendroid  ②selendroid模式基于Instrumentation实习的自动化框架,Instrumentation需要将app重新签名,所以要明确指定app路径

补充:selenium测试web页面:

  环境准备:工具:pycharm、chrome

       包:selenium、python

       webview:chrome driver(firefox drive/ie driver)

       元素识别工具:firefox或者chrome的调试工具

  定位方法:同上,例如用xpath:开发者选项——复制xpath——定位

Appium测试wap界面:

  环境:

    IDE:pycharm  写代码的地方

    包:python、selenium、appium-python-client

    工具:appium、chrome

  元素识别:chrome开发者工具

  脚本编写:初始化时要指定browsername为browser,其余自动化代码与selenium相同

 

※※鲤鱼跳龙门第二招——自动化测试框架※※

Unittest框架:

FestFixture  测试固定装置(包含①setup初始化  ②Testcase测试用例   test_名  ③TearDown释放资源)

FestCase  

FestSuite  装载测试用例    suite相当于啤酒箱,可以装很多啤酒(测试用例)

FestRunner  执行测试用例

 

 

 

DDT数据驱动:

黑盒(功能)、每行重复进行一中单元测试、使用多个输入值测试API

效果:使用多个数据测试一条用例,表现为多条用例      原理:通过python的装饰器,装饰每条用例

测试搜索功能:

①启动appium,放后台②准备手机③准备脚本 导入uittest(基于uittest)    from appium import webdriver(使用appium下面浏览器驱动)

 

 

 

 

 

 

 

 

 意义:代码复用高,异常排查效率高,代码可维护性高。

Lettuce框架-行为驱动(BBD):

lettuce是基于python语言的行为驱动测试框架。(晚上想喝酒涮火锅,喝酒、涮火锅就是像个行为)

lettuce将测试用例与自动化测试代码分离,像写文本一样清晰。

 

 

 

 

 

 KDT-关键字驱动:

也称为表格驱动测试或者行为驱动测试。  将创建测试程序的步骤氛围规划和实现两个阶段。  使不懂代码的人可以完成自动化测试过程。

Robot framework就是关键字驱动的一个自动化框架,就像lettuce实现了行为驱动,使用unittest实现了单元测试。

如何收集测试报告:

 

 

 如何管理测试报告:

借助时间戳作为报告名称,防止同名覆盖

 

 

 测试邮件通知:

网易邮箱为例,设置——SMTP——使用sendReport.py

 

 

 

 

 

 

※※鲤鱼跳龙门第三招——接口自动化※※

一.fiddler工具

1.抓手机包:①pc设置端口号  ②手机wifi—高级设置—pc的ip+端口号  ③加载页面下载证书

2.数据包包含:状态码、协议类型、request、Response(header、data)

3.如何设置autoResponde:①抓请求  ②制作数据  ③设置规则

4.fiddler发送get、post请求:①构造url(get/post)  ②构造参数(get/post)  ③构造数据(post)

5.慢网速:rules——performances——simulate Modem speeds  修改代码配置速度。

6.抓https包:①fiddler相关设置  ②浏览器证书

请求报文格式是key-value形式,返回报文一般是json串。

二.postman

postman发get请求:

  构造url——构造参数——构造数据

postman发post请求:

  fiddler抓包获取数据——body里面form-data数据一致——pre-request script选globals.set——body里参数化——参数化选csv文件

postman添加检查点/断言:

  对返回值进行校验  ①返回值检查点  ②状态码检查点

  在Tests中添加

postman运行测试用例:

  ①创建collections  ②运行collections  ③手机collections结果

如何实现API框架:

用例层——testCases DDT

控制层——unittest TestReport Email

驱动层——python Requests库

python Requests API发送get请求

 

 

 python Requests API发送post请求

 

 

依赖第三方接口 :

用soapUI等工具调用第三方数据接口webservice,通过返回值看是否调用正常,也可以利用mock工具模拟第三方数据返回,最大限度降低对第三方数据依赖。

 

※※鲤鱼跳龙门第四招——持续集成※※

是指开发阶段,对项目进行持续性  自动化编译、测试,以达到控制代码质量的手段  持续集成是一件软件开发实践

1.工具:jenkins☆☆☆  buildbot  Travic CI  ……

2.jenkins搭建:①下载jenkins.war  ②命令行 java -jar jenkins.war  ③浏览器打开 http://localhost:8080

3.需要哪些配置:系统集配置(命令行)  工程级配置

 

※※鲤鱼跳龙门第五招——服务端测试工具※※

压力工具:loadrunner付费  Jmeter免费  自主研发工具

关注指标:cpu  内存(虚存、实存)  QPS(每秒请求数包括均值、峰值)  平均响应时间

服务器压力测试方法:①.搭建服务器模块,并启动服务  ②.监控进程相关指标:内存、cpu  ③.QPS(log)、平均响应时间  ④收集数据、分析曲线图  ⑤分析结果得结论

 

※※鲤鱼跳龙门第六招——兼容性测试※※

APP:

  ①系统(android、ios) 版本  ②分辨率  ③手机品牌  ④看产品用户群体  (top10)

wap:

  ①不同平台 不同浏览器  ②分辨率  ③转发到第三方平台显示

pc页面:

  ①操作系统(平板、windows、mac)  ②浏览器  ③分辨率  ④缩放、字体

中和、交叉测试  云测平台

 

※※鲤鱼跳龙门第七招——调试※※

app调bug:

  ①网络相关工具:fiddler、wareshark、charles  ②adb、am、logcat  ③云平台、bug复现

wap调bug:

  ①chrome调试工具、可设移动APP UA  ②winre,web Inspector Remote

pc调bug:

  ①chrome调试工具  ②火狐的firebug

 

posted on 2020-05-17 15:48  xmilt  阅读(559)  评论(0编辑  收藏

导航

统计