详解基于Android的Appium+Python自动化脚本编写攻略
一、准备工作
1. 安装必要的软件
- Java环境:需要安装Java 1.8及以上版本,可以到官网下载安装包进行安装。
- Android SDK:需要在Android官网下载,安装时需要确保已经配置好环境变量。
- Appium Server:可以在 Appium 官网 下载,下载完成后双击安装即可。
- Python 3.X:可以在Python官网下载,安装时需要将python.exe添加至Path环境变量。
2. 安装Python依赖库
使用pip命令安装以下依赖库:
pip install Appium-Python-Client
pip install unittest-xml-reporting
pip install configparser
其中Appium-Python-Client是Python下连接Appium服务的客户端库,unittest-xml-reporting是生成XML格式报告的库,configparser用于读取配置文件。
3. 设置Android环境
- 手机/模拟器连接电脑,确保已启用开发者模式并开启USB调试。
- 运行adb devices查看是否能够正常连接上设备/模拟器。
二、编写测试用例
- 在Python中导入Appium接口库和unittest测试框架:
from appium import webdriver
import unittest
- 编写初始化方法,连接Appium服务并建立会话连接:
class MyTestCase(unittest.TestCase):
@classmethod
def setUpClass(cls):
desired_caps = {'platformName': 'Android',
'platformVersion': '9.0',
'deviceName': 'xxx',
'appPackage': 'com.xxx.xxx',
'appActivity': 'com.xxx.xxx.MainActivity',
'unicodeKeyboard': True,
'resetKeyboard': True}
cls.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
通过desired_caps设置设备的相关参数,包括了平台、版本、设备名、应用包名以及activity名,同时也可以设置输入法和重置输入法等。
- 通过find_element_by_XXX()方式定位元素进行操作:
def test_login(self):
self.driver.find_element_by_id('id/username').send_keys('test')
self.driver.find_element_by_id('id/password').send_keys('123456')
self.driver.find_element_by_id('id/login_button').click()
- 在tearDown()方法中销毁会话连接:
@classmethod
def tearDownClass(cls):
cls.driver.quit()
三、编写测试套件
- 创建测试套件:
def suite():
suite = unittest.TestSuite()
suite.addTest(MyTestCase("test_login"))
# 可以添加多个测试用例
return suite
- 运行测试套件并生成测试报告:
if __name__ == '__main__':
unittest.main(testRunner=xmlrunner.XMLTestRunner(output='report'))
- testRunner:指定测试运行器,默认使用TextTestRunner运行器。
- output:指定输出报告的目录,默认为当前目录。
四、配置文件
可以使用configparser读取配置文件,并在测试用例中引用配置项。
import configparser
config = configparser.ConfigParser()
config.read('config.ini')
url = config.get('test_server', 'url')
print(url)
示例
以下是一个例子,实现了一个简单的界面操作:
from appium import webdriver
import unittest
class MyTestCase(unittest.TestCase):
@classmethod
def setUpClass(cls):
desired_caps = {'platformName': 'Android',
'platformVersion': '9.0',
'deviceName': 'xxx',
'appPackage': 'com.xxx.xxx',
'appActivity': 'com.xxx.xxx.MainActivity',
'unicodeKeyboard': True,
'resetKeyboard': True}
cls.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
def test_login(self):
self.driver.find_element_by_id('id/username').send_keys('test')
self.driver.find_element_by_id('id/password').send_keys('123456')
self.driver.find_element_by_id('id/login_button').click()
def test_popup(self):
self.driver.find_element_by_id('id/popup_button').click()
popup_text = self.driver.find_element_by_id('id/popup_text').text
self.assertEqual('This is a popup window', popup_text)
@classmethod
def tearDownClass(cls):
cls.driver.quit()
def suite():
suite = unittest.TestSuite()
suite.addTest(MyTestCase("test_login"))
suite.addTest(MyTestCase("test_popup"))
return suite
if __name__ == '__main__':
unittest.main(testRunner=xmlrunner.XMLTestRunner(output='report'))
在例子中,我们编写了两个测试用例,test_login测试用例是实现了自动登录操作,test_popup测试用例是实现了弹出窗口的操作,通过assertEqual()判断是否获取到了正确的文本。
在运行测试套件后,将会生成一个report目录,其中包含了执行测试用例的报告。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解基于Android的Appium+Python自动化脚本编写 - Python技术站