精华内容
下载资源
问答
  • 如何做安卓手机APP的性能测试?手机APP不像web或者接口那样可以用loadrunner或者Jmeter压测。手机APP的性能应该从两方面去考虑,首先APP本身,其次就是APP后端的接口。APP自身的压测可以使用monkeyrunner产生随机...

             如何做安卓手机APP的性能测试?手机APP不像web或者接口那样可以用loadrunner或者Jmeter压测。手机APP的性能应该从两方面去考虑,首先APP本身,其次就是APP后端的接口。APP自身的压测可以使用monkeyrunner产生随机事情,点击APP的各个控件来实现持续的压力,但是这个方法无法获取到页面的响应时间,只是针对APP对随机事件的处理能力。

             APP后台接口则可以用Jmeter或者loadrunner压测。这样的做法看似没有问题,设定好将各个接口的响应时间性能指标后进行压测,只要达到了预期,那么就判断该接口的性能是正常的。实际上这个做法是不对,我们在使用APP的时候,打开一个页面不止调用一个接口,如果我们将接口的响应指标单一设定为3s,当我们打开App某个功能的时候调用了多个接口,那么打开这个功能的时间就是调用这些接口的总和,如果一个页面调用了3个接口,那么接口的响应时间是3s*3=9s,实际上相当于我们将APP的页面响应时间的性能指标设定为9s了。

            所以为了更真实的模拟用户压测APP,就需要了解使用某一个功能需要调用哪些接口。解决这一问题我们可以使用Jmeter录制APP操作脚本,下文就是针对这一问题进行讲解。

    一、设置wifi代理

    1、 首先在手机上设置wifi代理,以魅族手机为例,进入wifi设置,点击代理设置,配置ip和端口即可完成。

          备注:服务器ip和端口是电脑的ip和jmeter代理端口

          手机设置代码方式是,选择要连接的wifi,在输入密码框下面选择代理,点击手动设置,输入ip和端口即可

     

    二、Jmeter录制脚本步骤如下

    1、 新建一个Thread Group

    2、 右键WorkBench,选择HTTP(S) Test Script Recorder


    3、 选择Target Control和Grouping,Target Control设置后就会自动化放入到Thread Group里面,设置Grouping为“Put each Group in a new controller”就会自动化进行分组。分组的过程就是在打开一个页面后调用的接口集合。


    4、 点击启动


    5、 开始录制脚本:操作APP各个功能,Thread Group里面会生成接口请求。如图:

         

         分组里面是接口的请求


     

    后续就可以针对性能测试场景设置参数化、延时、集合点,事务。这里就不一 一介绍了。

    展开全文
  • 哪个软件/App可以 做安卓脚本? 目前来说 Android端的软件,就节点精灵比较靠谱,还能支持免root,安卓手机都可以运行。 官网地址 :http://www.nspirit.cn 目前来说 开发者可以免费开发,大部分辅助脚本还是免费的...

    哪个软件/App可以 做安卓脚本?

    目前来说 Android端的软件,就节点精灵比较靠谱,还能支持免root,安卓手机都可以运行。

    官网地址 :http://www.nspirit.cn

    在这里插入图片描述

    目前来说 开发者可以免费开发,大部分辅助脚本还是免费的。

    采用的lua语言编程,不是很难。

    在这里插入图片描述

    在这里插入图片描述

    展开全文
  • back get 回到app首页—————— ####电台 click 425 874 get 打开电台页面 click 507 1505 get 打开电台播放页面 click 552 1751 back get 销毁电台播放页面 back get 回到app首页—————— ####...
    #!/bin/bash
    
    ResultPath="/Users/mft/性能测试/结果/内存结果.txt"
    PackageName="cn.babyfs.android" 
    ActivityName="/.home.view.SplashActivity"
    
    #获取当前内存值
    TOTAL(){
    	adb shell dumpsys meminfo cn.babyfs.android|grep "TOTAL:"|awk -F ' ' '{print $2}'
    }
    JavaHeap(){
    	adb shell dumpsys meminfo cn.babyfs.android|grep "Java Heap:"|awk -F ':' '{print $2}'
    }
    NativeHeap(){
    	adb shell dumpsys meminfo cn.babyfs.android|grep "Native Heap:"|awk -F ':' '{print $2}'
    }
    Code(){
    	adb shell dumpsys meminfo cn.babyfs.android|grep "Code:"|awk -F ':' '{print $2}'
    }
    Stack(){
    	adb shell dumpsys meminfo cn.babyfs.android|grep "Stack:"|awk -F ':' '{print $2}'
    }
    Graphics(){
    	adb shell dumpsys meminfo cn.babyfs.android|grep "Graphics:"|awk -F ':' '{print $2}'
    }
    
    #获取当前时间
    GetTime(){
    	date +%T
    }
    #获取当前activity存活量
    ActivityNumber(){
    	adb shell dumpsys meminfo cn.babyfs.android|grep "Activities:"|awk -F ' ' '{print $4}'|tr -d "\r"
    }
    #获取当前所有存活activity的名称
    AllActivityName(){
    	adb shell dumpsys activity cn.babyfs.android|grep "ACTIVITY cn.babyfs.android/."|awk -F ' ' '{print $2}'|cut -d "/" -f 2|sed "s/./名称:/"
    }
    
    click(){
    	adb shell input tap $1 $2
    	sleep 3s
    }
    back(){
    	adb shell input keyevent 4
    	sleep 3s
    }
    home(){
    	adb shell input keyevent 3
    }
    swipeup(){
    	adb shell input swipe 540 1600 540 400
    	sleep 1s
    }
    swipedown(){
    	adb shell input swipe 540 400 540 1600
    	sleep 1s
    }
    swipeleft(){
    	adb shell input swipe 900 960 150 960
    	sleep 1s
    }
    swiperight(){
    	adb shell input swipe 150 960 900 960
    	sleep 1s
    }
    
    startapp(){
    	adb shell am start -n $PackageName$ActivityName
    	sleep 8s
    }
    
    get(){
    	echo `GetTime`,$1,`TOTAL`,`JavaHeap`,`NativeHeap`,`Code`,`Stack`,`Graphics`,`ActivityNumber`,`AllActivityName`
    }
    
    testcase(){
    	startapp
    	echo "时间","步骤","TOTAL","JavaHeap","NativeHeap","Code","Stack","Graphics","Activity存活量","Activity名称"
    #: << !
    ####文章
    	get 启动进入app首页
    	click 500 500
    	sleep 5s
    	get 打开文章页
    	back
    	get 销毁文章页
    ####儿歌循环听
    	click 165 863
    	get 打开儿歌循环听
    	click 998 769
    	click 891 376
    	get 打开儿歌播放页面
    	click 557 1733
    	back
    	get 销毁儿歌播放页面
    	back
    	get 回到app首页——————
    ####电台	
    	click 425 874
    	get 打开电台页面
    	click 507 1505
    	get 打开电台播放页面
    	click 552 1751
    	back 
    	get 销毁电台播放页面
    	back
    	get 回到app首页——————
    
    ####单词
    	click 662 857
    	swipeleft
    	get 打开单词页面
    	click 537 878
    	get 打开单词专辑页面
    	click 804 965
    	swipeleft
    	swipeleft
    	get 打开播放单词页面
    	back
    	get 销毁播放单词页面
    	back
    	get 销毁单词专辑页面
    	back
    	get 回到app首页——————
    ####动画	
    	click 992 871
    	get 打开动画页面
    	click 451 1055
    	get 打开动画播放页面
    	back 
    	get 销毁动画播放页面
    	back 
    	get 回到app首页——————
    ####视频合集、课程随心听
    	click 390 1831
    	click 550 509
    	get 打开课节列表页
    	click 297 921
    	get 打开视频合集页
    	click 558 428
    	sleep 3s
    	get 播放视频
    	back
    	get 退出播放
    	back
    	get 销毁视频合集页
    	click 786 916
    	get 打开随心听页
    	click 977 451
    	click 945 1815
    	get 播放随心听
    	back
    	click 935 1812
    	get 退出播放
    	back
    	get 销毁随心听页
    ####1.0课件
    	click 517 1214
    	click 255 1179
    	get 打开预习视频
    	back 
    	get 关闭预习视频
    	click 533 1180
    	get 进入1.0课件页面
    	swipeup
    	swipeup
    	swipeup
    	swipeup
    	swipeup
    	swipeup
    	swipeup
    	swipeup
    	swipeup
    	click 515 373
    	get 播放音频
    	click 530 1003
    	get 播放视频
    	back
    	get 退出视频
    	back
    	get 销毁1.0课件页面
    ####2.0课件
    	click 827 1174
    	get 打开课件2.0入口
    	click 438 665
    	click 782 514
    	get 看动画
    	back
    	back
    	get 退出看动画
    	click 934 660
    	get 学单词
    	click 1834 543
    	sleep 28s
    	get 跟读单词
    	back
    	get 退出学单词
    	click 1446 661
    	get 学句子
    	click 1834 543
    	sleep 40s
    	get 跟读句子
    	back
    	get 退出学句子
    	back 
    	get 退出2.0课件
    ####做作业、成长足迹
    	click 348 1389
    	sleep 4s
    	click 218 842
    	sleep 4s
    	click 900 500
    	click 1695 836
    	get 做作业
    	back 
    	get 退出作业
    	click 761 1397
    	sleep 6s
    	swipeup
    	swipeup
    	swipeup
    	get 进入成长足迹
    	back
    	get 退出成长足迹
    	back
    	back
    	get 回到app首页——————
    ####音乐课
    	click 553 1395
    	click 551 453
    	swipeup
    	swipeup
    	get 进入音乐课首页
    	click 551 1848
    	click 1803 96
    	get 音乐课场景页
    	back
    	back
    	get 销毁音乐课场景页
    	back
    	get 销毁音乐课首页
    	back
    	get 回到app首页——————	
    ####复习课
    	click 574 974
    	click 354 1224
    	click 541 1170
    	get 进入复习课首页
    	click 780 506
    	sleep 20s
    	get 播放复习课视频
    	back 
    	get 退出播放视频
    	back
    	get 退出复习课首页
    	back
    	back
    	get 回到app首页——————
    	sleep 6s
    	get 在首页静置6s
    #!
    	
    	
    	
    	
    	
    	
    		
    	
    }
    
    
    
    testcase

     

    展开全文
  • 1.AppiumAppium是一个开源测试自动化框架,可用于原生,混合和移动Web应用程序测试, 它使用WebDriver协议驱动iOS,Android和Windows应用程序。...appPackage和APPActivity的获取任意下载一个app解压...

    1.Appium

    Appium是一个开源测试自动化框架,可用于原生,混合和移动Web应用程序测试, 它使用WebDriver协议驱动iOS,Android和Windows应用程序。

    通过Appium,我们可以模拟点击和屏幕的滑动,可以获取元素的id和classname,还可以根据操作生成相关的脚本代码。

    下面开始Appium的配置。

    appPackage和APPActivity的获取

    任意下载一个app

    解压

    但是解压出来的xml文件可能是乱码,所以我们需要反编译文件。

    逆向AndroidManifest.xml

    下载AXMLPrinter2.jar文件,逆向xml文件:命令行输入以下命令:

    java -jar AXMLPrinter2.jar AndroidManifest.xml ->AndroidManifest.txt

    获得以下可以查看的TXT文件

    寻找带有launcher 的Activity

    寻找manifest里面的package

    Devicename的获取

    通过命令行输入 adb devices:

    appium的功能介绍

    下面将根据上图序号一一介绍功能:

    选中界面元素,显示元素相关信息

    模拟滑动屏幕,先点击一下代表触摸起始位置,在点击一下代表触摸结束为止

    模拟点击屏幕

    模拟手机的返回按钮

    刷新左边的页面,使之与手机同步

    记录模拟操作,生成相关脚本

    根据元素的id或者其他相关信息查找元素

    复制当前界面的xml布局

    文件退出

    2.Python的脚本

    元素定位的使用

    (1).xpath定位

    xpath定位是一种路径定位方式,主要是依赖于元素绝对路径或者相关属性来定位,但是绝对路径xpath执行效率比较低(特别是元素路径比较深的时候),一般使用比较少。

    通常使用xpath相对路径和属性定位。

    by_xpath.py

    from find_element.capability import driver

    driver.find_element_by_xpath('//android.widget.EditText[@text="请输入用户名"]').send_keys('123456')

    driver.find_element_by_xpath('//*[@class="android.widget.EditText" and @index="3"]').send_keys('123456')

    driver.find_element_by_xpath('//android.widget.Button').click()

    driver.find_element_by_xpath('//[@class="android.widget.Button"]').click()

    (2).classname定位

    classname定位是根据元素类型来进行定位,但是实际情况中很多元素的classname都是相同的,

    如用户名和密码都是clasName属性值都是:“android.widget.EditText” 因此只能定位第一个元素也就是用户名,而密码输入框就需要使用其他方式来定位,这样其实很鸡肋.一般情况下如果有id就不必使用classname定位。

    by_classname.py

    from find_element.capability import driver

    driver.find_element_by_class_name('android.widget.EditText').send_keys('123565')

    driver.find_element_by_class_name('android.widget.EditText').send_keys('456879')

    driver.find_element_by_class_name('android.widget.Button').click()

    (3).id定位

    日常生活中身边可能存在相同名字的人,但是每个人的身份证号码是唯一的,在app界面元素中也可以使用id值来区分不同的元素,然后进行定位操作。

    Appium中可以使用 find_element_by_id() 方法来进行id定位。

    driver.find_element_by_id('android:id/button2').click()

    driver.find_element_by_id('com.tal.kaoyan:id/tv_skip').click()

    3.示例:模拟软件的自动注册

    首先配置连接属性

    desired_caps={}

    # 所使用的平台

    desired_caps['platformName']='Android'

    # 所使用的手机的名字 可以通过 adb devices 获得

    desired_caps['deviceName']='127.0.0.1:62001'

    # ANDROID 的版本

    desired_caps['platforVersion']='5.1.1'

    # app 的路径

    desired_caps['app']=r'D:\extend\kaoyanbang.apk'

    # app的包名

    desired_caps['appPackage']='com.tal.kaoyan'

    # app 加载页面

    desired_caps['appActivity']='com.tal.kaoyan.ui.activity.SplashActivity'

    # 设置每次是否清除数据

    desired_caps['noReset']='False'

    # 是否使用unicode键盘输入,在输入中文字符和unicode字符时设置为true

    desired_caps['unicodeKeyboard']="True"

    # 是否将键盘重置为初始状态,设置了unicodeKeyboard时,在测试完成后,设置为true,将键盘重置

    desired_caps['resetKeyboard']="True"

    # appium服务器的连接地址

    driver=webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)

    driver.implicitly_wait(2)

    编写操作脚本

    import random

    import time

    driver.find_element_by_id('com.tal.kaoyan:id/login_register_text').click()

    username='zx2019'+'F2LY'+str(random.randint(1000,9000))

    print('username: %s' %username)

    driver.find_element_by_id('com.tal.kaoyan:id/activity_register_username_edittext').send_keys(username)

    password='zxw2018'+str(random.randint(1000,9000))

    print('password: %s' %password)

    driver.find_element_by_id('com.tal.kaoyan:id/activity_register_password_edittext').send_keys(password)

    email='51zxw'+str(random.randint(1000,9000))+'@163.com'

    print('email: %s' %email)

    driver.find_element_by_id('com.tal.kaoyan:id/activity_register_email_edittext').send_keys(email)

    #点击进入考研帮

    driver.find_element_by_id('com.tal.kaoyan:id/activity_register_register_btn').click()

    #专业选择

    driver.find_element_by_id('com.tal.kaoyan:id/activity_perfectinfomation_major').click()

    driver.find_elements_by_id('com.tal.kaoyan:id/major_subject_title')[1].click()

    driver.find_elements_by_id('com.tal.kaoyan:id/major_group_title')[2].click()

    driver.find_elements_by_id('com.tal.kaoyan:id/major_search_item_name')[1].click()

    #院校选择

    driver.find_element_by_id('com.tal.kaoyan:id/activity_perfectinfomation_school').click()

    driver.tap([(182,1557),])

    driver.find_element_by_xpath('/hierarchy/android.widget.FrameLayout/'

    'android.widget.LinearLayout/android.widget.FrameLayout/'

    'android.widget.LinearLayout/android.widget.FrameLayout/android.widget.'

    'RelativeLayout/android.widget.ExpandableListView/android.widget.'

    'LinearLayout[1]/android.widget.TextView[1]').click()

    driver.find_element_by_xpath('/hierarchy/android.widget.FrameLayout/'

    'android.widget.LinearLayout/android.widget.FrameLayout/'

    'android.widget.LinearLayout/android.widget.FrameLayout/'

    'android.widget.RelativeLayout/android.widget.ExpandableListView/'

    'android.widget.LinearLayout[4]/android.widget.TextView').click()

    time.sleep(2)

    driver.tap([(983,1354),])

    # driver.find_elements_by_id('com.tal.kaoyan:id/more_forum_title')[1].click()

    # driver.find_elements_by_id('com.tal.kaoyan:id/university_search_item_name')[1].click()

    driver.find_element_by_id('com.tal.kaoyan:id/activity_perfectinfomation_goBtn').click()

    print('注册成功')

    到此这篇关于详解基于Android的Appium+Python自动化脚本编写的文章就介绍到这了,更多相关Android的Appium+Python自动化脚本内容请搜索随便开发网以前的文章或继续浏览下面的相关文章希望大家以后多多支持随便开发网!

    展开全文
  • 一般的PHP框架都可以用来做app后台服务器。因为原理上客户端从你这边拿的都是字符串数据,所以就算你不用框架也没有问题,不过会引发后续的问题。PHP提供API给客户端就好了,API描述方式有很多种:REST、SOAP等等均...
  • 1.先查看本地ip 2.设置移动端代理,IP和端口号 3.点击启动开始执行 4.打开手机app,抓取接口 5.点击”停止”按钮,结束录制
  • 在android上,我们可以使用QPython来编写、执行Python脚本。它对很多android系统函数进行了方便的封装,使用QPython编写功能简单的小程序异常方便。这个示例是我之前用来读取手机位置信息并作为进一步处理数据的基础...
  • 1、常用软件介绍 在使用过鼠大侠,自动连点器等一...文档很详细,拿来就可以用,支持手机和电脑编写js脚本,建议使用4.0.1版本,这是一个免费的稳定版本,可以直接百度下载,只需要在手机上安装,然后导入写好的js脚本
  • r /Users/mft/性能测试/启动时间/粉笔.apk } options(){ echo -e "选择被测应用:1宝玩 2叽里呱啦 3多纳 4斑马 5粉笔 6安装app" read number case $number in 1) echo "-----测试宝玩app-----" warmbabyfs ...
  • 一、打开AppScan,选择外部设备/客户机,点击下 二、记录代理设置,可以手动输入需要的端口号,也可以自动选择。 手机配置代理: ...在手机上打开app,打开登录界面后,点击记录按钮 ...
  • 这个是免费的自动滑屏工具,可以在上面轻松滑动屏幕,可以给出正确的滑动内容,定时滑动屏幕可以自由对屏幕界面进行设置,...定时滑动屏幕工具使用说明1、首先打开软件,点击需要设置循环的脚本,再点击后方的【属...
  • App路径 (扩展名: apk, app, zip): E:\software\ayh.apk 录制服务器监听在端口: 60116 <p>DevTools listening on ws://127.0.0.1:12779/devtools/browser/09de6d2c-c512-4278-880e-9afa05cd0fae (node:8968) ...
  • 最新公司上线的app,开发童鞋从后台看到android版本会有...于是就在网上找到了控制wifi开关的shell语句,利用python编写了一个简单的控制wifi开关的脚本(因为是菜鸟,所以只能保证脚本能正常运行),下面就是代码啦,...
  • python编程入门是一款专业的编程入门学习App,致力于帮助初学者入门及提升程序员开发效率,目前已提供1000+常见编程语言教程和免费技术文档,涵盖前端开发/Python/Java/PHP等热门编程语言。是学习python编程不过多得...
  • 脚本与安装包放置在同目录下,编写以下脚本 set frameworkdir=%~dp0 adb root ping -n 3 127.0.0.1>nul pause adb remount adb push %frameworkdir%ZService-ANDR.apk /system/app pause adb reboot adb push ...
  • 很多粉丝盆友们都叫小编出一个去除广告的教程,今天小编做出来了,但是不好的地方大家指出来,接下来咱们一起去学习学习如何去除app广告。最近我的一个朋友在手机上下载了一个好玩的游戏,但他每次打开都会弹出广告...
  • Android APP签名脚本

    2020-05-23 16:22:02
    此脚的作用是未签名安卓app进行签名,在Windows系统进行运行,方便大家配置操作,直接运行signapk.bat脚本后按照提醒添加签名文件,添加需要签名的app,以及签名后app名称和路径。
  • Php教程app安卓客户端目前以及比较完善,拥有菜鸟教程网中的全部内容。教程说明PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。PHP 是免费的,并且使用非常广泛。同时,对于像微软 ASP 这样的竞争者来说...
  • //设置WebView属性,能够执行Javascript脚本 webView.getSettings().setJavaScriptEnabled(true); StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder(); StrictMode.setVmPolicy...
  • 上一篇中我我们知道monkey可以像猴子一样乱点,用来测试APP稳定性。除了乱点以外,还可以通过编写脚本形式来完成一些指定的操作。 二、MonkeyScript使用 1、编写MonkeyScript测试脚本 MonkeyScript虽然有一些指定的...
  • 星期三, 19. 九月 2018 02:19上午 - BEAUTIFULZZZZ 0)前言 本文不讨论用IDE和文本编辑器开发的...放在打包服务器上需要自动化生成APP脚本; 1)安装配置环境 安装java sudo apt-get install openjdk-8-jdk...
  • Linux 环境打包安卓App实现以及使用

    千次阅读 2019-09-10 11:08:57
    将打包工具gradle , 安卓linux环境SDK,jdk, 签名key以及框架源码在Linux固定目录下配置好,然后编写脚本来实现流程操作: 获取命令行运行参数,例如项目名称,首页地址,app名称; 判断参数是否...
  • 毕业设计-安卓APP-用户作品管理系统(前后端) 压缩包:介绍视频+Android sdk+后台代码+数据库脚本
  • 安卓免Root脚本精灵2.0.5

    万次阅读 2017-09-09 02:48:00
    你可能在使用手机的过程中,有意无意的会需要使用到重复操作某一个动作的可能,这个时候你就会想,手机有没有像类似于电脑鼠标精灵一样的,可以录制脚本的...这里分享一款安卓免Root脚本精灵app给大家,方便大家有备
  • 因为有时候我们测试某个应用程序需要先保证测试环境的干净,所以会手动卸载所有不必要的 App。而这个脚本的功能就是在知道包名的前提下,通过循环执行 adb uninstall 命令一次性卸载完指定的应用程序。 脚本的编...
  • 全能压缩app是一款非常好用的手机文件压缩管理工具软件,支持各类文件的压缩与解压缩哦,便捷高效的文件管理,支持的文件格式种类多样。全能压缩app可以在手机上下载或者浏览压缩包内的内容,喜欢的朋友赶紧来全能...
  • 自动连点器app是一款非常...软件介绍自动连点器app对各种点击类游戏有很多帮助。像疯狂点击,点击泰坦等IDLE类游戏,简单高效。自动连点器app支持屏幕单点点击、多点循环点击、点击加滑动组合等各种手势。自动连点...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 447
精华内容 178
关键字:

安卓脚本app