篇2              安卓app自动化测试-初识python调用appium

--lamecho辣么丑

1.1概要

大家好!我是lamecho(辣么丑),上一篇也是《安卓app自动化测试》的第一篇将使用appium的准备环境做了详细的阐述。在文章结尾也提到了本篇将会对appium的相关配置,到连接真机,最后实现一个python小demo,这样本篇就类似于编程的第一课HelloWorld。如何用python连接到appium,实现在手机上对app的操作呢?一切还是以实战为主,今天我将对今日头条这个app做样例,实现一个demo。

1.2 真机连接

在我们的环境准备好后,此刻电脑桌面必有一个Appium的程序图标吧,先别着急点开,欲速则不达。由于是在真机上操作,当然要先把我们的手机准备好吧,啥?你的是苹果机,那你可以有多远那啥多远了。好了手机准备好将其与电脑连上,至于什么打开开发模式之类blabla的话我就不多说了。连接好之后运行-cmd,输入命令 adb devices回车(adb后面有空格)

结果返回如上,有一串数字字母混合的设备编号,表示手机连接正常,然后把这串编号复制一下后面会用到。

1.3 Appium配置连接

将真机成功连上电脑后,打开我们桌面的Appium,如下图

没有什么多余的配置,保持默认就好。如点开齿轮图标,进到设置界面,检查Server Address的地址是 127.0.0.1 Port端口为4723(这些都是默认的)。

然后点开android机器人图标,这里需要我们设置的内容也不多,看到Capabilities里4个配置项里Platform Name:Android;Automation Name : Appium;PlatformVersion:选择之前我们下载的sdk版本是几点几的,上一篇我们下载的是4.2的这里就选4.2就好了。不过我这里选了4.4(貌似不影响运行)。最后是Device Name填写的就是我们刚才通过adb devices命令得到的设备id号。其他的配置项忽略!

这些配置好后,点击界面右上角的三角运行图标,等待服务调起来,如下图。如果环境安装的有问题会报错,或在后面的python脚本运行后会报错,对于具体的报错要看具体的报错信息是什么。Ok步骤到这里,就要开始我们的python脚本编写了。打开我们的python脚本,我用的是PyCharm。

1.4 第一个python脚本

新建python脚本文件后,这里也可以提前把我们要测试的app准备好了。今天我们用今日头条这款app做讲解。虽然我们可以用python脚本直接安装app,但其实在实战里边我们更多的是调取已经安装好的app进行测试(一切以实战为主),当然文章中我会提及在脚本中如何安装app这样的方法。好,运行-cmd 输入adb install app所在目录(手机没断开与电脑的连接吧,用adb devices检查一下)。提醒一下在win10操作系统下,不用手动去打apk的路径,直接将文件拖到窗口里就行了。回车安装apk

等待安装的过程,我们打开python脚本,脚本内容如下:

# -*-coding:utf8-*-

from appium import webdriver

device='4d0041b1be98b01f' #此处设备号

pack='com.ss.android.article.news' #此处是我们app的package名称

activity='com.ss.android.article.news.activity.SplashActivity'#此处是我们的app的主activity

#下面的按照我的脚本内容填写即可,里边内容的意思也很清晰吧

PATH=lambda p:os.path.abspath(os.path.join(os.path.dirname(__file__),p))

desired_caps={}

desired_caps['device'] = 'android'

desired_caps['platformName']='Android'

desired_caps['browserName']=''

desired_caps['Version']='4.4.4'

desired_caps['deviceName']=device

#desired_caps['app']=PATH('D:\\jr.apk')

desired_caps['appPackage'] = pack

desired_caps['appActivity'] = activity

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

接下来重点讲讲我们脚本里几个参数的意思,pack和activity注释里也说了各自的含义,这里主要讲讲如何找到某个app的package和activity的名称。方法有很多,我这里介绍一种相对来说简单容易的,找到我们下载的app的安装包如:jinritoutiao_605.apk,将后缀改成rar压缩文件,然后右键点击打开,找到里边的AndroidManifest.xml文件,点击rar工具的查看按钮,将其打开,然后搜索‘manifest’ ,紧跟其后的就是我们要用的package名称,搜索‘activity’,同样紧跟其后的就是我们的activity名称。

当然其他的查找方法比如,在运行里 adb logcat在日志里去查找(相对麻烦)。或者暴力点找开发人员去问,当然只适合自己公司的产品。毕竟求人不如求己。

