Appium Server 在启动

各位小伙伴们,今天继续Appium框架的学习,阅读此文大约需要20分钟。希望小伙伴们认真的瞧一瞧。首先问大家一个问题:大家有没有在case里面start/stop Appium server? 如果有,是怎么实现的?

之前写过Java控制Appium server start/stop

采用的是封装系统cmd,事实上Appium 依然提供通用的方法。

Appium自带的 AppiumDriverLocalService 类

AppiumDriverLocalService 可以实现各种方式启动/停止Appium Server。 然后把这些方法写到测试类的父类中,就不用每次手动启动Appium Server。

默认的启动:

service = AppiumDriverLocalService.buildDefaultService();

service.start();

采用默认端口和密码

进一步优化,封装几个常用的start Appium Server的方法

简单封装AppiumDriverLocalService实现不同的需求

package main.java.com.dbyl.appiumServer;

import java.io.File;

import java.net.URL;

import io.appium.java_client.service.local.AppiumDriverLocalService;

import io.appium.java_client.service.local.AppiumServiceBuilder;

import io.appium.java_client.service.local.flags.ServerArgument;

/**

 * @author Young

 * @since 2016-11-09

 */

public class AppiumServerUtils {

public static AppiumDriverLocalService service;

public static AppiumServerUtils appiumServerUtils;

/**

 * @author young

 * @return

 */

public static AppiumServerUtils getInstance() {

if (appiumServerUtils == null) {

synchronized (AppiumServerUtils.class) {

if (appiumServerUtils == null) {

appiumServerUtils = new AppiumServerUtils();

}

}

}

return appiumServerUtils;

}

/**

 * This method is for start appium use default host and IP

 * 

 * @author young

 * @return

 */

public URL startAppiumServerByDefault() {

service = AppiumDriverLocalService.buildDefaultService();

service.start();

if (service == null || !service.isRunning()) {

throw new RuntimeException("An appium server node is not started!");

}

return service.getUrl();

}



/**

 * @author Young

 */

public void stopServer() {

if (service != null) {

service.stop();

}

}



/**

 * @author young

 * @param ipAddress

 * @param port

 * @return

 */

public URL startServer(String ipAddress, int port) {

AppiumServiceBuilder builder = new AppiumServiceBuilder();

builder.withIPAddress(ipAddress);

builder.usingPort(port);

service = AppiumDriverLocalService.buildService(builder);

service.start();

if (service == null || !service.isRunning()) {

throw new RuntimeException("An appium server node is not started!");

}

return service.getUrl();



}



/**

 * @author young

 * @param ipAddress

 * @param port

 * @param logFile

 * @param arguments

 * @return

 */

public URL startServer(String ipAddress, int port, File logFile, ServerArgument... arguments) {

AppiumServiceBuilder builder = new AppiumServiceBuilder();

builder.withIPAddress(ipAddress);

builder.usingPort(port);

builder.withLogFile(logFile);

for (ServerArgument argument : arguments) {

builder.withArgument(argument);

}

service = AppiumDriverLocalService.buildService(builder);

service.start();

if (service == null || !service.isRunning()) {

throw new RuntimeException("An appium server node is not started!");

}

return service.getUrl();

}

}

在测试用例中需要这样使用

URL url = AppiumServerUtils.getInstance().startAppiumServerByDefault();

driver = new AndroidDriver<MobileElement>(url, capabilities);

执行case,发现如下问题:ANDROID_HOME 未设置,然而已经在环境变量中设置过了,原来是eclipse执行的时候,拿不到环境变量的设置。

appium windows运行ios appium server启动_UI

可以在eclipse中设置环境变量eclipse ->Click on Run -> 点击 Run configurations。

这样就可以成功执行测试。

如下图: 

appium windows运行ios appium server启动_Server_02

后记

UI自动化测试没有那么好,慢慢的资本家发现纯UI自动化投入产出比太低,目前国内一线互联网公司已经把UI自动化的比重降低了许多,取而代之的是API和非功能测试,测试行业在近几年并没有什么新技术,我们现在用的东西都是换汤不换药的,大差不差。我总爱和相声行业对比,我们和相声艺人一样,老郭总说,相声的准入门槛太低,是个人都行。测试还不一样么,准入门槛太低,但这个行业你想做好,就必须要技术,业务能力都要很强。相声艺人拼到最后拼的是文化和身体,我们呢? 拼到最后拼的是技能(业务也是技能)和身体。