zoukankan      html  css  js  c++  java
  • 从零开始做一个Android自动化

    移动端自动化简单说就是,写好操作app的程序,运行起来,自动执行程序和测试用例,输出执行结果,结果正确,测试通过。

    1. 自动化可以方便地完成安装/卸载、启动/运行、UI适配等环节,节省时间;

    2. 同一测试脚本可以适用于几乎所有Android机型,可以快速完成兼容性测试;

    3. 可以模拟数据准备,通过一些重复的操作产生简单的数据;

    4. 可以保存截图、输出log、输出错误信息;

    5. 可以长时间运行并保证数据的准确性,避免人为产生的错误;

    6. 可扩展性强

    7. ……

    常见的移动自动化测试框架有: Appium、Colabash、MonkeyTalk、Robolectric、App Grader. 
    网上有更多的自动化测试框架的介绍,(https://www.cnblogs.com/fqfanqi/p/6139435.html)

    why Appium

    • 同时支持Android、iOS、混合app

    • 支持多语言,PHP 、Python、Ruby、C#、Clojure、Java、Objective-c、JavaScript、以及Perl

    • 能与大多数主流开发测试工具集成,可是使用任何测试框架驱动Appium

    • 不会要求测试人员修改或者重新编译待测应用

    • 有活跃社区可交流

    Appium的移动自动化测试路线

    一般的web自动化测试路线是:

    编程语音基础 → 测试框架 → Web Driver API → 开发自动化测试项目

    基于Appium移动端自动化测试的线路是:

    编程语言基础 → 测试框架 → Android/iOS开发、测试基础→ Appium API → 开发移动自动化测试项目

    Appium测试环境的搭建是比较繁琐的,不少开始移动端自动化的初学者一般都是死在搭建环境的沙滩上了,本文从搭建环境到简单示例,讲解一个完整的Android移动端自动化的全过程。

    Appium的环境搭建 — Appium + Android + Java

    前置工作

    Java - Java SDK 
    Android - Android SDK 
    Java IDE - Intellij IDEA 
    Appium : Appium

    环境变量配置

    1. 配置JDK环境变量,这个搜狗一下就有具体步骤,不详细讲解了

    2. 配置Android SDK路径为ANDROID_HOME变量并在Path中添加%ANDROID_HOME% ools和%ANDROID_HOME%platform-tools

    3. 配置Appium安装文件夹下的以下路径到path中(如安装在C:Program Files (x86)Appium): C:Program Files (x86)Appium和C:Program Files (x86)Appium ode_modules.bin

    综上,需要配置Java环境变量,此外需要配置ANDROID_HOME、tools、platform-tools三个变量,Appium需要配置Appium和Appium ode_modules.bin两个变量

    验证环境

    验证Java JDK安装和设置,在CMD中输入如下命令: 
    Java -version 
    之后展示Java版本信息就正确设置完毕了。 
    验证appium是否安装配置完成并且环境变量配置成功,打开cmd,输入: 
    appium-doctor 
    看到有几列✔且最后展示“All Check were Successful”字样时,代表Appium就配置安装好了。 
    Android SDK配置完毕后,可以试用adb命令,无异常情况则代表配置成功。

    编写Android自动化测试

    不知道小伙伴们有没有发现,前置工作中有个软件还一直没有使用,它就是Intellij IDEA,现在就是用到它的时候了。 
    首先需要用Intellij创建一个maven项目,为啥创建maven项目呢,因为使用maven可以减少了工具包下载、配置、安装等一些列过程,具体maven项目的创建可以自行搜狗一下。创建完毕后需要在pox.xml中添加以下依赖:

    <dependencies>

    <dependency>

    <groupId>org.seleniumhq.selenium</groupId>

    <artifactId>selenium-java</artifactId>

    <version>2.42.1</version>

    </dependency>

    <dependency>

    <groupId>org.apache.maven.plugins</groupId>

    <artifactId>maven-surefire-plugin</artifactId>

    <version>2.12.4</version>

    </dependency>

    <dependency>

    <groupId>org.testng</groupId>

    <artifactId>testng</artifactId>

    <version>6.8.8</version>

    </dependency>

    <dependency>

    <groupId>io.appium</groupId>

    <artifactId>java-client</artifactId>

    <version>3.2.0</version>

    </dependency>

    <dependency>

    <groupId>com.google.android</groupId>

    <artifactId>android</artifactId>

    <version>4.1.1.4</version>

    </dependency>

    <dependency>

    <groupId>junit</groupId>

    <artifactId>junit</artifactId>

    <version>4.12</version>

    </dependency>

    </dependencies>

    之后保存好文件后,Intellij会自动加载进去这些依赖的jar包。 
    之后就可以进行一个简单的Android自动化脚本的编写和测试了,下面附上对原生Android系统中计算器app的测试代码。 
    Ps. 以下代码仅限于用在Android原生系统的机型使用,因为其中写死了appPackage和appActivity且@Test中写死了按钮的id,另外需要大家根据手机版本修改platformVersion属性值

    import io.appium.java_client.AppiumDriver;

    import io.appium.java_client.android.AndroidDriver;

    import org.junit.After;

    import org.junit.Before;

    import org.junit.Test;

    import org.openqa.selenium.By;

    import org.openqa.selenium.remote.DesiredCapabilities;

    import java.net.URL;

    public class demo1 {

    private AppiumDriver driver;

    @Before

    public void calc() throws Exception {

    DesiredCapabilities capabilities = new DesiredCapabilities();

    capabilities.setCapability("clearSystemFiles","True");

    capabilities.setCapability("androidDeviceReadyTimeout",5);

    capabilities.setCapability("deviceName","hammerhead");

    capabilities.setCapability("platformVersion","5.0");

    capabilities.setCapability("platformName","Android");

    capabilities.setCapability("appPackage", "com.android.calculator2");

    capabilities.setCapability("appActivity", ".Calculator");

    driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"),capabilities);

    }

    @After

    public void tearDown() throws Exception {

    driver.quit();

    }

    @Test

    public void add() {

    driver.findElement(By.id("com.android.calculator2:id/digit_1")).click();

    driver.findElement(By.id("com.android.calculator2:id/op_add")).click();

    driver.findElement(By.id("com.android.calculator2:id/digit_2")).click();

    driver.findElement(By.id("com.android.calculator2:id/eq")).click();

    }

    }

  • 相关阅读:
    定时任务时间表达式的规则(自己总结)
    本地vagrant配置虚拟域名的坑
    商派onex本地部署无法进入的问题
    一周一篇文章,立贴为证
    Ecshop安装的坑,建议不要使用!
    MYSQL查询语句优化
    .gitignore文件
    剖析Disruptor:为什么会这么快?(二)神奇的缓存行填充
    Disruptor 为什么这么快?
    一篇文章让你成为 NIO 大师 - MyCAT通信模型
  • 原文地址:https://www.cnblogs.com/Yanss/p/10153403.html
Copyright © 2011-2022 走看看