实战自动化测试Espresso和Ui automator(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。

作为项目的3.0,必须要求加入自动化测试,而自己又有意来学习,单元测试。所以才有了这篇总结的文章,实战自动化测试。感觉这东西是慢慢领悟的,我也只是记录,自己尝试的一点心得,方便以后自己的查阅。

在安卓studio中,支持的测试库,主要有下面的常用3类。这里写图片描述

我看得主要是后面两类,内部测试(Espresso)和跨应用的测试(Ui automator)。

以下是他们在安卓studio中的依赖:

1. 在build.gradle(Module.app) dependencies {*} 中添加

 defaultConfig {
        applicationId "xiaozhang.testuiautomator"
        minSdkVersion 19
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" //必须添加的 
    }

 dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.3.0'
    //测试
    androidTestCompile 'com.android.support:support-annotations:23.3.0'
    androidTestCompile 'com.android.support.test:runner:0.4.1'
    androidTestCompile 'com.android.support.test:rules:0.4.1'
    androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.1'//跨界测试
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'//内部测试

}

2.在build.gradle(Project) dependencies{*} 中添加apt

 dependencies {
          ………………
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'  //必须添加的

    }

在添加依赖后,我们先来看一看单元测试的概念

单元测试的概念,就是验证代码正确的另一段代码。

所以不管我们用的哪一种工具,都只是在编写代码来判断与验证我们的代码的正确性,而这也是单元测试的目的。

每一个测试类,都会经历这样一个流程:从开始到结束这里写图片描述

而在自动化测试中,现在不用setUp和tearDown与test的方法开头了,但是大致的流程都不会变。

这里写图片描述

好了现在我们,正式开始!

这里写图片描述

我现在的目的是,1.通过代码摸牛点击测试按钮,看我们的显示代码会不会正常的,在文本框上显示我设置的文本。

   public void onClick(View v) {
        switch (v.getId()) {
            case R.id.main_bt1:
                main_edit.setText("这是点击按钮,输入的文字!");

                break;

        }

2.对EdiText执行模拟的输入文本操作。 3.代码检测控件是不是正确显示了我操作的,文本内容

Espresso的使用:

1.找元素。 2.操作元素 3.检查结果

这里写图片描述

执行成功

这里写图片描述

执行失败

这里写图片描述

附上,官方使用的api,可以查阅像withId()这样的方法说明。

https://developer.android.com/reference/android/support/test/espresso/Espresso.html

以下为该篇文章Espresso的全部代码:

package xiaozhang.testuiautomator;

import android.support.test.rule.ActivityTestRule;
import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.LargeTest;

import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;

import static android.support.test.espresso.Espresso.onView;
import static android.support.test.espresso.action.ViewActions.click;
import static android.support.test.espresso.action.ViewActions.closeSoftKeyboard;
import static android.support.test.espresso.action.ViewActions.replaceText;
import static android.support.test.espresso.assertion.ViewAssertions.matches;
import static android.support.test.espresso.matcher.ViewMatchers.withId;
import static android.support.test.espresso.matcher.ViewMatchers.withText;

/**
 * Created by zhang on 2016/6/4.
 * 使用Espresson测试 MainActivity
 */
@RunWith(AndroidJUnit4.class)
@LargeTest
public class EspressoMainActivityTest {
    //为MainActivity提供依赖
    @Rule
    public ActivityTestRule<UIautomatorMainActivity> mMainActivityRule = new ActivityTestRule<UIautomatorMainActivity>(
            UIautomatorMainActivity.class);

    //进行测试
    @Test
    public void changeText_sameActvity(){
        //@点击button的操作,%执行输入文本,
        //@
        onView(withId(R.id.main_bt1)).
            //1.onView()找元素 { withId()按id查询   WithText()按显示内容查询   }
        perform(click());
            //2.perform() 操作元素 {click() 点击, replaceText(text)替换文本, closeSoftKeyboard()关闭软键盘}
        //%
        onView(withId(R.id.main_edit)).
                perform(replaceText("代码输入的"),closeSoftKeyboard()); //typeText()输入文本


        //!检测文本的显示内容
        //!
        onView(withId(R.id.main_edit)).//check()检测结果
                check(matches(withText("代码输入的")));

    }


    //多个@Test *******



}

测试主界面:
public class UIautomatorMainActivity extends Activity implements View.OnClickListener {
    private Button main_bt1;
    private EditText main_edit;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.act_uiautomator_main_layout);
        main_bt1= (Button) findViewById(R.id.main_bt1);
        main_bt1.setOnClickListener(this);
        main_edit= (EditText) findViewById(R.id.main_edit);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.main_bt1:
                main_edit.setText("这是点击按钮,输入的文字!");

                break;

        }
    }

布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:id="@+id/main_bt1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="测试" />

    <EditText
        android:id="@+id/main_edit"
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:gravity="start"
        android:hint="内容" />


</LinearLayout>

以上为自动化Espresso测试,需要你亲自动手尝试,Ui automator测试会在下篇博文中。请查看下篇。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荣•厚德载物

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值