Appium 自动化测试工具使用
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,进行一些简单的脚本验证、录制、页面元素的查看等等。
上面图上看到的配置的一些参数,就是发送给服务器的请求信息,告诉了服务端一些具体的信息,比如:
- platformName 连接的移动端平台
- platformVersion 平台版本
- deviceName 设备型号
- appPackage 要启动应用的package
- appActivity 要启动应用的Activity
按照这个配置服务端就会去查询连接上的移动设备中的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有很多,每个语言基本是类似的方式。
列举一些常用的查找元素的方式:
- find_element_by_id 根据id
- find_element_by_name 根据名称
- find_element_by_class_name 根据类名
- find_element_by_xpath 根据xpath路径
各种语言的样例代码在github上都能找到。样例代码
The End !