执行用例时会涉及到一些环境初始化或者数据清理的操作,此时需要用到用例前处理和后处理,在cucumber-android框架中用hooks来实现这块的功能,Before和After钩子是针对每个用例的前处理和后处理操作。
在截图时,考虑到权限问题,我把图片默认放在测试用例的应用目录下,由于要把图片嵌入到报告中,需要先把图片转为byte[]格式,在由cucumber-android读入,cucumber-android会重新生成一个图片,所以在截图的时候只需要一个固定的名称即可,防止失败用例过多,图片文件会占用很大空间。
前处理: 判断当前是否计算器界面,如果不是的话打开计算器应用,如果是就计算器归零操作。
后处理:判断用例状态,如果用例失败,截图并把截图嵌入到测试报告中。
hooks/TestHooks.java
package com.cucumber.demo.test.hooks;
import android.support.test.InstrumentationRegistry;
import android.support.test.uiautomator.By;
import android.support.test.uiautomator.UiDevice;
import android.support.test.uiautomator.UiObject;
import android.support.test.uiautomator.UiObject2;
import android.support.test.uiautomator.UiObjectNotFoundException;
import android.support.test.uiautomator.UiSelector;
import android.util.Log;
import com.cucumber.demo.test.elements.CalculatorActivity;
import java.util.List;
import cucumber.api.Scenario;
import cucumber.api.java.Before;
import cucumber.api.java.After;
import cucumber.api.Scenario.*;
/**
* Created by ogq on 4/18/17.
*/
public class TestHooks {
final UiDevice uiDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
final String TAG = "AUTOTEST-HOOKS";
@Before
public void befor_features() throws UiObjectNotFoundException {
//判断当前是否打开被测应用
String curPkgName = uiDevice.getCurrentPackageName();
Log.v(TAG,"当前的包名为");
Log.v(TAG, curPkgName);
if (curPkgName.equals("com.android.calculator2")){
// 计算器归零
CalculatorActivity.getClsBtn().click();
return;
}
// 打开应用
uiDevice.pressHome();
List bottom_btns = uiDevice.findObjects(By.clazz("android.widget.TextView"));
for (int i =0;i 重新定义用例执行器,采用的是cucumber-android框架,所以要采用cucumber的执行方式。
runner/Instrumentation.java
package com.cucumber.demo.test.runner;
import android.os.Bundle;
import android.support.test.runner.MonitoringInstrumentation;
import cucumber.api.android.CucumberInstrumentationCore;
public class Instrumentation extends MonitoringInstrumentation {
private final CucumberInstrumentationCore instrumentationCore = new CucumberInstrumentationCore(this);
@Override
public void onCreate(final Bundle bundle) {
super.onCreate(bundle);
instrumentationCore.create(bundle);
start();
}
@Override
public void onStart() {
waitForIdleSync();
instrumentationCore.start();
}
} runner/SomeDependency.java
package com.cucumber.demo.test.runner;
// Dummy class to demonstrate dependency injection
public class SomeDependency {
} 此时需要修改build.gradle文件,指定测试执行类
testApplicationId "com.cucumber.demo.test"
testInstrumentationRunner "com.cucumber.demo.test.runner.Instrumentation" 来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/2216/viewspace-2804922/ ,如需转载,请注明出处,否则将追究法律责任。