前言:
目前比较流行的androidUI自动化实现方式有uiautomator和appium两种
uiautomator是google提供的框架,经历了1.0和2.0版本,1.0版本和appium比较像(1.0基本没人用了),2.0版本是基于安卓app单元测试框架来实现的,用androidStudio来写,写在androidTest目录下,用单元测试的方式执行测试,属于android工程,打出来是apk包,安装在手机上就可以测试,可以脱离电脑,电脑之只需要触发一下就可以。因为uiautomator2.0是安卓工程,所以只能用java来写。
appium需要的环境条件比较复杂,完全依赖电脑,需要在电脑上装一大推东西(appium客户端、node.js环境、androidSdk、java环境或者python环境),用eclipse或者idea等IDE写成java工程来执行测试,打出来是一个jar包。appium支持的语言比较多(java、python、js等)
框架元素:
jenkins、github、tomcat、代码工程(junit4+Email+钉钉机器人+html报告+uiautomatorAPI封装)
效果:
html报告
钉钉消息(和接口这个模版类似,可以自己设计,把数据统计对就行)
分别介绍:
一、github
在github新建一个远程仓库,使用一个默认的master分支就行,测试人员在自己的电脑用sourcetree建立本地仓库并关联远程仓库,每次写完代码都提交、推送到远程仓库。
二、gradle
下载适合的版本,将代码拉下来后,用于自动打成apk包,也可以让jenkins自动下载
三、jenkins
部署在linux或者windows或者mac电脑上,这里讲以windows作为服务器
1、配置androidSdk环境变量、gradle环境变量
2、配置git(从git拉取最新的测试代码)
3、配置gradle(从git把代码拉下来后,打成apk包)
4、win命令流程:删除上次测试结果文件夹、删除上次测试日志、push自动化测试apk到手机并且安装、清除缓存区日志、后台运行appLogcat.bat(删除上次日志文件,开始收集本次测试日志)、开始触发执行测试、测试结束后等待3秒、后台运行killLogcat.bat(结束log收集)、再等待3秒、pull出日志文件到电脑、pull出截图到电脑、pull出html报告到电脑
rd /s /q C:\Users\BabyFS\Desktop\appFunction\appFunctionPicture
del /f /s /q C:\Users\BabyFS\Desktop\appFunction\appLogcat.txt
adb push D:\jenkins\jenkinsHome\workspace\appFunction\app\build\outputs\apk\debug\app-debug.apk /data/local/tmp/com.uiautomator.babyfs
adb shell pm install -t -r "/data/local/tmp/com.uiautomator.babyfs"
adb push D:\jenkins\jenkinsHome\workspace\appFunction\app\build\outputs\apk\androidTest\debug\app-debug-androidTest.apk /data/local/tmp/com.uiautomator.babyfs.test
adb shell pm install -t -r "/data/local/tmp/com.uiautomator.babyfs.test"
adb logcat -c
start /b D:\tools\appFunction\appLogcat.bat
adb shell am instrument -w -r -e debug false -e class 'com.uiautomator.babyfs.RunInsideCase#app' com.uiautomator.babyfs.test/android.support.test.runner.AndroidJUnitRunner
ping /n 3 127.1 >nul
start /b D:\tools\appFunction\killLogcat.bat
ping /n 3 127.1 >nul
adb pull sdcard/appLogcat.txt C:\Users\BabyFS\Desktop\appFunction
adb pull sdcard/appFunctionPicture C:\Users\BabyFS\Desktop\appFunction
adb pull sdcard/app.html C:\Users\BabyFS\Desktop\appFunction
appLogcat.bat
adb shell < D:\tools\appFunction\appLogcat.txt
appLogcat.txt
rm -rf /sdcard/appLogcat.txt
touch /sdcard/appLogcat.txt
nohup logcat | grep "uiautomatorTest" > sdcard/appLogcat.txt &
killLogcat.bat
adb shell < D:\tools\appFunction\killLogcat.txt
killLogcat.txt
killall -9 logcat
四、uiautomatorAPI封装
1、工程目录
2、KeyWord类代码(uiautomatorAPI封装)
package com.uiautomator.babyfs;
import android.app.Instrumentation;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.RemoteException;
import android.support.test.runner.AndroidJUnit4;
import android.support.test.uiautomator.By;
import android.support.test.uiautomator.BySelector;
import android.support.test.uiautomator.UiDevice;
import android.support.test.uiautomator.UiObject2;
import android.support.test.uiautomator.UiObjectNotFoundException;
import android.support.test.uiautomator.UiScrollable;
import android.support.test.uiautomator.UiSelector;
import android.support.test.uiautomator.Until;
import android.util.Log;
import org.junit.runner.RunWith;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import static android.os.SystemClock.sleep;
import static com.uiautomator.babyfs.Constants.Path_picture;
import static com.uiautomator.babyfs.Constants.TAG;
import static com.uiautomator.babyfs.Constants.layout;
import static com.uiautomator.babyfs.GenerateReport.contentFail;
import static com.uiautomator.babyfs.GenerateReport.contentPass;
@RunWith(AndroidJUnit4.class)
public class KeyWord {
static Instrumentation instrumentation;
static UiDevice mDevice;
static Context context;
p