篇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. H5 内联 SVG

    HTML5 内联 SVG HTML5 画布 HTML5 画布 vs SVG HTML5 支持内联 SVG. 什么是SVG? SVG 指可伸缩矢量图形 (Scalable Vector Graphics ...

  2. dreamweaver破解版下载地址

    dreamweaver CC 2015可以在可视化环境中设计的你网页,非常方便高效完成网页设计.Adobe Dreamweaver CC 2015支持CSS编辑器.和jQuery库代码自动完成功能等等 ...

  3. Web Storage

    前面的话 Web存储最初作为HTML5的一部分被定义成API形式,但是后来被剥离出来作为独立的一份标准了.该标准目前还在草案阶段,但其中一部分内容已经被包括IE8在内的所有主流浏览器(可交互地)实现了 ...

  4. [译]Selenium Python文档:二、初步开始

    2.1.简单使用 如果已经安装好了Selenium Python,你就可以像下面这样编写Python代码来使用它了: from selenium import webdriver from selen ...

  5. YARN 命令总结

    起因:YARN 使用capability schedule queue调度container,spark 的app卡死在YARN的队列里面无法出来,无奈请教大神时,可用[yarn applicatio ...

  6. Unity 3D Framework Designing(4)——设计可复用的SubView和SubViewModel(Part 1)

    『可复用』这个词相信大家都熟悉,通过『可复用』的组件,可以大大提高软件开发效率. 值得注意的事,当我们设计一个可复用的面向对象组件时,需要保证其独立性,也就是我们熟知的『高内聚,低耦合』原则. 组件化 ...

  7. Lvs工作原理

    DR模式的工作过程: 当一个client发送一个WEB请求到VIP,LVS服务器根据VIP选择对应的real-server的Pool,根据算法,在Pool中选择一台Real-server,LVS在ha ...

  8. 关于ng路由的传参问题(传递一个,多个参数)

    在ng的页面条转传参数的方法,ui-sref,$state Ui-sref:用于html页面进行单页面的跳转 $state:用于js代码中跳转 重点:明确传递方,接受方 [传递单个参数] 对于传递方: ...

  9. Python之路-字符编码&数据类型补充

    作业 三级菜单程序 menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{ }, '网易':{ }, 'google':{ } }, '中关村':{ '爱奇艺':{}, '汽车 ...

  10. 手机自动化测试:appium源码分析之bootstrap十六

    手机自动化测试:appium源码分析之bootstrap十六   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣 ...