实验简介

  对于APP测试来讲, 除了进行功能测试以外, 安装和卸载其实也是一个很重要的测试项.

  试想, 如果用脚本来实现了, 可以事先判断该应用是否已安装, 根据判断结果来执行安装和卸载的动作, 循环它个1000遍, 顺便还可以把安装卸载的稳定性测试也一并做了, 想想还是蛮美好的呢!

实验目的

  1. 使用Python + Appium实现apk的安装

  2. 使用Python + Appium实现apk的卸载

  3. 使用Python + Appium实现apk的关闭或启动等其它操作

实验流程

  1. 安装应用

    安装应用到设备中去。需要apk包的路径。上代码.

from appium import webdriver

desired_caps = {}
desired_caps['platformName'] = 'Android' #设备系统
desired_caps['platformVersion'] = '' #设备系统版本
desired_caps['deviceName'] = 'Android Emulator' #设备名称
# 测试apk包的路径
apk_path = r'E:\Python\APPTest\ContactManager.apk'
desired_caps['app'] = apk_path driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
# 安装apk
driver.install_app(apk_path) # 判断该apk是否安装, 结果为True/False
is_installed = driver.is_app_installed('com.example.android.contactmanager')
if is_installed:
print('安装成功.')
else:
print('安装失败.') driver.quit()

    由于apk还没有安装成功, 该apk的activity信息还没有, 所以一定不要加上, 否则会报错的.

  2. 卸载应用

    从设备中删除一个应用。上代码.

from appium import webdriver

desired_caps = {}
desired_caps['platformName'] = 'Android' #设备系统
desired_caps['platformVersion'] = '' #设备系统版本
desired_caps['deviceName'] = 'Android Emulator' #设备名称
desired_caps['appPackage'] = 'com.example.android.contactmanager'
desired_caps['appActivity'] = '.ContactManager' driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) # 判断该apk是否安装, 结果为True/False
is_installed = driver.is_app_installed('com.example.android.contactmanager')
print(is_installed)
driver.remove_app('com.example.android.contactmanager')
is_installed = driver.is_app_installed('com.example.android.contactmanager')
print(is_installed)
driver.quit()

  3. 关闭应用

    关闭打开的应用,默认关闭当前打开的应用,所以不需要入参。这个方法并非真正的关闭应用,相当于按home键将应用置于后台,可以通过launchApp()再次启动。

driver.closeApp()

  4. 启动应用

    你一定很迷惑,不是在初始化的配置信息已经指定了应用,脚本运行的时候就需要启动应用,为什么还要有这个方法去启动应用呢?当应用置于后台之后, 再次唤醒罢了.

    重新启动应用也是一个测试点,该方法需要配合closeApp()使用的。

driver.closeApp();
driver.launchApp();

  5. 检查应用是否安装

    检查应用是否已经安装。需要传参应用包的名字。返回结果为Ture或False。在安装卸载的代码中我们已经使用过该方法.

driver.is_app_installed('com.example.android.contactmanager')

  6. 将应用置于后台

    将当前活跃的应用程序发送到后台。这个方法需要入参,需要指定应用置于后台的时长。

driver.runAppInBackground(2);

  7. 应用重置

    重置当前被测程序到出始化状态。该方法不需要入参。

    其实就是先closeApp然后在launchAPP

driver.resetApp();

    

