解放双手,提高生产力,这款神器你值得拥有

从石器时代开始,原始人来已经开始学会制造并使用工具,以满足自己的生活所需,这也是人类和动物最本质的区别,人类懂得制造并使用工具而动物不会。

21 世纪的现代社会更是如此,企业与企业之间是人才的竞争,而人的竞争力则严重依赖其会使用工具的多少以及熟练程度,毕竟古人有云:「君子生非异也,善假于物也」。

软件测试作为软件发布前的最后一个环节,起着至关重要的作用。虽然在很多公司里相对于开发来讲,公司对测试岗都不太重视,但这绝对不能掩盖其地位的重要性,稍有疏漏,就可能给公司带来巨大的损失。

纵观国内各公司大部分的测试工作依然都是手动完成的,这不仅是对人力资源的巨大浪费,同时还伴随着巨大的潜在风险。因为人有时候会犯错,而机器则不会。所以我们要尽可能的把可以自动化的操作交给机器去完成,从而解放我们的双手,去做一些更有意义的事情。

什么是 Appium

Appium 是一个开源的移动端自动化框架,可用于测试原生应用,移动网页应用和混合型应用,且其是跨平台的,可用于 iOS 和 Android 操作系统。这也就意味着你可以针对不同的平台使用同一套 Api 来编写测试程序,以提高代码的服用行和可维护性。

设计思想

为了更好的应对千变万化的需求,Appium 没有和某一门具体的语言绑死,开发者可以使用自己最熟悉的任何语言来使用该框架。Appium 之所以这么灵活完全得益于其优秀的设计思路,该框架使用 client-server 的设计模式,只要 server 端可以收到 client 端发送过来的请求,那么 client 端用什么语言来实现其实意义已经不大了,无关紧要。

这样的设计思想带来了巨大的好处,其一就是使框架可以做到支持多语言,其二则是可以把 server 端放在任何机器上,即使是云服务器上也完全没有问题。

入门

想必在程序圈儿的你肯定对 Hello World 不陌生,每当我们学习一个新的技术的时候基本都会写一个 Hello World 的 demo 来快速熟悉该技术,同样,今天我就带着大家做一个入门 Appium。

首先我们把环境搭建起来,依次安装下列软件。

  • Android Studio
  • JDK
  • Python 3.8
  • PyCharm
  • 网易模拟器
  • Appium 桌面版

之所以需要安装 Android Studio 完全是因为链接安卓模拟器调试 App 程序时会用到 Android SDK,而 Android Studio 附带了 Andoid SDK,固直接安装 Android Studio。另外我们选择 Appium 桌面版,是因为桌面版附带可视化操作界面,对新手比较友好。

其中前四个大家可能都比较熟悉,自行安装即可。Appium 则需从 https://github.com/appium/appium-desktop/releases/tag/v1.18.3 下载对应的版本直接安装就可以了。

安装完成后启动 Appium,Host 和 Port 默认即可,接着点击下面的配置按钮进入配置页,设置完成 Android Home 和 Java Home 后直接启动 Server 就可以了。

当看到如下界面时,恭喜你,Server 已经启动成功了。

启动成功

接下来,我们开始完善 client 端,其实就是代码而已,直接调用 Api 即可。因为我们是要通过 Appium 来操控模拟器上的 App,所以需要先将模拟器启动。命令行输入 adb devices 如果看到以下信息,则说明模拟器是正常的。

接着就是编写 client 端代码了,

1
2
3
4
5
6
7
8
9
10
11
12
13
from appium import webdriver

desired_capabilities = {
    "platformName": "Android", # 操作系统
    "deviceName": "emulator-5554", # 设备 ID
    "platformVersion": "6.0.1", # 设备版本号
    "appPackage": "com.tencent.mm", # app 包名
    "appActivity": "com.tencent.mm.ui.LauncherUI", # app 启动时主 Activity
    'noReset': True # 是否保留 session 信息 可以避免重新登录
}

driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_capabilities)
print('链接到安卓模拟器')

有了以上信息之后,我们就可以通过程序直接链接到模拟器,然后自动启动微信 App 了。

那么启动了微信 App 之后我们还可以做什么操作呢?基本上我们手动可以做的操作,程序都可以替我们完成。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
driver.find_element_by_id('com.tencent.mm:id/f8y').click()
print('查找搜索按钮')
time.sleep(3)

driver.find_element_by_id('com.tencent.mm:id/bhn').send_keys('Python 技术')
print('查找搜索输入框 & 写入搜索关键字')
time.sleep(3)

driver.find_element_by_id('com.tencent.mm:id/tm').click()
print('点击 icon 图标')
time.sleep(3)

driver.find_element_by_id('com.tencent.mm:id/cj').click()
print('点击右上角头像')
time.sleep(3)

driver.find_element_by_id('com.tencent.mm:id/a1u').click()
print('点击第一篇文章')

上面这一套代码做了什么操作呢,简言之就是通过搜索找到「Python 技术」公众号,然后再去到该公众号主页并且查看了第一篇文章。同时程序为了给 App 留出一点反应时间,我们在每次发送指令后均让程序休息 3 秒钟。

细心的你可能发现了,上述代码主要涉及到三个 Api,find_element_by_id()send_keys() 以及 click,看函数名也就知道是做什么的了。

那么,我们怎么知道某个元素的 ID 呢?这时候就又要请出我们的桌面版 Appium 了。点击「启动成功」界面右上角的放大镜图标。之后将上述程序中的配置信息添加上去,最后点击「Start Session」按钮,不出意外的话你应该能看到微信启动界面了,就是那个地球。

但是细心的你会发现,模拟器上的界面和 Appium 上的不一致,此时需要你刷新下 Appium 上的界面信息,点击下图中的刷新按钮就可以了。

如果想获取某个元素的 ID,那么则先选中选择按钮,接着选中你想要获取 ID 的元素即可。

总结

今天我们学习了自动化神器 Appium,其实该框架不仅仅只是用来做测试,其用武之地可多着呢,比如定时给女票发微信提醒她「多喝热水」,哈哈哈,小伙伴们可以发挥自己的想象力做一些好玩的工具出来哦。

示例代码:https://github.com/JustDoPython/python-examples/tree/master/doudou/2020-10-20-appium

Python Geek Tech wechat
欢迎订阅 Python 技术,这里分享关于 Python 的一切。