接下来替换脚本里你找到的要测试app的package和activity,就可以直接运行我们的脚本文件了。提醒一下,手机要连上电脑,Appium程序要是运行状态,前面的操作提到了。

脚本运行起来后,如果程序,环境都正常手机上会将今日头条启动起来,我们的脚本内容也就是到此为止,因为脚本中没有加任何操作,只是到启动app。如果有报错,查看Appium里的日志,分析报错原因。好了,脚本运行成功后可以查看我们的手机界面,会多了两个程序,Appium Settings和Unlock。不用管他们,也不要不明所以紧张的删掉这两个程序。讲到这里虽然我们没有在脚本里做任何操作,但是我们离app的自动化测试已经很近了,可以说走过了很大很大的一步。Give me five,祝贺一下!好了回到我们的脚本里,上文提到了如何将app安装在手机上并通过python脚本将其打开的方法,那么如何在手机上通过脚本直接安装一个app呢?看到脚本里注释掉的那句吧“#desired_caps['app']=PATH('D:\\jr.apk')”

Path里放置apk的安装包,这句话就是执行直接安装apk。

写到这里本文也差不多了,不过我们的python的demo还没完,毕竟还要去在app上操作点啥才算完美吧。首先啰嗦几句,python在实现操作点击我们手机上的app都是通过操作app界面上的各个元素,所以第一步当然是怎么找到界面上的元素的问题了。导入appium的webdriver给我提供了比较丰富的查找元素的方法,下一篇我们再具体讲解这些方法及使用。今天我们只实现一个小demo,首先观察一下今日头条的主界面,我们可以做

哪些事情呢?比如说切换标题到热点,然后再点击搜索框进入搜索页面,输入搜索文字,点击搜索按钮,等待搜索结果,直接运行如下脚本。

# -*-coding:utf8-*-

from appium import webdriver

from time import sleep

device='4d0041b1be98b01f' #此处设备号

pack='com.ss.android.article.news' #此处是我们app的package名称

activity='com.ss.android.article.news.activity.SplashActivity'#此处是我们的app的主activity

#下面的按照我的脚本内容填写即可,里边内容的意思也很清晰吧

PATH=lambda p:os.path.abspath(os.path.join(os.path.dirname(__file__),p))

desired_caps={}

desired_caps['device'] = 'android'

desired_caps['platformName']='Android'

desired_caps['browserName']=''

desired_caps['Version']='4.4.4'

desired_caps['deviceName']=device

#desired_caps['app']=PATH('D:\\jr.apk')

desired_caps['appPackage'] = pack

desired_caps['appActivity'] = activity

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

while 1:

if driver.current_activity=='.activity.MainActivity':

break

els=driver.find_elements_by_id('el')

news_t1=els[0].text

print 'news1_title:',news_t1

els=driver.find_elements_by_id('p_')

els[1].click()

while 1:

els=driver.find_elements_by_id('el')

news_t2=els[0].text

print 'news2_title:',news_t2

if news_t2!=news_t1:

break

driver.find_element_by_id('ab0').click()

while 1:

if driver.current_activity=='com.ss.android.article.base.feature.search.SearchActivity':

break

driver.find_element_by_id('ll').send_keys('lamecho')

driver.find_element_by_id('o9').click()

sleep(10)

driver.quit()

怎么样运行效果和我们前面说的操作步骤应该是一致的吧!

至此,我们的app自动化第二篇也要结束了。最后的小demo也体现了python实现自动化运行app的基本逻辑,大家如果在本篇按照我的操作一路走下来也算是在自动化测试上入门了。下一篇,我们将展开app元素这块,可能理论会更多,从如何查找定位元素,到脚本如何实现预设的执行步骤谈起,中间也会穿插一些我的心得体会,让大家对python在实现自动化测试这块少走一些弯路。最后感谢大家耐心读完本篇文章,我是lamecho,辣么丑。

原创文章,转载请注明出处。新浪微博搜索 “lamecho好棒” 欢迎大家来撩。

微博:https://weibo.com/u/6017986584

博客:http://blog.sina.com.cn/u/6017986584

