快乐学习
前程无忧、中华英才非你莫属!

Android专项测试入门

一、环境配置
下载Android-SDK
安装sdk其余组件
点击、D:android-sdk-windowstools  目录下的 android.bat
按照图中的实例进行勾选
环境变量配置
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
     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

获取浏览器流量
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应用性能的工具
例如可以,对开源自动化测试框架,进行封装,定制自己公司内部的自动化测试框架。
appiumSelenium开源工具封装而成的自动化app和web测试工具
还有比较流行的云测,例如百度的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"
driver = webdriver.Remote('http://localhost:4723/wd/hub';, desired_caps)
#android-sdk-windowstools 下的uiautomatorviewer.bat
driver.find_element_by_id("url").send_keys("https://www.baidu.com";)
# 按回车键
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通讯还提供了一个用户友好的格式。
原理
使用教程
基本设置
Connections选项进行勾选Allow remote.....
退出、重启

设置断点修改请求
清空所有记录
拦截所有到服务器的请求
取消断点
修改客户端的请求
1、拦截所有客户端请求
2、修改客户端请求,通过。
命令式断点:bpu www.baidu.com
取消断点:bpu

设置断点respose请求

拦截所有服务端的发送数据
拦截指定域名的服务器端命令:bpafter www.baidu.com
取消:bpafter
可以通过AutoResponder,根据访问url的规则,来返回404错误

会话过滤
会话比较:
标红,黄的是不同的内容
编码工具
HOST文件配置
取消的时候,直接取消掉Enable前面的勾选,对原windows上不做任何更改。
构造HTTP请求

构造上图类似的post请求
抓取手机上的包
因为安全证书的问题,需要导入fiddler的安全证书到设备里面 
(备注,可能需要设置个锁屏密码哦!)

Postman
Postman是一款功能强大的网页调试与发送网页HTTP请求的插件
因为PostMan有录制,http请求,并批量录制与回放功能,比Fiddler更加强大,并且有断点功能。Tests.
一次构造,次次运行。
测试同乐学堂评论的post接口。
(get请求就不模拟了,因不发送数据,只需header信息即可。)
具体教程
虽然PostMan对模拟HTTP请求如此强大,但是遇到量级的网站,还是app它们的HTTP,请求那可是成千上万,最终还得依靠自动化测试手段。

持续集成
持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。
价值:
1、减少风险
2、减少重复过程
3、任何时间、任何地点生成可部署的软件
4、增强项目的可见性
5、建立团队对开发产品的信心
工具的准备:
代码管理工具:(git、github)
集成工具:(Jenkins)
Git是一款免费、开源的分布式版本控制系统
Github是用Git做版本控制的代码托管平台

1. 下载Jenkins。

2. 打开下载目录中的终端。
3. 运行java -jar jenkins.war --httpPort=8080
4. 浏览到http://localhost:8080
5. 按照说明完成安装。

安装完成后,您可以开始将Jenkins工作!

STEP1:copy密码进行登录
STEP2:安装建议插件
 
STEP3:默认登陆
STEP4:修改admin账户密码为:admin
STEP5:设置GitHub Servers,把github生成的token秘钥黏贴过来。
本地安装git略~
STEP6:创建任务
step7:配置任务
   然后进行配置从github上下载Emmagee.apk的源码进行重新编译和打包成APK.
STEP8:源码管理
STEP8:构建管理
STEP9:立即构建。并双击打开任务# 1,
STEP10:查看构建信息。
构建的输出信息
生成apk路径
C:UsersAdministrator.jenkinsworkspaceAutoTestappbuildoutputsapkapp-debug.apk
STEP11:构建步骤,安装apk、并运行monkey产生相对应的随机事件流。
链接到安卓模拟器,开始从github下载安卓app源代码,编译并构建,然后并发送到安卓模拟器,进行随机测试。
一个用集成工具,打包编译到安装到随机测试,一键执行!
如果代码敲的六的童鞋,可以自行实现整个过程。
step1:从github上 clone下来。并编译。
step2:   gradle构建源代码变apk文件。
step3:adb 命令强制安装apk。
step4:执行monkey 随机事件。
参考:appium自动化测试教程  http://edu.51cto.com/course/12630.html

打赏
赞(0) 打赏
未经允许不得转载:同乐学堂 » Android专项测试入门

特别的技术,给特别的你!

联系QQ:1071235258QQ群:710045715

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

error: Sorry,暂时内容不可复制!