您的位置:首页 > 移动开发

eclipse+appium+AndroidSDK 安卓自动化测试环境搭建

2017-12-28 11:35 1031 查看
网上有很多环境搭建的教程,搭建方式、使用工具都各有不同,很多只是说了搭建的步骤并没有说明具体某个配置是做什么用的,使得新手搭建环境时一头雾水。

下面说一下我自己在win10搭建环境的过程:

先普及一下appium的工作原理,不然大家很难理解环境为什么这么搭建,以及为什么需要这些工具:

首先Appium是一个开源、跨平台的测试框架,可以用来测试原生及混合的移动端应用。Appium是C/S结构,支持Selenium WebDriver支持的所有语言,如java、Object-C、JavaScript、Php、Python、Ruby、C#。

Appium支持IOS、Android及FirefoxOS平台。Appium使用WebDriver的json wire协议,来驱动Apple系统的UIAutomation库、Android系统的UIAutomator框架。



通俗的说就是,我们写的代码通过client端的lib jar包转化成JSON wire格式的报文发送给Appium Server,Appium Server通过HTTP协议和手机端建立一个session,之后通过UIAutomator来操作手机端

所以我们需要安装或者配置的东西其实很简单:

1. Client lib jar

2. Android SDK

3. Appium Server

为什么安装 Android SDK那 ,因为Android SDK是Appium运行的环境需要,安装SDK又需要安装JDK。

所以安装的整体流程如下:

1.安装Java JDK

JDK网上的教程太多了,安装之后配置环境变量即可,安装最新的就行

2.安装Android SDK

http://android-doc.com/androidstudio/2017/1117/6178.html

安装好之后需要配置环境变量

变量名:ANDROID_HOME

变量值:D:\android\android-sdk-windows

设置:PATH

变量值:;%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\tools;

3.安装Appium Server

两种方式:

1)Node安装

网上很多教程上来就讲怎么安装Node.js,让人一头雾水。其实安装Node.js的目的是为了安装npm,一个通过命令行自动安装软件的程序,之后可以通过命令行的方式安装appium server,具体操作如下

(1)下载地址:https://nodejs.org/ 并安装

(2)验证是否安装成功:cmd窗口—输入npm,即安装成功

若不成功,可以试试管理员运行CMD 或者重启电脑

之后可以命令行运行:

> npm install -g appium  # get appium
> npm install wd         # get appium client
> appium &               # start appium


此方法适用于mac或者Linux等经常用命令行操作的朋友,新手不适合推荐,安装完成之后的appium server是不带GUI的。

2)直接安装GUI的Appium Desktop

https://github.com/appium/appium-desktop/releases/tag/v1.2.7

安装最新版就好,不必安装Node和Appium server。

4.创建Eclipse Maven项目

Maven是一个自动构建工具,可以自动打包、设置运行的规则等等好多功能,如果你不会用Maven先baidu一下Maven在Eclipse中的使用。

创建好Maven之后,在pom.xml中添加dependency(自动引入jar包的语句)

<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.8.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.appium/java-client -->
<dependency>
<groupId>io.appium</groupId>
<artifactId>java-client</artifactId>
<version>6.0.0-BETA2</version>
</dependency>
</dependencies>


引入的selenium-java是java的webdriver client lib,因为appium是通过selenium webdriver来扩展语音的,所以selenium是必须添加的,如果你用的是其他语言,请参照github上的官方例子:https://github.com/appium/sample-code/tree/master/sample-code/examples

至此环境已经搭建完毕。

5.第一个测试例子

import org.openqa.selenium.*;
import org.openqa.selenium.remote.DesiredCapabilities;
import io.appium.java_client.AppiumDriver;
import io.appium.java_client.android.AndroidDriver;
import java.net.MalformedURLException;
import java.net.URL;
public class CalculatorTest {

private static RemoteWebDriver CalculatorSession = null;
private static WebElement CalculatorResult = null;

@BeforeClass
public static void setup() {
try {
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("deviceName", "Android Emulator");
capabilities.setCapability("automationName", "Appium");
capabilities.setCapability("platformName", "Android");
capabilities.setCapability("platformVersion", "5.0");
capabilities.setCapability("appPackage", "com.android.calculator2");
capabilities.setCapability("appActivity", ".Calculator");
//如果是安卓虚拟机,4723不好使的话要改成虚拟机进程的PID,可以打开任务管理器查看进程详细信息来获得,安卓虚拟机的设置也比较麻烦,请见我后续博客
//如果是手机,4723要改成4724
CalculatorSession.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);

CalculatorSession.findElementByXPath("//Button[starts-with(@Name, \"Menu\")]").click();
CalculatorSession.findElementByXPath("//ListItem[@Name=\"Standard Calculator\"]").click();

CalculatorSession.findElementByName("Clear").click();
CalculatorSession.findElementByName("Seven").click();
CalculatorResult = CalculatorSession.findElementByName("Display is  7 ");
Assert.assertNotNull(CalculatorResult);

}catch(Exception e){
e.printStackTrace();
} finally {
}
}

@Before
public void Clear()
{
CalculatorSession.findElementByName("Clear").click();
Assert.assertEquals("Display is  0 ", CalculatorResult.getText());
}

@AfterClass
public static void TearDown()
{
CalculatorResult = null;
if (CalculatorSession != null) {
CalculatorSession.quit();
}
CalculatorSession = null;
}

@Test
public void Addition()
{
CalculatorSession.findElementByName("One").click();
CalculatorSession.findElementByName("Plus").click();
CalculatorSession.findElementByName("Seven").click();
CalculatorSession.findElementByName("Equals").click();
Assert.assertEquals("Display is  8 ", CalculatorResult.getText());
}

@Test
public void Combination()
{
CalculatorSession.findElementByName("Seven").click();
CalculatorSession.findElementByName("Multiply by").click();
CalculatorSession.findElementByName("Nine").click();
CalculatorSession.findElementByName("Plus").click();
CalculatorSession.findElementByName("One").click();
CalculatorSession.findElementByName("Equals").click();
CalculatorSession.findElementByName("Divide by").click();
CalculatorSession.findElementByName("Eight").click();
CalculatorSession.findElementByName("Equals").click();
Assert.assertEquals("Display is  8 ", CalculatorResult.getText());
}

@Test
public void Division()
{
CalculatorSession.findElementByName("Eight").click();
CalculatorSession.findElementByName("Eight").click();
CalculatorSession.findElementByName("Divide by").click();
CalculatorSession.findElementByName("One").click();
CalculatorSession.findElementByName("One").click();
CalculatorSession.findElementByName("Equals").click();
Assert.assertEquals("Display is  8 ", CalculatorResult.getText());
}

@Test
public void Multiplication()
{
CalculatorSession.findElementByName("Nine").click();
CalculatorSession.findElementByName("Multiply by").click();
CalculatorSession.findElementByName("Nine").click();
CalculatorSession.findElementByName("Equals").click();
Assert.assertEquals("Display is  81 ", CalculatorResult.getText());
}

@Test
public void Subtraction()
{
CalculatorSession.findElementByName("Nine").click();
CalculatorSession.findElementByName("Minus").click();
CalculatorSession.findElementByName("One").click();
CalculatorSession.findElementByName("Equals").click();
Assert.assertEquals("Display is  8 ", CalculatorResult.getText());
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  appium 测试 框架