自动化测试可以提高软件的质量和效率,而移动自动化测试在移动互联网时代更加重要,因为它可以在各种设备上完全自动执行测试案例,从而提高测试覆盖率和减少测试周期。本文将介绍如何使用Python开发一个基于appium框架的Android自动化测试App。
## 前置条件
- Python3.6或更高版本
- 安装Android Studio和JDK
- 安装appium或appium desktop客户端
- 安装adb(Android Debug Bridge)
## 环境搭建
### 配置Python和所需模块
1. 安装pip包管理程序
在终端中输入以下命令:
```shell
sudo apt-get install python3-pip
```
2. 安装所需模块
```shell
pip3 install Appium-Python-Client
pip3 install pytest
pip3 install allure-pytest
```
### 配置Android Studio
1. 下载并安装Android Studio及相关配置
2. 安装Android SDK
在Android Studio中打开SDK Manager,选择需要的Android版本和API Level,安装并启动。
### 配置appium或appium desktop
1. 安装appium或appium desktop
appium:在终端中输入以下命令安装:
```shell
npm install -g appium
```
如果你安装了appium desktop软件,可以直接打开来代替appium。
2. 启动appium或appium desktop
appium:在终端中输入以下命令来启动appium:
```shell
appium
```
appium desktop:打开软件并点击“Start Server”按钮,等待软件启动。
## 编写测试脚本
### 第一步:启动APP
为了启动APP,我们需要连接设备并打开APP。以下是一段简单的python代码,示范如何启动APP:
```python
from appium import webdriver
# 设备连接参数
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '5.0.1'
desired_caps['deviceName'] = 'xxx'
desired_caps['appPackage'] = 'com.android.example'
desired_caps['appActivity'] = '.MainActivity'
# 启动APP
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
```
这段代码使用了webdriver模块连接设备,并启动了指定的APP。
### 第二步:编写测试案例
为了测试应用程序的各种功能,我们需要编写测试案例。后续代码示例是在测试APP登录界面验证登录功能。
```python
# coding:utf-8
import time
import pytest
from appium import webdriver
from appium.webdriver.common.touch_action import TouchAction
from appium.webdriver.common.multi_action import MultiAction
class TestLogin(object):
@classmethod
def setup_class(cls):
# 设备连接参数
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '5.0.1'
desired_caps['deviceName'] = 'xxx'
desired_caps['appPackage'] = 'com.android.example'
desired_caps['appActivity'] = '.MainActivity'
# 启动APP
cls.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
@classmethod
def teardown_class(cls):
cls.driver.quit()
@pytest.mark.parametrize("uname,password,expection", [("admin1","password1","输入错误")])
def test_login(self,uname,password,expection):
self.screenshot("登录界面")
self.driver.find_element_by_id("username").send_keys(uname)
self.screenshot("输入用户名")
self.driver.find_element_by_id("password").send_keys(password)
self.screenshot("输入密码")
action = TouchAction(self.driver)
action.tap(x=350, y=800).perform()
self.screenshot("点击登录")
time.sleep(5)
if expection == "输入错误":
text = self.driver.find_element_by_id("result").text
assert "输入错误" in text
def screenshot(self, img_name):
self.driver.get_screenshot_as_file("{}/{}.png".format("screenshot", img_name))
```
这个测试类包含了一个测试用例,该测试用例使用pytest.mark.parametrize()从数据表中读取多组测试数据,包括用户名,密码和预期结果,然后使用Appium-Python-Client的API发送相应的输入和触摸事件来执行测试,最后用assert在预期结果和实际结果上进行比较。
### 第三步:测试框架
使用pytest,并且安装allure-pytest来生成测试报告,执行以下命令来执行测试案例:
```shell
pytest --alluredir=allure_report/
```
### 第四步:生成测试报告
执行以下命令来生成测试报告:
```shell
allure generate ./allure_report/ -o ./allure_result/ --clean
```
运行上面的命令后,将在allure_result目录中生成一个report.html文件,打开文件可以查看测试报告。
## 总结
使用Python可以轻松开发Android自动化测试App,其中使用的测试框架可以根据个人喜好和需要进行选择。除了appium框架之外,还可以使用Flutter框架中的flutter_driver和dart语言开发移动自动化测试。无论使用何种开发工具和框架,自动化测试都可以提高测试质量和效率,从而为软件开发提供更好的支持。