篇2 安卓app自动化测试-初识python调用appium的更多相关文章

  1. 篇3 安卓app自动化测试-搞定界面元素

    篇3                 安卓app自动化测试-搞定界面元素 --lamecho辣么丑 1.1概要 大家好! 我是lamecho(辣么丑),今天是<安卓app自动化测试>的第三 ...

  2. 篇4 安卓app自动化测试-Appium API进阶

    篇4                 安卓app自动化测试-Appium API进阶 --lamecho辣么丑 1.1概要 大家好! 我是lamecho(辣么丑),今天是<安卓app自动化测试& ...

  3. sikuli+eclipse对于安卓app自动化测试的应用(第一次写博客,有些语言还不太专业,望海涵)

    Sikuli是什么? 下面是来自于官网的介绍:Sikuli is a visual technology to automate and test graphical user interfaces ...

  4. app 自动化测试 - 多设备并发 -appium+pytest+ 多线程

    1.appium+python 实现单设备的 app 自动化测试 启动 appium server,占用端口 4723 电脑与一个设备连接,通过 adb devices 获取已连接的设备 在 pyth ...

  5. 安卓App自动化测试环境

    一.appium安装 1.nodejs依赖 2..net framework 3.Appium桌面程序安装 3.1.安装包获取 3.2.安装过程 二.Java_ jdk安装 1.Java_jdk版本说 ...

  6. 移动app自动化测试

    原文出处https://www.toutiao.com/i6473606106970063374/ 原文作者是今日头条的:一个字头的诞生 在此感谢原文作者的无私分享! 移动App自动化测试(一) 目前 ...

  7. 嵌入Python | 调用Python模块中有参数的函数

    开发环境Python版本:3.6.4 (32-bit)编辑器:Visual Studio CodeC++环境:Visual Studio 2013 需求说明前一篇<在C++中嵌入Python|调 ...

  8. 初识Python,利用turtle画图

    目录 我的第三篇博客 一.初识Python 1.变量 2.注释 3.turtle库 我的第三篇博客 一.初识Python 1.变量 变量就是可变的的量,用来描述某个事物的属性.本质作用就是描述和接收变 ...

  9. app自动化测试环境安装

    一.环境依赖 app自动化测试环境如下: appium服务 第三方库appium-python-client 手机或模拟器 java环境jdk1.8 android环境 二.appium服务安装 1. ...

随机推荐

  1. UI-- Empty Application 新建空工程

    1> Empty Application  在Xcode 5 中的文件路径 : Xode 5 路径:Contents   Developer  Platforms iPhoneOS.platfo ...

  2. win10环境下jdk1.8+Android Developer Tools Build: v22.3.0-887826的问题

    最进换了新电脑,配置开发环境,最新的android studio 要求jdk1.8,所以想都没想就下载1.8. 之后为了一个原来的老项目,得使用adt,遂装之,遇到一下问题 1.ADT新建项目src下 ...

  3. Oralce Plsql 中文显示乱码问题无需修改注册表完美解决

    此方法在其它版系统也可以解决 win10-64 plsql oracle 11g绿色版客户端 错误现象: 因为oracle用的是绿色版,无法设置注册表,尝试以下方法. 解决方法: 1.在plsql中查 ...

  4. android添加权限--eclipse

    首先进入清单文件 2.点击下面的permissions----Add 3.选择Uses permission-----OK 4.选择需要的权限 5.查看代码,,已经添加完毕

  5. SpringMVC REST 风格请求介绍及简单实践

    简介 REST 即 Representational State Transfer.(资源)表现层状态转化.是目前最流行的一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方便,所以正得到越来越 ...

  6. 浅谈!SQL语句中LEFT JOIN ON WHERE和LEFT JOIN ON AND的区别

    今天的工作学习之路是一个数据库的小知识,当时没有区分出所以然,特此记录分享一下子. 众所周知,数据库的表都是单独存在的,但是当我们进行联合查询(多表查询)时,我们获得数据库返回的值时就好像在一张表里一 ...

  7. reactjs Uncaught TypeError: Cannot read property 'location' of undefined

    reactjs Uncaught TypeError: Cannot read property 'location' of undefined reactjs 路由配置 怎么跳转 不成功 国内搜索引 ...

  8. iOS开发之文件(分段)下载

    1.HTTP HEAD方法 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:0 t ...

  9. vue渐变淡入淡出轮播图

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. Java变量和对象的作用域

    大多数程序设计语言都提供了"作用域"(Scope)的概念. 对于在作用域里定义的名字,作用域同时决定了它的"可见性"以及"存在时间".在C, ...