一、Appium的安装与配置
1、安装Appium
要使用Appium框架完成自动化测试,我们需要先安装Appium,可以到Appium官网下载对应版本的Appium进行安装。安装完毕后,可以在命令行中输入appium -v命令查看是否安装成功。
$ npm install -g appium
$ appium -v
2、安装iOS和Android平台支持组件
在使用Appium进行自动化测试时,需要根据不同平台安装和配置对应的支持组件,比如Android SDK、Java JDK、Xcode等。
针对Android平台,需要安装Android SDK,并通过SDK Manager下载对应的API版本和模拟器镜像。同时需要安装Java JDK,并配置环境变量。
针对iOS平台,需要安装Xcode和Xcode Command Line Tools,并配置相关环境变量。
3、创建模拟器
在Android模拟器使用前,需要先通过AVD Manager创建一个AVD(Android Virtual Device)。在Xcode中也可以通过Simulator创建对应的iOS模拟器。
//创建Android模拟器
$ android avd
//启动iOS模拟器
$ open -a Simulator
二、Appium自动化测试基础
1、Appium API的基本使用
在Appium中,可以通过WebDriver API和Mobile JSON Wire Protocol API进行自动化测试操作。其中WebDriver API提供了一些基本的测试操作,比如点击、滑动、输入等。而Mobile JSON Wire Protocol API可以对APP进行比较深入的操作,比如切换context、获取当前activity等。
//通过WebDriver API在APP上进行点击操作
driver.findElement(By.id("com.example.app:id/button")).click();
//通过Mobile JSON Wire Protocol API启动APP
driver.executeScript("mobile: launchApp", args);
2、Appium自动化测试框架架构
Appium自动化测试框架主要包括3个部分,分别是Appium Server、测试脚本和测试设备。其中Appium Server提供了对设备的管理和测试脚本的执行环境;测试脚本是针对具体APP编写的具体测试用例;测试设备包括真机和虚拟设备。
//启动Appium Server
$ appium
//编写测试脚本
driver.findElement(By.id("com.example.app:id/button")).click();
//连接测试设备
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("deviceName", "iPhone 11");
capabilities.setCapability("platformName", "iOS");
capabilities.setCapability("platformVersion", "14.0.1");
capabilities.setCapability("app", "/path/to/app/file");
IOSDriver driver = new IOSDriver(new URL("http://localhost:4723/wd/hub"), capabilities);
三、Appium自动化测试框架的优化
1、利用Page Object模式精简测试脚本
在APP自动化测试过程中,我们可能会编写很多测试脚本来测试APP的各种功能。使用Page Object模式可以将脚本中的元素定位和业务逻辑分离,使得测试脚本更加简洁易懂。
//Page Object示例代码
public class LoginPage {
private AppiumDriver
driver;
private MobileElement usernameInput;
private MobileElement passwordInput;
private MobileElement loginButton;
public LoginPage(AppiumDriver
driver) {
this.driver = driver;
PageFactory.initElements(new AppiumFieldDecorator(driver), this);
}
public void inputUsername(String username) {
usernameInput.sendKeys(username);
}
public void inputPassword(String password) {
passwordInput.sendKeys(password);
}
public void clickLoginButton() {
loginButton.click();
}
}
//测试脚本示例代码
LoginPage loginPage = new LoginPage(driver);
loginPage.inputUsername("example");
loginPage.inputPassword("password");
loginPage.clickLoginButton();
2、使用数据驱动优化测试用例
在编写测试脚本时,可能会遇到大量重复的测试用例,这会导致代码冗余和可维护性下降。使用数据驱动的方法,将测试数据和测试逻辑分离,可以降低测试用例的重复编写。
//使用TestNG中的@DataProvider注解
@DataProvider(name = "loginData")
public Object[][] loginDataProvider() {
return new Object[][] {
{"username1", "password1"},
{"username2", "password2"},
{"username3", "password3"}
};
}
//测试脚本中传入测试数据
@Test(dataProvider = "loginData")
public void testLogin(String username, String password) {
LoginPage loginPage = new LoginPage(driver);
loginPage.inputUsername(username);
loginPage.inputPassword(password);
loginPage.clickLoginButton();
}
四、Appium自动化测试框架的高级应用
1、利用Appium提供的Hooks实现自动化测试的前置条件和后置处理
通过Hooks,我们可以在Appium自动化测试流程中加入前置条件或者后置处理,比如在测试用例执行前先启动APP,或者在测试用例执行结束后关闭APP。
//使用TestNG中的@BeforeSuite注解
@BeforeSuite
public void startApp() {
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("deviceName", "iPhone 11");
capabilities.setCapability("platformName", "iOS");
capabilities.setCapability("platformVersion", "14.0.1");
capabilities.setCapability("app", "/path/to/app/file");
driver = new IOSDriver(new URL("http://localhost:4723/wd/hub"), capabilities);
}
//使用TestNG中的@AfterSuite注解
@AfterSuite
public void closeApp() {
driver.quit();
}
2、利用Appium提供的Grid实现多设备并发测试
通过Grid,我们可以将多个设备连接到同一个Appium Server上,并行执行多个测试用例,提高测试效率。
//启动一个Appium Server节点
$ appium --port 4723 --nodeconfig /path/to/nodeconfig.json
//nodeconfig.json示例代码
{
"capabilities":
[
{
"browserName": "android",
"deviceName": "deviceOne",
"platformName": "ANDROID"
},
{
"browserName": "iphone",
"deviceName": "deviceTwo",
"platformName": "IOS"
}
],
"configuration":
{
"cleanUpCycle":2000,
"timeout":30000,
"proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
"url":"http://localhost:4723/wd/hub",
"host":"localhost",
"port": 4723,
"maxSession": 1,
"register": true,
"registerCycle": 5000,
"hubPort": 4444,
"hubHost": "localhost"
}
}
五、总结
本文详细阐述了如何掌握Appium的安装与配置、自动化测试基础、自动化测试框架优化和高级应用。通过学习本文的内容,我们可以掌握Appium自动化测试框架的全部技能,打造优秀的Appium自动化测试框架。