Appium Server 在启动
各位小伙伴们,今天继续Appium框架的学习,阅读此文大约需要20分钟。希望小伙伴们认真的瞧一瞧。首先问大家一个问题:大家有没有在case里面start/stop Appium server? 如果有,是怎么实现的?
之前写过Java控制Appium server start/stop
http://www.cnblogs.com/tobecrazy/p/5118170.html
采用的是封装系统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执行的时候,拿不到环境变量的设置。
可以在eclipse中设置环境变量eclipse ->Click on Run -> 点击 Run configurations。
这样就可以成功执行测试。
如下图:
后记
UI自动化测试没有那么好,慢慢的资本家发现纯UI自动化投入产出比太低,目前国内一线互联网公司已经把UI自动化的比重降低了许多,取而代之的是API和非功能测试,测试行业在近几年并没有什么新技术,我们现在用的东西都是换汤不换药的,大差不差。我总爱和相声行业对比,我们和相声艺人一样,老郭总说,相声的准入门槛太低,是个人都行。测试还不一样么,准入门槛太低,但这个行业你想做好,就必须要技术,业务能力都要很强。相声艺人拼到最后拼的是文化和身体,我们呢? 拼到最后拼的是技能(业务也是技能)和身体。
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走
这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助…….
如果你不想再体验一次自学时找不到资料,没人解答问题,坚持几天便放弃的感受的话,可以加入下方我的qq群大家一起讨论交流,里面也有各种软件测试资料和技术交流。