Android自动化测试–Instrumented Unit Tests使用澳门美高梅手机网站

Android自动化测试–Espresso使用

云统计时代,云主机其可扩张性、价格便宜、安全可信的性状深受企业和开发者欢迎,但眼下稍微IDC集团,新瓶装旧酒,将虚拟主机、VPS进行打包推出所谓的云主机服务,为了救助用户更好的识别和挑选云主机,下文详细介绍虚拟主机、VPS和云主机产品的风味以及差别性。

写在最终的话:个人能力有限,欢迎我们在底下吐槽。喜欢的话就为本人点一个赞吧。也欢迎Fork Me On Github 。

Android自动化测试–Local Unit Tests使用

对待上一篇小说所讲的Local Unit Tests,本文所讲的自动化测试Instrumented
Unit Tests最领悟的特性就是,可以直接测试Android SDK的API。

一、虚拟主机、VPS和云主机
共享主机也称虚拟主机,从网络诞生至今,半数以上站长都是从”共享主机”(shared
hosting)先导上学建站的。所谓”共享主机”,就是一台服务器上有许多网站,大家共享那台服务器的硬件和带宽。倘诺它发生故障,那么地点的有着网站都无法访问。
VPS主机(Virtual Private Server
虚拟专用服务器),将一部服务器分割成多少个虚拟专享服务器的优质服务。每个VPS都可分配独立公网IP地址、独立操作系统、独立超大空间、独立内存、独立CPU资源、独立执行顺序和单独系统布署等。用户除了可以分配两个虚拟主机及无限企业邮箱外,更具备独自服务器成效,可活动安装程序,单独重启服务器。
”云主机”(Cloud hosting)可以用作是新一代的共享主机。
第一,主机公司将它的硬件和互联网线路,做成一朵”云”,然后提供部分朝向这朵”云”的网络接口API,供客户使用。这时,每个客户共享的不再是某一台一定的服务器,而是云里的兼具服务器。
诸如,假诺你要把本机的文件备份到网上,你可以行使共享主机,把公文传到某一台服务器上;也可以动用云主机,通过某种形式的接口,把它们传播云里。也就是说,共享主机用户间接面对特定的服务器,而云主机用户一直面对网络接口,看不到服务器内部。
一个浅显的比方是,你可以向银行租一个号码为”8888″的有限扶助柜(共享主机),也得以把贵重物品直接付出保管公司,听任他们确保。
诸如Gmail、FaceBook、推特(Twitter)、Flickr那样的出品,都得以用作是依据”云主机”的劳务。
云主机能真的获得root权限,用户可以重装和升级换代操作系统,而VPS主机用户并未root权限,不可能重装和擢升操作系统。
二、虚拟主机、VPS、云主机的界别
(1)供应和配置时间
虚拟主机——数天至数周
VPS———即时,无需安装操作系统
云主机——即时,几分钟即可形成,可一键安排、也可独立设置操作系统
(2)安全可看重性
虚拟主机——一般:租用白牌服务器故障率高、基本无ARP、木马三保DDOS防备能力、基本无备机和数据备份服务
VPS———差:同一台物理服务器上别的VPS上设置的顺序瑕疵、ARP欺骗、病毒、资源挤占等会严重影响到本人;基本无ARP、木三宝太监DDOS防备能力
云主机——高:内置ARP防范,规模化升高DDOS防攻击能力;分享品牌商家级服务器和硬件虚拟化的特性和可依赖性,内置HA;提供备机、快照、数据备份等三种火速復苏措施
(3)品质及维持
虚拟主机——好且有保持
VPS———差:品质一般,只适用于小圈圈并发访问;品质无保证,易受到同一台物理服务器上其余VPS的挤压
云主机——好且有保障:同物理服务器
(4)弹性和伸张性
虚拟主机——扩容要求再行租用新服务器、还需为原始租用资源付费
VPS———扩容快,受制于单台服务器配置
云主机——即时供应、按需伸张 ,无需为原始租用资源付费
(5)拥有资产
虚拟主机——季付年付花费高、须要为劳动商转嫁CapEx支出支付押金;需要团结维护租用的服务器造成Opex较高
VPS———低配置的VPS租用价格最低;但低安全可靠性和无有限帮忙的属性导致服务质量无有限支撑,运营本钱难控制且偏高
云主机——综合财力低于:月付无押金、按需采用按需付费、基本零维护
,还可享用规模化、紫色节能、最佳IT实践带来的基金优势
(6)易用、易管理性
虚拟主机——须求长途控制卡且唯有租用品牌机才有可能,不可能落到实处集中统一管理
VPS———提供单纯的单机管理界面,无root或特级管理员操作系统权限,管理灵活性受制于管理界面
云主机——内置KVM、客户通过自服务种类能够集中统一管理分布在四方的云主机;完全拥有root或特级管理员操作系统权限
三、云主机的亮点
云主机主要有三大亮点。
(1)便宜。
因为劳动可以疏散到多台服务器,因而能够足够利用资源,这样就下跌了硬件、电力和掩护资金。而且,云主机是基于使用量计费的,多用多付,少用少付,所以对小网站专门便利。
(2)可靠。
因为服务分布在多台服务器、甚至多个机房,所以不便于彻底宕机,抗灾容错能力强,可以确保长日子在线。
(3)可扩张性好(scalability)。
云主机的主干特征就是分布式架构,所以可以举手之劳地充实服务器,成倍扩张服务力量。
四、云主机的瑕疵
一部分客户担心云主机的安全难点,感到对服务不够控制。
因为云主机只是提供网络接口,所以客户的数额肯定全体遵从云服务集团的配置,完全在后人决定之下。数据是还是不是安全保密,取决于后者的职业道德和维护力量。
但是,那实际是一个”伪难点”,因为多数情景下,云服务集团会比客户更在乎、也更善于爱惜数量。Paul格兰汉在《黑客与艺术家》一书中,就谈过那或多或少:
”反对者往往以为大家的出品不安全,固然职工可以很简单地登录,那么坏人也可以很简单地登录。一些大集团认为不可能把客户的信用卡资料交给大家,而是放在自己的服务器上更安全。……不过事实上,他们的服务器就是没我们的哈密,大家对数码的护卫大概肯定比她们好。
想想看,什么人能雇到更高品位的网络安全专家,是一个有所事务就是管打败务器的技术型创业集团,依然一家衣裳零售商?……而且大家比他们更关心数据的安全。若是一家衣服零售商的服务器被侵入,最三只影响到这家商店本身,那件事也很可能在信用社里面被遮盖起来,最惨重的场馆下可能还会有一个职工被辞退。不过,即使大家的服务器被侵略,就有广大家合作社可能面临震慑,那件事也许还会被看作音信,发布在业内网站上边,使得大家工作做不下去,不得不关门歇业。
要是你想把钱藏在平安的地方,请问您是选择家庭床垫上面,仍然选取银行?这几个比喻对服务器管理的总体都适用,不仅是安全性,还包含健康运行时刻、带宽、负载管理、备份等等,都是大家占优。”

