Appium 自动化测试工具使用

Categories: python

Appium是一个开源的自动化测试工具,它支持IOS平台和Android平台的原生应用、web应用和混合应用。最重要的一点是它是跨平台的,它允许只用一套API的自动化测试代码就能实现跨平台(IOS、Android)的测试,大大增加了代码的复用性。

Appium核心就是一个web服务器,它有一个服务端、客户端。服务端提供了一套RESTful的接口,它接收来自客户端的命令,根据接收到的命令在移动设备上执行,然后讲执行的结果反馈给客户端。

环境准备

在开始之前需要准备一些基本的环境。JDK、Android SDK,这两个是必须的,把环境变量配置好。如果使用npm安装还需要准备Nodejs环境。 还有就是测试的移动设备,要连接到安装Appium服务端的电脑上。然后使用adb devices命令测试下是否连接好了。

服务端

服务端是NodeJs写的一个web服务器,它可以通过npm 命令进行安装。为了方便使用Appium还有专门的桌面版,桌面版已经将NodeJs服务器啥的都封装进去了,下载安装就可以用了,省去了很多环境问题。桌面版下载地址 启动之前需要点击 Edit Configurations 按钮把Android SDK和JDK的路径配置上去。 然后就可以启动服务器了。

启动之后点击右上角的放大镜按钮,可以直接在桌面程序中启动Session,进行一些简单的脚本验证、录制、页面元素的查看等等。

上面图上看到的配置的一些参数,就是发送给服务器的请求信息,告诉了服务端一些具体的信息,比如:

按照这个配置服务端就会去查询连接上的移动设备中的KNT_AL20这个手机,然后启动上面的com.alibaba.android.rimet.biz.SplashActivity应用,这个就是钉钉的启动Activity,我这里拿钉钉登录作为测试案例。

客户端

上面服务端图形界面上面其实已经做了类似客户端要做的事情,给服务端发送命令。Appium的客户端还支持很多语言,包括Java、Ruby、Python、PHP、JavaScript 和 C# 。 这里我拿Python作为例子。 在服务端图形界面启动钉钉后,来到了钉钉登录界面,Appium工具上面有三栏内容。第一栏是app,第二栏是当前页面结构,第三栏是你选中的元素的具体信息,包括id、路径、属性等。

客户端就是利用这些页面元素和元素的属性进行操作。比如我们要登录钉钉就要填写手机号码、密码,然后点击登录按钮。

# 首先是配置脚本参数,告诉服务端要操作的手机和app
desired_caps = {
    'platformName': 'Android', 
    'platformVersion': '8.0.0', 
    'deviceName': 'KNT_AL20',
    'appPackage': 'com.alibaba.android.rimet', 
    'appActivity': '.biz.SplashActivity'
}
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

...

 # 填写手机号码
driver.find_element_by_id('com.alibaba.android.rimet:id/et_phone_input').send_keys('手机号码')
# 填写密码
driver.find_element_by_id('com.alibaba.android.rimet:id/et_pwd_login').send_keys('密码')
#  点击登录按钮
driver.find_element_by_id('com.alibaba.android.rimet:id/btn_next').click()
sleep(10)
# 结束Session
driver.quit()

客户端的api很清楚,比如 driver.find_element_by_id 根据id找到app上面的元素,比如文本框、按钮啥的,然后填写内容或者点击按钮。这些类似的api有很多,每个语言基本是类似的方式。 列举一些常用的查找元素的方式:

各种语言的样例代码在github上都能找到。样例代码

The End !