篇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. eclipse和myeclipse设置默认编码格式为UTF-8

    1:jsp页面设置默认为utf-8 以eclipse为例 2:java界面设置: Window->Preferences->General->Workspace 面板Text fil ...

  2. web CSS的知识- 关于后代选择器,子选择器,兄弟选择器的使用

    1. 后代选择器官方解释:后代选择器可以选择作为某元素后代的元素.理解:选择某一标签的后代中,所有的此标签标记例:ul em {color:red;}就是选择,h1标签后代中中,所有的em.代码如下: ...

  3. postman断言作用及怎么使用

    这段时间一直在学习postman,在请求中使用断言,很多人不是很了解postman断言,其实呢,postman断言是JavaScript语言编写的,在postman客户端指定区域编写即可. 1.设置环 ...

  4. javascript中的字符串编码、字符串方法详解

    js中的字符串是一种类数组,采用UTF-16编码的Unicode字符集,意味字符串的每个字符可用下标方式获取,而每个字符串在内存中都是一个16位值组成的序列.js对字符串的各项操作均是在对16位值进行 ...

  5. rgba()和opacity的使用

    rgba()表示 红 绿 蓝 alpha ,W3C指在原有的rgb颜色模型之后增加了 “alpha”参数,“可以让制定的颜色透明化”(rgb()上扩展的,其只可以设置颜色,而不能使设置的颜色透明化) ...

  6. 在线阅读PDF文件js插件——pdf.js

    最近接到一个需求大致是这样的,要求在移动端和pc端能够在线阅读pdf文件,类似百度文库的功能. 首先想到的就是插件,github(全球最大的男性交友网站- -恩)上一大堆啊,首先找到一个PDFobje ...

  7. poptest分享计划以及提供的服务

    poptest分享计划以及提供的服务 POPTEST致力于测试开发工程师的培养,能让学员经过系统培训后从事自动化测试工作,包括功能自动化.性能自动化.接口自动化以及移动端系统的自动化测试等,由于移动端 ...

  8. 5.Redis常用命令:Hash

    我们可以将Redis中的Hashes类型看成具有String Key和String Value的map容器.所以该类型非常适合于存储值对象的信息.如Username.Password和Age等.如果H ...

  9. js动弹特效

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. JavaScript Break 和 Continue 语句

    1.break:终止本层循坏,继续执行本次循坏后面的语句: 当循坏有多层时,break只会跳过一层循坏 2.continue:跳过本次循坏,继续执行下次循坏 对于for循环,continue执行后,继 ...