欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-29 21:38:23
...

网上有很多环境搭建的教程,搭建方式、使用工具都各有不同,很多只是说了搭建的步骤并没有说明具体某个配置是做什么用的,使得新手搭建环境时一头雾水。
下面说一下我自己在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框架。
eclipse+appium+AndroidSDK 安卓自动化测试环境搭建
通俗的说就是,我们写的代码通过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());
    }
}