一、环境配置
下载Android-SDK
安装sdk其余组件
点击、D:android-sdk-windowstools 目录下的 android.bat
按照图中的实例进行勾选
![](https://www.ztloo.com/wp-content/uploads/2017/12/ea2e9a6263da91b39c7c575b51ad0b20.png)
![](https://www.ztloo.com/wp-content/uploads/2017/12/f6559e0cb03385d1c80ad9fd1388410a.png)
![](https://www.ztloo.com/wp-content/uploads/2017/12/53c52146c373dc87b971a742d62ada7a.png)
![](https://www.ztloo.com/wp-content/uploads/2017/12/ed24542f84eda28bc0b3e669ef0659eb.png)
![](https://www.ztloo.com/wp-content/uploads/2017/12/ba93ec6e2dd9e90f71202518bc123edd.png)
环境变量配置
ANDROID_HOME=D:android-sdk-windows
PATH=%ANDROID_HOME%platform-tools;%ANDROID_HOME%tools
二、windows 链接真机、模拟器
查看正在链接的设备:C:UsersAdministrator>adb devices
网易 MuMu模拟器链接:adb connect 127.0.0.1:7555
逍遥安卓模拟器链接:adb connect 127.0.0.1:21503 多开的模拟器按照端口顺序,21513、21523等
真机打开手机的开发者模式,并勾选usb调试,用usb线连接到电脑即可。
获得当前启动app的包名、类名
》adb shell dumpsys window | findstr mCurrentFocus
此命令在(D:android-sdk-windowsbuild-tools27.0.1下,配置path即可)
aapt dump badging weibo_3508.apk
//进入模拟器
C:UsersAdministrator>adb -e shell
//进入手机
C:UsersAdministrator>adb -d shell
//通过序列号进入手机
C:UsersAdministrator>adb -s 127.0.0.1:21503 shell
window上adb devices总显示emulator-5554 offline
解决netstat -ano|findstr 5555
![](https://www.ztloo.com/wp-content/uploads/2017/12/065aa891f63a7d21123ef958999e0ae3.png)
taskkill /PID 2568
三、专项测试
启动时间,cpu占比,流量,电量,内存,FPS:帧数看流畅度,过度渲染。
启动分为冷启动,热启动。
冷启动:应用程序首次启动,进程首次创建,并加载资源的过程
热启动:程序并未完全退出,例如点home键、back键退出,此时后台还有进程,再次启动称之为热启动。
启动app命令
adb shell am start -W -n package/activity
停止app命令
adb shell am force-stop packge
3.1、利用adb shell命令进行app的开启和停止
1、打开模拟器或真机,点开被测应用系统自带浏览器,并执行以下shell命令获得app的启动包名类名
adb shell dumpsys window | findstr mCurrentFocus
进入shell环境
dumpsys activity | grep mFocusedActivity
还有几种方式
aapt dump badging apk名称.apk
2、启动app、获得启动数据
adb shell am start -W -n com.android.browser/com.android.browser.BrowserActivity
3、(冷启动)强制关闭app
adb shell am force-stop com.android.browser
4、(热启动)关闭app,按back回退键
adb shell input keyevent 3
3.2、流量监控
获取浏览器的进程id
adb shell ps | findstr com.android.browser
![](https://www.ztloo.com/wp-content/uploads/2017/12/15e4c609fb2e209e554bc1e21eb6479c.png)
获取浏览器流量
adb shell cat /proc/29868/net/dev
3.3、电量监控
//查看电池信息
adb shell dumpsys battery
//切换为不充电状态
adb shell dumpsys battery set status 1
3.4、内存监控
// -d 1秒中的收集刷新频率 ,收集cpu信息到
adb shell top -d 1 | findstr browser >d:cpu1.txt
3.5、FPS&渲染过度
FPS:每秒的帧数
过度渲染:描述的是屏幕上 的某个像素在同一帧的时间内被绘制了多次。
在手机上查看fps的帧数,:设置--》打开开发模式—》GPU呈现模式分析--》在屏幕上显示为条形图*(备注:超过绿线的,是异常,容易卡顿的。
过度渲染:关闭GPU呈现模式,打开调试GPU过度绘制--》打开显示过度绘制区域。
以上命令都可以用python的os模块进行调用,进行实现,可以自行编写,童学们加入自己的业务逻辑。备注:根据脚本获取app的各项指标,来进行跟同行业的app或者之前版本对比,来度量app指标是否符合标准。
四、常用工具介绍
网易杭州QA团队开发的用于测试指定android应用性能的工具
例如可以,对开源自动化测试框架,进行封装,定制自己公司内部的自动化测试框架。
还有比较流行的云测,例如百度的MTC、阿里的MQC、腾讯的utest,基本可以代替几十个手工测试者的劳力输出。
monkey、monkeyrunner、uiautomator,如遇到单一app,不复杂的测试,这几种工具完全胜任。
如复杂些以及单元测试,以及需要经常重复测试和复杂些验证Robotium、Appium、selenium等工具。
五、python单元测试以及数据驱动框架
下载ddt并安装:Pip install ddt
DDT的使用
DDT包含类的装饰器ddt和两个方法装饰器data(直接输入测试数据),file_data(可以从json或者yaml中获取测试数据)
只有yaml和yml结尾的文件以yaml形式上传,其他情况下默认为json。
通常情况下,data中的数据按照一个参数传递给测试用例,如果data中含有多个数据,以元组,列表,字典等数据,需要自行在脚本中对数据进行分解或者使用unpack分解数据
@data(a,b)
那么a和b各运行一次用例
@data([a,d],[c,d])
如果没有unpack,那么[a,b]当成一个参数传入用例运行
如果有unpack,那么[a,b]被分解开,按照用例中的两个参数传递
@file_data(filename)
对于json的文件,每一个json元素按照一个用例运行,可以依照python分解元组,列表或者字典的方式分解传入
import unittest
from ddt import ddt,data,file_data,unpack
@ddt
class demotest(unittest.TestCase):
def setup(self):
print "this is the setup"
@data(2,3)
def testb(self,value):
print value
print "this is test b"
@data([2,3],[4,5])
def testa(self,value):
print value
print "this is test a"
@data([2, 3], [4, 5])
@unpack
def testc(self, first,second):
print first
print second
print "this is test c"
@file_data('d:/data_dic.json')
def test_dic(self,value):
print value
print 'this is dic'
@file_data('d:/data.yml')
def test_yml(self, value):
print value
print 'this is yml'
def teardown(self):
print "this is the down"
if __name__ == '__main__':
unittest.main()
#suite=unittest.TestLoader.getTestCaseNames(demotest)
#suite = unittest.TestLoader().loadTestsFromTestCase(demotest)
#unittest.TextTestRunner(verbosity=2).run(suite)
六、Appium框架 安装测试
预制环境
1、python2.7
2、pycharm
3、安卓sdk
4、jdk1.8
首先安装 pip install appium-python-client
官网下载:appium-desktop-Setup-1.2.7.exe 双击安装,并打开。
测试代码
#usr/bin/python
#encoding:utf-8
import time
from appium import webdriver
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '4.4.4'
desired_caps['deviceName'] = '127.0.0.1:21503'
desired_caps['appPackage'] = 'com.android.browser'
desired_caps['appActivity'] = '.BrowserActivity'
# 支持中文输入要添加的代码
desired_caps["unicodeKeyboard"] = "True"
desired_caps["resetKeyboard"] = "True"
#android-sdk-windowstools 下的uiautomatorviewer.bat
# 按回车键
driver.press_keycode(66)
# 释放资源,如果没进行释放,最粗暴的就是重启appium server
driver.quit()
Appium移动自动化测试入门总结:https://www.cnblogs.com/fnng/p/4540731.html
七、接口(API)测试
接口又称为API,是软件系统不同组成部分衔接的约定,比如模块与模块之间的接口,前端与后端之间的接口。
接口测试的投入和收益
投入成本:接口手动测试的技能要求不高,掌握HTTP协议即可;工具一般用fiddler,postman,学习成本较低;不过接口测试对开发文档的要求比较高,如果开发给的不正确,调试起来耗费的时间会比较长。
收益:相对于UI层面,接口的测试的收益也是巨大的,能在最短的时间发现重要的问题。
接口测试自动化的投入和收益
投入成本:接口自动化测试,一般只需要掌握一门语言,python或者java,比如python只需要掌握requests模块,与selenium、appium等工具比较起来,学习的API少,复用成本高,投入低。
另外,接口受外界因素的影响较少,比如浏览器、手机上的影响都很少。
收益:接口在迭代研发过程中,和UI相比变化非常少,自动化维护成本低,能在多个版本中复用。
这里我们大多数测试的是HTTP API
HTTP请求方法
根据HTTP标准,HTTP请求可以使用多种请求方法。
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
序号
|
方法
|
描述
|
1
|
GET
|
请求指定的页面信息,并返回实体主体。
|
2
|
HEAD
|
类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
|
3
|
POST
|
向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
|
4
|
PUT
|
从客户端向服务器传送的数据取代指定的文档的内容。
|
5
|
DELETE
|
请求服务器删除指定的页面。
|
6
|
CONNECT
|
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
|
7
|
OPTIONS
|
允许客户端查看服务器的性能。
|
8
|
TRACE
|
回显服务器收到的请求,主要用于测试或诊断。
|
开发过程中用的最多的就是 GET,POST,SO重点测试这两个接口。
1.根据HTTP规范,GET用于信息获取,类似于数据库的查询语句。
2.根据HTTP规范,POST表示可能修改变服务器上的资源的请求。 类似于你对新闻网站发表评论,因为评论在提交之后站点的资源已经被修改了。
深入链接HTTP,那去看HTTP权威指南系列:
《HTTP权威指南》读书笔记
备注:尤其是提供HTTP的WEB服务器是经常出问题的并且会偶尔进行抽疯,对于这种行为,我们的客户端一定要是兼容的。
为什么要兼容呢?因为客户端是一直在我们手机上存在的,不能由于服务器上某一次返回的异常数据导致客户端崩溃,甚至无法执行其他请求等,这样的问题我们是无法接受的。
作为客户端的测试人员来说,服务器端的资源结构有时候并不是十分了解的
这时候我们可以借助抓包工具帮助我们模拟一些假数据的返回,来检验客户端的容错性,和模拟一些假的数据发送给服务端,来验证服务端对我们发起异常请求的处理情况。
八、抓包工具Fiddler:
Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据(指cookie,html,js,css等文件,这些都可以让你胡乱修改的意思)。 Fiddler 要比其他的网络调试器要更加简单,因为它不仅仅暴露http通讯还提供了一个用户友好的格式。
原理
![](https://www.ztloo.com/wp-content/uploads/2017/12/7bd2028423d1083daa77b1e1406c1a58.png)
使用教程
基本设置
![](https://www.ztloo.com/wp-content/uploads/2017/12/56a5c28f3d2fdd884c63765bda353e83.png)
Connections选项进行勾选Allow remote.....
![](https://www.ztloo.com/wp-content/uploads/2017/12/9fcc8c0ea5e9767de27b9e6071cbb0b3.png)
退出、重启
![](https://www.ztloo.com/wp-content/uploads/2017/12/b06d72d854e1382512d58e3d28d0b14d.png)
设置断点修改请求
清空所有记录
![](https://www.ztloo.com/wp-content/uploads/2017/12/647e468a1c62314fb3d9ab9b88408f2e.png)
拦截所有到服务器的请求
![](https://www.ztloo.com/wp-content/uploads/2017/12/c2bd5c9cc3d057226a1901ed958694ce.png)
取消断点
![](https://www.ztloo.com/wp-content/uploads/2017/12/baceb2b85e05dfde5184be87d0868842.png)
修改客户端的请求
1、拦截所有客户端请求
2、修改客户端请求,通过。
![](https://www.ztloo.com/wp-content/uploads/2017/12/8798536fd6e6301164e152f0aeef5f19.png)
![](https://www.ztloo.com/wp-content/uploads/2017/12/db30851b9e3d38af88440d2a5753a8aa.png)
命令式断点:bpu www.baidu.com
取消断点:bpu
![](https://www.ztloo.com/wp-content/uploads/2017/12/1b4be2a9d1cebbe2942e380752358349.png)
设置断点respose请求
拦截所有服务端的发送数据
![](https://www.ztloo.com/wp-content/uploads/2017/12/0b883cc1c14215d15047de45130e9997.png)
取消:bpafter
可以通过AutoResponder,根据访问url的规则,来返回404错误
![](https://www.ztloo.com/wp-content/uploads/2017/12/27f1959aae3cfd1b0c002d57e523fced.png)
会话过滤
![](https://www.ztloo.com/wp-content/uploads/2017/12/b29f4181916e3732195e88f6f3c3dea3.png)
会话比较:
![](https://www.ztloo.com/wp-content/uploads/2017/12/0a4fc17a7bc77e355a35844b90cfc66a.png)
标红,黄的是不同的内容
![](https://www.ztloo.com/wp-content/uploads/2017/12/73352dcdd0796c1b07a2deb014391809.png)
编码工具
![](https://www.ztloo.com/wp-content/uploads/2017/12/168f7f10ecee0867bcdf3ceae11e3135.png)
![](https://www.ztloo.com/wp-content/uploads/2017/12/61870008c147de833ef1284629c3a12d.png)
HOST文件配置
![](https://www.ztloo.com/wp-content/uploads/2017/12/7b5eaa1c61d24e2d78868581ca5d3c90.png)
取消的时候,直接取消掉Enable前面的勾选,对原windows上不做任何更改。
![](https://www.ztloo.com/wp-content/uploads/2017/12/b24578eb27096a3b21bf5fd737b797d0.png)
构造HTTP请求
![](https://www.ztloo.com/wp-content/uploads/2017/12/b67e68e80b9c4acbbdc93b4618a70f35.png)
![](https://www.ztloo.com/wp-content/uploads/2017/12/04653d01067138f04a5f8ccf86ab8eb4.png)
构造上图类似的post请求
![](https://www.ztloo.com/wp-content/uploads/2017/12/3b0869fb08e3eac2f2d6df958f04e8e9.png)
![](https://www.ztloo.com/wp-content/uploads/2017/12/9014cde69a53815a9664ffabdaa2ae42.png)
抓取手机上的包
![](https://www.ztloo.com/wp-content/uploads/2017/12/7cf16ebd4c8e72f187b84b555a59d5c4.png)
![](https://www.ztloo.com/wp-content/uploads/2017/12/bbdd6f508cc1c412e15c365e23a4fc12.png)
![](https://www.ztloo.com/wp-content/uploads/2017/12/f0a970d0d61518388267c3273cea666e.png)
因为安全证书的问题,需要导入fiddler的安全证书到设备里面
![](https://www.ztloo.com/wp-content/uploads/2017/12/046d917011155cf70b295309a824c133.png)
![](https://www.ztloo.com/wp-content/uploads/2017/12/674d98c1c03506b59ce79d8a5f7444ad.png)
(备注,可能需要设置个锁屏密码哦!)
Postman
Postman是一款功能强大的网页调试与发送网页HTTP请求的插件
因为PostMan有录制,http请求,并批量录制与回放功能,比Fiddler更加强大,并且有断点功能。Tests.
一次构造,次次运行。
测试同乐学堂评论的post接口。
(get请求就不模拟了,因不发送数据,只需header信息即可。)
![](https://www.ztloo.com/wp-content/uploads/2017/12/66e096d6f00fb6bd5770e5c20504ec6f.png)
![](https://www.ztloo.com/wp-content/uploads/2017/12/9323928b13c38e8dcbd23f3716ff7db8.png)
![](https://www.ztloo.com/wp-content/uploads/2017/12/b9cfa904298658075d10e87b572b48dc.png)
具体教程
虽然PostMan对模拟HTTP请求如此强大,但是遇到量级的网站,还是app它们的HTTP,请求那可是成千上万,最终还得依靠自动化测试手段。
持续集成
持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。
价值:
1、减少风险
2、减少重复过程
3、任何时间、任何地点生成可部署的软件
4、增强项目的可见性
5、建立团队对开发产品的信心
工具的准备:
代码管理工具:(git、github)
集成工具:(Jenkins)
Git是一款免费、开源的分布式版本控制系统
Github是用Git做版本控制的代码托管平台
![](https://www.ztloo.com/wp-content/uploads/2017/12/87af25ce49790a10afe14ccac0ee4802.png)
1. 下载Jenkins。
2. 打开下载目录中的终端。
3. 运行java -jar jenkins.war --httpPort=8080
5. 按照说明完成安装。
安装完成后,您可以开始将Jenkins工作!
STEP1:copy密码进行登录
![](https://www.ztloo.com/wp-content/uploads/2017/12/2180cf4cf35903d079ad2b50d1019dc0.png)
STEP2:安装建议插件
![](https://www.ztloo.com/wp-content/uploads/2017/12/a704f9dc1fedb9ff1d6d3ff81304df05.png)
STEP3:默认登陆
![](https://www.ztloo.com/wp-content/uploads/2017/12/8eda5c4b84025f8a1c9573250451f51f.png)
STEP4:修改admin账户密码为:admin
![](https://www.ztloo.com/wp-content/uploads/2017/12/bc708fdbe940ba31b15dd77f554648be.png)
STEP5:设置GitHub Servers,把github生成的token秘钥黏贴过来。
![](https://www.ztloo.com/wp-content/uploads/2017/12/8abd3936a61d6d202a0e38dd4237cd1a.png)
本地安装git略~
STEP6:创建任务
![](https://www.ztloo.com/wp-content/uploads/2017/12/a97a6b4ee720094c301c1454f3e03ab7.png)
step7:配置任务
![](https://www.ztloo.com/wp-content/uploads/2017/12/d9c1ec7180c6f5575dbe323364ad89e8.png)
然后进行配置从github上下载Emmagee.apk的源码进行重新编译和打包成APK.
STEP8:源码管理
![](https://www.ztloo.com/wp-content/uploads/2017/12/0d28a20eb0e9e1ec9187aff4034510e0.png)
![](https://www.ztloo.com/wp-content/uploads/2017/12/94714d8171fa095991e00b023d362b47.png)
STEP8:构建管理
![](https://www.ztloo.com/wp-content/uploads/2017/12/e512b7e2addff5a6e399869717631ef2.png)
STEP9:立即构建。并双击打开任务# 1,
![](https://www.ztloo.com/wp-content/uploads/2017/12/f2e0d1ff7d110646b49f9f9c003397d7.png)
STEP10:查看构建信息。
![](https://www.ztloo.com/wp-content/uploads/2017/12/77b168414d7dba1afa5770bfbe330319.png)
构建的输出信息
![](https://www.ztloo.com/wp-content/uploads/2017/12/423ea68a98a0d6767d5fbaf39b310516.png)
生成apk路径。
C:UsersAdministrator.jenkinsworkspaceAutoTestappbuildoutputsapkapp-debug.apk
STEP11:构建步骤,安装apk、并运行monkey产生相对应的随机事件流。
![](https://www.ztloo.com/wp-content/uploads/2017/12/0cfef84490776f25feac942ac22d8994.png)
链接到安卓模拟器,开始从github下载安卓app源代码,编译并构建,然后并发送到安卓模拟器,进行随机测试。
![](https://www.ztloo.com/wp-content/uploads/2017/12/181c3d34cafbb030b22fa681425d55e1.png)
一个用集成工具,打包编译到安装到随机测试,一键执行!
如果代码敲的六的童鞋,可以自行实现整个过程。
step1:从github上 clone下来。并编译。
step2: gradle构建源代码变apk文件。
step3:adb 命令强制安装apk。
step4:执行monkey 随机事件。
参考:appium自动化测试教程 http://edu.51cto.com/course/12630.html