1. 程式人生 > >Android自動化測試-cafe自動化測試框架學習(一)

Android自動化測試-cafe自動化測試框架學習(一)

cafe是百度開源的一套自動化測試框架,最近開始著手研究了一下,以下是一些總結,比較基礎,就是說說環境搭建。

cafe官網地址:https://baiduqa.github.io/Cafe/

原始碼在gitHub上有,https://github.com/BaiduQA/Cafe

1、Cafe能做什麼?

百度cafe.是一款來自百度QA部門的Android平臺自動化測試框架,框架覆蓋了Android自動化測試的各種需求,致力於實現跨程序測試、快速測試、深度測試,解決了Android自動化測試中的諸多難題,比如業界一直沒有解決的跨程序測試問題。主要亮點如下:

    • 基於hook錄製體系
    • 遍歷測試(基於Monkey)
    • 跨app測試(Robotium+AIDL)
    • pc agent設計
    • 使用android漏洞提權

2、原始碼結構分析,去gitHub下載原始碼之後,解壓之後檔案結構如下:


download:這裡面放著cafe的各種版本,迄今為止,是更新到了3.1,把最新的版本的zip解壓,可以得到cafe.jar, cafe-doc.jar(這兩個jar包在後面的環境搭建需要加入Build Path), 還有Cafe-Setup.bat等檔案,這個是在Cafe執行前需要執行一遍,另還有一個Cafe.apk,這個需要在被測機子上預先安裝好。

testrunner: cafe的原始碼

tests:放一些Cafe的功能測試專案

testservice:同上

testuntils:一些公共工具類,Cafe-Setup.bat在這裡也有。

tools:存放簽名工具

3.cafe的使用(基於原始碼)

  • 解壓eclipse工具、安裝JDK和Android SDK,並設定好環境變數
  • 啟動eclipse,File->Import->Android->Existing Android Code Into Workspace匯入被測工程,此處以Robotium官網給的例子NotePad為被測工程
  • File->New->Project->Android->Android Test Project新建測試工程,輸入測試工程名稱,Select Test Target選擇前面匯入的被測工程
  • 匯入cafe.jar,測試工程右擊,選擇Build Path->Configure Build Path…,在libraries頁面點選Add External JARs,匯入b下載的cafe.jar
  • 新建測試類,在測試工程->src->測試類存放的包上右擊,選擇New->Java->Junit->Junit Test Case,在Name中輸入Test Case的名稱,選擇Setup(),tearDown()和Constructor,點選完成

或者直接使用MTC錄製(工具的資料夾下有詳細的使用說明文件),錄製完成後直接生成Eclipse測試工程

  • 編寫程式碼
<pre name="code" class="java">package com.example.android.notepad.test;

import android.view.KeyEvent;
import android.widget.Button;

import com.baidu.cafe.CafeTestCase;
import com.baidu.cafe.local.Log;

public class CXQTestCafeCase extends CafeTestCase {
	private static final String LAUNCHER_ACTIVITY_FULL_CLASSNAME = "com.example.android.notepad.NotesList";
	private static final String TARGET_PACKAGE = "com.example.android.notepad";

	private static Class<?> launcherActivityClass;
	static {

		try {
			launcherActivityClass = Class
					.forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME);
		} catch (ClassNotFoundException e) {
			throw new RuntimeException(e);
		}

	}

	@SuppressWarnings("unchecked")
	public CXQTestCafeCase() {
		super(TARGET_PACKAGE, launcherActivityClass);
	}

	protected void tearDown() throws Exception {
		super.tearDown();
	}

	@Override
	protected void setUp() throws Exception {
		// TODO Auto-generated method stub
		super.setUp();
	}

	

	public void test01() {		local.clickLongOnScreen(100, 100);//其他的功能可以自己參照tests資料夾</span>
}}
  • 執行

PC連線模擬器或者裝置,安裝 Cafe.apk 、執行 cafe_setup.sh 或者 cafe_setup.bat(模擬器和裝置沒有安裝和執行過的才需要),右擊測試工程的測試類,選擇Run As --> Run As Android JUnit Test執行;

  • 檢視測試結果   在eclipse的junit面板和Androidshell中,可以清楚的看到執行結果

如果出錯,可以自己排查一下Manifest.xml檔案,正確的內容應該如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.notepad.test"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="19" />

    <instrumentation
        android:name="android.test.InstrumentationTestRunner"
        android:targetPackage="com.example.android.notepad" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <uses-library android:name="android.test.runner" />
    </application>

</manifest>

問題: cafe能不能做無原始碼的測試? 簽名怎麼用? 現在還沒用到簽名,我猜測簽名是不是用於無原始碼的測試下,因為robotium就是這麼做的,而cafe是基於robotium開發的,還不清楚這個簽名是用來幹嘛的,如果有哪位大神用過,麻煩回覆告訴我下。