Appium移动自动化测试(五)之应用操作的更多相关文章

  1. Appium移动自动化测试(三)--安装Android模拟器(转)

    Appium移动自动化测试(三)--安装Android模拟器 2015-06-08 10:33 by 虫师, 30828 阅读, 9 评论, 收藏, 编辑 当Android SDK安装完成之后,并不意 ...

  2. Appium移动自动化测试(四)--one demo

    继续更新. -------------------------------------------- 第四节  安装Appium Client Appium Client是对webdriver原生ap ...

  3. Appium移动自动化测试(四)--one demo(转)

    Appium移动自动化测试(四)--one demo 2015-06-15 20:41 by 虫师, 40514 阅读, 34 评论, 收藏, 编辑 继续更新. ------------------- ...

  4. Appium移动自动化测试(二)--安装Android开发环境(转)

    Appium移动自动化测试(二)--安装Android开发环境 2015-06-04 17:30 by 虫师, 35299 阅读, 23 评论, 收藏, 编辑 继续Appium环境的搭建. 第二节   ...

  5. Appium移动自动化测试(一)--安装Appium(转)

    Appium移动自动化测试(一)--安装Appium 2015-05-30 17:48 by 虫师, 70668 阅读, 13 评论, 收藏, 编辑 Appium 自动化测试是很早之前就想学习和研究的 ...

  6. 手机自动化测试:搭建appium手机自动化测试开发环境

    手机自动化测试:搭建appium手机自动化测试开发环境   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大 ...

  7. mac上搭建appium+IOS自动化测试环境(一)

    阅读须知 由于OS X系统最近才开始接触,所以有些东西也不是很清楚,这里只提供方法不提供原理,能解释清楚的我也会尽量解释.可能也有一些地方说的不严谨或有错的,还望大家指点一二. 实验环境 操作系统: ...

  8. Python Appium 滑动、点击等操作

    Python Appium 滑动.点击等操作 1.手机滑动-swipe # FileName : Tmall_App.py # Author : Adil # DateTime : 2018/3/25 ...

  9. appium+python自动化测试

    appium+python自动化测试 标签(空格分隔): appium 获取APP的包名 1.aapt即Android Asset Packaging Tool,在SDK的build-tools目录下 ...

随机推荐

  1. LeetCode NO477.汉明距离总和

    两个整数的 汉明距离 指的是这两个数字的二进制数对应位不同的数量. 计算一个数组中,任意两个数之间汉明距离的总和. 示例: 输入: 4, 14, 2 输出: 6 解释: 在二进制表示中,4表示为010 ...

  2. python基础编程:生成器、迭代器、time模块、序列化模块、反序列化模块、日志模块

    目录: 生成器 迭代器 模块 time 序列化 反序列化 日志 一.生成器 列表生成式: a = [1,2,3,3,4,5,6,7,8,9,10] a = [i+1 for i in a ] prin ...

  3. Python tuple元组学习

    1.tuple和list非常类似,但是tuple一旦初始化就不能修改 classmates = ('Michael', 'Bob', 'Tracy') 现在,classmates这个tuple不能变了 ...

  4. 学习使用C语言实现线性表

    线性表是最常用且最简单的一种数据结构.一个线性表是n个数据元素的有限序列,序列中的每个数据元素,可以是一个数字,可以是一个字符,也可以是复杂的结 构体或对象.例如:1,2,3,4,5是一个线性表,A, ...

  5. 吐槽一下jsoup

    网络爬虫的本质就是通过域名加上特定的路由方式与远程资源建立一个短暂的连接,然后通过io流的方式读取.然后说一下jsoup,jsoup可以说是目前的爬虫工具包里面对java底层的工具类封装最简单的一种了 ...

  6. Jmeter:非 GUI 命令行执行脚本文件

    介绍 进行性能测试时,Jmeter 官方文档声明是不建议在 GUI 执行的,此时需要用到命令行. 第一步:环境配置 把 Jmeter安装目录\bin 添加到 系统环境变量path 第二步:命令参数 - ...

  7. js创建对象的几种方式(工厂模式、构造函数模式、原型模式)

    普通方法创建对象 var obj = { name:"猪八戒", sayname:function () { alert(this.name); } } var obj1 = { ...

  8. BZOJ 1692: [Usaco2007 Dec]队列变换 (后缀数组/二分+Hash)

    跟BZOJ 4278: [ONTAK2015]Tasowanie一模一样 SA的做法就是把原串倒过来接在原串后面,O(nlogn)O(nlogn)O(nlogn)做后缀数组,就能O(1)O(1)O(1 ...

  9. 洛谷P3810-陌上开花(三维偏序, CDQ, 树状数组)

    链接: https://www.luogu.org/problem/P3810#submit 题意: 一个元素三个属性, x, y, z, 给定求f(b) = {ax <= bx, ay < ...

  10. js上传超大文件解决方案

    需求: 支持大文件批量上传(20G)和下载,同时需要保证上传期间用户电脑不出现卡死等体验: 内网百兆网络上传速度为12MB/S 服务器内存占用低 支持文件夹上传,文件夹中的文件数量达到1万个以上,且包 ...