ITPub博客

首页 > IT职业 > IT职场 > uiautomator结合cucumber实现移动app自动化测试

uiautomator结合cucumber实现移动app自动化测试

IT职场 作者:wengwb 时间:2021-09-09 09:34:57 0 删除 编辑
Testing Fundamentals */ @CucumberOptions(features="features", glue = "com.cucumber.demo.test", format={"pretty","html:/data/data/com.cucumber.demo/reports"}) public class AppTestStep extends ActivityInstrumentationTestCase2{ final String TAG = "AUTOTEST"; public AppTestStep(SomeDependency dependency) { super(MainActivity.class); assertNotNull(dependency); } @假如("^输入数字(\S+)$") public void input_number(String number) throws UiObjectNotFoundException { Log.v(TAG, "输入数字为:" + number); char[] chars = number.toCharArray(); for(int i = 0; i

执行用例时会涉及到一些环境初始化或者数据清理的操作,此时需要用到用例前处理和后处理,在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/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: day02:Python 解释器
请登录后发表评论 登录
全部评论

注册时间:2019-04-16

  • 博文量
    63
  • 访问量
    511