使用

率先大家在Android Studio中新建一个品种,取名为
InstrumentedUnitTests。同时删除自动生成的一对文本,最后目录结构如下:

目录结构

接下去大家看看如何一步一步的运用Instrumented Unit Tests,首先在app目录的
build.gradle 文件中添加下边的引入,按照提示点击Sync Now。

dependencies {
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
}

android {
    defaultConfig {
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
}

接下去大家在main文件夹中新建一个config类,模拟经常编制的待测试方法。

Config.class

充实多少个法子模拟通过SharedPreferences保存数据

package me.shihao.instrumentedunittests;

import android.content.Context;
import android.content.SharedPreferences;

/**
 * Created by shihao on 2017/2/28.
 */

public class Config {

private static SharedPreferences sharedPreferences;
private static SharedPreferences.Editor editor;
private static Config instance;

private Config(Context context) {
    sharedPreferences = context.getSharedPreferences("test", Context.MODE_PRIVATE);
    editor = sharedPreferences.edit();
}

public static Config getInstance(Context context) {
    if (instance == null) {
        synchronized (Config.class) {
            if (instance == null) {
                instance = new Config(context.getApplicationContext());
            }
        }
    }
    return instance;
}

/**
 * 模拟待测试方法,通过SharedPreferences保存userId
 *
 * @param userId
 */
public static void setUserId(String userId) {
    editor.putString("userId", userId);
    editor.commit();
}

/**
 * 模拟待测试方法,通过SharedPreferences读取userId
 *
 * @return
 */
public static String getUserId() {
    return sharedPreferences.getString("userId", "");
}
}

接下去大家编辑测试类,在Config.class中的单机鼠标右键 >> 采取Go
To >> Test

Paste_Image.png

选择Create New Test

Paste_Image.png

Testing library接纳JUnit4,同时在Generate test methods
for中而且入选setUserIdgetUserId

Paste_Image.png

选择…/app/src/androidTest/java/…

Paste_Image.png

咱俩得以见见在刚刚采纳的目录中一度帮大家转移好了测试类ConfigTest.class

ConfigTest.class

接下去大家开头编制测试类,首先需求在类开端添加注明@RunWith(AndroidJUnit4.class)。通过前边的篇章,可以精通相比较Local
Unit
Tests多了走访设备新闻和测试筛选,详细的可以查看前边的篇章,接下去我们看详细的测试代码:

package me.shihao.instrumentedunittests;

import android.content.Context;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;

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

import static org.junit.Assert.*;

/**
 * Created by shihao on 2017/3/1.
 */
@RunWith(AndroidJUnit4.class)
public class ConfigTest {

    private static String userId;

    @BeforeClass
    public static void setUp() {
        userId = "1002123";
    }

    @Test
    public void setUserId() throws Exception {
        //模拟通过SharedPreferences保存userId
        Context context = InstrumentationRegistry.getTargetContext();
        Config.getInstance(context).setUserId(userId);
    }

    @Test
    public void getUserId() throws Exception {
        //读取保存的数据,对比是否保存成功
        Context context = InstrumentationRegistry.getTargetContext();
        String id = Config.getInstance(context).getUserId();
        assertEquals(userId, id);
    }
}

package me.shihao.instrumentedunittests;

import android.content.Context;
import android.content.SharedPreferences;

/**
 * Created by shihao on 2017/2/28.
 */

public class Config {

    private static SharedPreferences sharedPreferences;
    private static SharedPreferences.Editor editor;
    private static Config instance;

    private Config(Context context) {
        sharedPreferences = context.getSharedPreferences("test", Context.MODE_PRIVATE);
        editor = sharedPreferences.edit();
    }

    public static Config getInstance(Context context) {
        if (instance == null) {
            synchronized (Config.class) {
                if (instance == null) {
                    instance = new Config(context.getApplicationContext());
                }
            }
        }
        return instance;
    }

    /**
     * 模拟待测试方法,通过SharedPreferences保存userId
     *
     * @param userId
     */
    public static void setUserId(String userId) {
        editor.putString("userId", userId);
        editor.commit();
    }

    /**
     * 模拟待测试方法,通过SharedPreferences读取userId
     *
     * @return
     */
    public static String getUserId() {
        return sharedPreferences.getString("userId", "");
    }
}

接下去运行测试,看看效果怎么样

运作结果

从结果可以看看,我们的测试都是因而了的。自此,前边三种测试的用法几乎就是这么,实际采纳中大家可以见到,那三种都是一向不与界面相交互的,接下去大家就看一看如何在测试中与界面相交互,欢迎查看下一篇小说:

Demo代码已经停放了Github上:https://github.com/fodroid/InstrumentedUnitTests

上一篇小说:

只要您以为可行,请在Github不吝给自家一个Star,非凡感谢。


发表评论

电子邮件地址不会被公开。 必填项已用*标注