使用Maven构建Android白盒自动化测试项目

使用Maven构建Android白盒自动化测试项目

 

本文展示应用maven来构建一个简单的Android白盒测试的项目的过程。基本过程如下:

 

1.新建一个名为Demo的Android应用,需要注意的是代码文件位于Demo\src\main\java路径下。

2.针对Demo应用,新建一个Android测试项目DemoTest,测试项目的代码文件位于DemoTest\src\main\java路径下。

3.将Demo和DemoTest两个项目放于同一个文件夹下,这里是都放在Parent这个文件夹下。

4.为Parent、Demo、DemoTest三个文件夹都分别添加一个pom.xml文件,在pom文件中指明三者之间的关系,即:Parent项目是主项目,DemoDemoTest是两个子项目,且DemoTest是一个用来测试Demo的项目。

 

详细过程如下:

首先准备好待测项目,待测项目实现一个简单的加法功能:


为了能够使用maven代码文件不是直接位于src目录下,而是位于src/main/java目录下。假如拿到的代码原本不是这样的结构,这里就需要做修改,比如写个脚本判断拷贝。

Parent\Demo\src\main\java\com\winstonwolfe\demo\MainActivity.java 文件内容如下:

public class MainActivity extends Activity{ 
   protected static final String LOG_TAG =null; 
  
   @Override 
   protected void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.activity_main); 
        
        final EditText value1 = (EditText) findViewById(R.id.value1); 
        final EditText value2 = (EditText) findViewById(R.id.value2); 
        final EditText result = (EditText) findViewById(R.id.result); 
  
        Button addButton = (Button) findViewById(R.id.addValues); 
        addButton.setOnClickListener(new OnClickListener() { 
               public void onClick(View v){ 
                   try { 
                       int val1 =Integer.parseInt(value1.getText().toString()); 
                       int val2 =Integer.parseInt(value2.getText().toString()); 
  
                       Integer answer = val1 +val2; 
                       result.setText(answer.toString()); 
                   } catch (Exception e) { 
                      Log.e(LOG_TAG,"Failed to add numbers", e); 
                   } 
               } 
  
            
         }); 
  
          Button multiplyButton = (Button) findViewById(R.id.multiplyValues); 
          multiplyButton.setOnClickListener(new OnClickListener() { 
               public void onClick(View v){ 
                   try { 
                       int val1 =Integer.parseInt(value1.getText().toString()); 
                       int val2 =Integer.parseInt(value2.getText().toString()); 
  
                       Integer answer = val1 *val2; 
                      result.setText(answer.toString()); 
                   } catch (Exception e) { 
                      Log.e(LOG_TAG,"Failed to multiply numbers", e); 
                   } 
               } 
          }); 
   } 


 

准备好测试项目DemoTest,测试项目的代码文件内容如下:

\Parent\DemoTest\src\main\java\com\winstonwolfe\demo\test\testCase1.java

 

import android.test.ActivityInstrumentationTestCase2;
import com.winstonwolfe.demo.MainActivity;  //被测试对象
import com.winstonwolfe.demo.R;
import android.widget.EditText;
 
public class testCase1 extendsActivityInstrumentationTestCase2<MainActivity> {
      
       privateEditText result;
      
       @SuppressWarnings("deprecation")
       publictestCase1() {
              super("com.winston.demo",MainActivity.class);
       }
 
      
       @Override
   protected void setUp() throws Exception {
       super.setUp();
 
       MainActivity mainActivity = getActivity();
       result = (EditText) mainActivity.findViewById(R.id.result);
    }
 
   private static final String NUMBER_24 = "2 4 ENTER ";
   private static final String NUMBER_74 = "7 4 ENTER ";
   private static final String NUMBER_5_DOT_5 = "5 PERIOD 5 ENTER";   //PERIOD 小数点
   private static final String NUMBER_NEG_22 = "MINUS 2 2 ENTER";   // -22
 
   private static final String ADD_RESULT = "98";
   private static final String ADD_DECIMAL_RESULT = "79.5";
   private static final String ADD_NEGATIVE_RESULT = "52";
   private static final String MULTIPLY_RESULT = "1776";
 
   public void testAddValues() {  //两个整数相加
       sendKeys(NUMBER_24);
       sendKeys(NUMBER_74);
       sendKeys("ENTER");
       
       String mathResult = result.getText().toString();
       assertTrue("Add result should be 98 " + ADD_RESULT + "but was "
                + mathResult,mathResult.equals(ADD_RESULT));
    }
 
 
   public void testMultiplyValues() { //两个整数相乘
       sendKeys(NUMBER_24 + NUMBER_74 + " DPAD_RIGHT ENTER");   //D_PAD 上下左右导航键 KeyEvent.KEYCODE_DPAD_UP  到config.ini中启用虚拟机D_PAD
       String mathResult = result.getText().toString();
       assertTrue("Multiply result should be " + MULTIPLY_RESULT +" but was "
                + mathResult,mathResult.equals(MULTIPLY_RESULT));
    }
 
}


 

Parent项目的pom文件内容如下:

<?xml version="1.0"encoding="UTF-8"?>
<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.winstonwolfe.demo</groupId>
   <artifactId>Demo-parent</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>pom</packaging>
   <name>Demo-Parent</name>
 
    <modules>
       <module>Demo</module>
       <module>DemoTest</module>
    </modules>
 
   <properties>
       <platform.version> 4.4.2
           </platform.version>
   </properties>
 
   <dependencyManagement>
       <dependencies>
           <dependency>
               <groupId>com.google.android</groupId>
               <artifactId>android</artifactId>
               <version>${platform.version}</version>
               <scope>provided</scope>
           </dependency>
           <dependency>
               <groupId>com.google.android</groupId>
               <artifactId>android-test</artifactId>
               <version>${platform.version}</version>
               <scope>provided</scope>
           </dependency>
 
           <!-- Androlog is a logging and reporting library for Android -->
           <dependency>
               <groupId>de.akquinet.android.androlog</groupId>
               <artifactId>androlog</artifactId>
                <version>1.0.5</version>
           </dependency>
 
           <dependency>
               <groupId>junit</groupId>
               <artifactId>junit</artifactId>
                <version>3.8.1</version>
               <scope>provided</scope>
           </dependency>
       </dependencies>
   </dependencyManagement>
 
   <build>
       <pluginManagement>
           <plugins>
                <plugin>
                   <groupId>com.jayway.maven.plugins.android.generation2</groupId>
                    <artifactId>android-maven-plugin</artifactId>
                    <version>3.8.1</version>
                                   <configuration><sdk> <platform>19</platform> </sdk></configuration>
                </plugin>
                <plugin>
                   <artifactId>maven-compiler-plugin</artifactId>
                    <version>2.3.2</version>
                </plugin>
           </plugins>
       </pluginManagement>
   </build>
</project>


 

Demo项目的pom文件内容如下:

<?xml version="1.0"encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd">
 <modelVersion>4.0.0</modelVersion>
 
 <parent>
   <groupId>com.winstonwolfe.demo</groupId>
   <artifactId>Demo-parent</artifactId>
   <version>1.0-SNAPSHOT</version>
 </parent>
 
 
 <groupId>com.winstonwolfe.demo</groupId>
 <artifactId>Demo</artifactId>
 <version>1.0-SNAPSHOT</version>
 <packaging>apk</packaging>
 <name>Demo</name>
 
 <dependencies>
   <dependency>
           <groupId>com.google.android</groupId>
           <artifactId>android</artifactId>
           <version>2.1.2</version>
           <scope>provided</scope>
       </dependency>
 
 
   <dependency>
      <groupId>de.akquinet.android.androlog</groupId>
     <artifactId>androlog</artifactId>
   </dependency>
 
 
 </dependencies>
 <build>
   <plugins>
     <plugin>
       <groupId>com.jayway.maven.plugins.android.generation2</groupId>
       <artifactId>android-maven-plugin</artifactId>
       <configuration>
         <androidManifestFile>${project.basedir}/AndroidManifest.xml</androidManifestFile>
         <assetsDirectory>${project.basedir}/assets</assetsDirectory>
         <resourceDirectory>${project.basedir}/res</resourceDirectory>
         <nativeLibrariesDirectory>${project.basedir}/src</nativeLibrariesDirectory>
         <sdk>
           <platform>19</platform>
         </sdk>
         <undeployBeforeDeploy>true</undeployBeforeDeploy>
       </configuration>
       <extensions>true</extensions>
     </plugin>
     <plugin>
       <artifactId>maven-compiler-plugin</artifactId>
       <configuration>
         <source>1.5</source>
         <target>1.5</target>
       </configuration>
     </plugin>
   </plugins>
 </build>
</project>
 


DemoTest项目的pom文件内容如下:

<?xml version="1.0"encoding="UTF-8"?>
<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/maven-v4_0_0.xsd">
   <modelVersion>4.0.0</modelVersion>
 
 
   <parent>
       <groupId>com.winstonwolfe.demo</groupId>
       <artifactId>Demo-parent</artifactId>
       <version>1.0-SNAPSHOT</version>
   </parent>
 
 
   <groupId>com.winstonwolfe.demo</groupId>
    <artifactId>DemoTest</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>apk</packaging>
   <name>DemoTest- Integration tests</name>
 
   <dependencies>
       <dependency>
           <groupId>com.google.android</groupId>
           <artifactId>android</artifactId>
                     <version>2.1.2</version>
       </dependency>
       <dependency>
           <groupId>com.google.android</groupId>
           <artifactId>android-test</artifactId>
                     <version>2.1.2</version>
       </dependency>
       <dependency>
           <groupId>com.winstonwolfe.demo</groupId>
           <artifactId>Demo</artifactId>
           <type>apk</type>
           <version>1.0-SNAPSHOT</version>
       </dependency>
       <dependency>
           <groupId>com.winstonwolfe.demo</groupId>
           <artifactId>Demo</artifactId>
           <type>jar</type>
           <version>1.0-SNAPSHOT</version>
       </dependency>
       <dependency>
           <groupId>junit</groupId>
           <artifactId>junit</artifactId>
                     <version>3.8.1</version>
           <scope>provided</scope>
       </dependency>
   </dependencies>
   <build>
       <plugins>
           <plugin>
               <groupId>com.jayway.maven.plugins.android.generation2</groupId>
                <artifactId>android-maven-plugin</artifactId>
                <configuration>
                   <androidManifestFile>${project.basedir}/AndroidManifest.xml</androidManifestFile>
                   <assetsDirectory>${project.basedir}/assets</assetsDirectory>
                   <resourceDirectory>${project.basedir}/res</resourceDirectory>
                   <nativeLibrariesDirectory>${project.basedir}/src/main/native</nativeLibrariesDirectory>
                    <sdk>
                        <platform>19</platform>
                    </sdk>
                                       <undeployBeforeDeploy>true</undeployBeforeDeploy>
                </configuration>
               <extensions>true</extensions>
           </plugin>
           <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                   <source>1.5</source>
                   <target>1.5</target>
                </configuration>
           </plugin>
       </plugins>
   </build>
</project>


 

连接上手机,Cd到\Parent\DemoTest目录,执行测试命令:mvn install android:deployandroid:instrument

测试执行的结果如下:

 

此外,在 \Parent\DemoTest\target\surefire-reports目录下也生成了xml格式的测试报告。

       

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值