精华内容
下载资源
问答
  • Android测试总结

    千次阅读 2016-07-25 21:17:29
    Android测试总结Android测试总结 简介 代码测试 Junit Mockito Mockwebserver Android自动化测试 Android monkey Android monkeyrunner Android UIAutomator Android Espresso 自动化测试示例 Monkey Monkey Runner ...

    Android测试总结


    简介

    最近整理了Android测试方便的只是,主要涉及代码测试和自动化测试。

    代码测试

    Junit

    JUnit浅谈

    Mockito

    Mockito浅谈

    Mockwebserver

    MockWebServer

    Android自动化测试

    Android monkey

    Android Monkey整理

    Android monkeyrunner

    Android monkeyrunner整理

    Android UIAutomator

    Android UIAutomator浅谈

    Android Espresso

    Android Espresso浅谈

    自动化测试示例

    下面示例一个Android项目,就是一个简单的登录页面,依次使用上面介绍的自动化测试方案测试界面。

    首先是界面布局:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout android:id="@+id/activity_main"
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:padding="20dp"
        tools:context="cn.mycommons.testcase.MainActivity">
    
        <EditText
            android:id="@+id/edtUserName"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:hint="Input user name" />
    
        <EditText
            android:id="@+id/edtPasswd"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:hint="Input password"
            android:contentDescription="Input password"
            android:inputType="textPassword" />
    
        <Button
            android:id="@+id/btnLogin"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:text="Login" />
    </LinearLayout>

    其次是页面代码:

    package cn.mycommons.testcase;
    
    import android.content.Intent;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;
    
    public class MainActivity extends AppCompatActivity {
    
        EditText edtUserName;
        EditText edtPasswd;
        Button btnLogin;
    
        String userName;
        String passwd;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            edtUserName = (EditText) findViewById(R.id.edtUserName);
            edtPasswd = (EditText) findViewById(R.id.edtPasswd);
            btnLogin = (Button) findViewById(R.id.btnLogin);
    
            btnLogin.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    userName = edtUserName.getText().toString();
                    passwd = edtPasswd.getText().toString();
                    if (check(userName, passwd)) {
                        doLogin(userName, passwd);
                    }
                }
            });
        }
    
        boolean check(String userName, String passwd) {
            do {
                if (userName.length() < 5) {
                    showToast("User name invalidate");
                    break;
                }
                if (passwd.length() < 5) {
                    showToast("Password invalidate");
                    break;
                }
                return true;
            } while (false);
            return false;
        }
    
        void doLogin(String userName, String passwd) {
            if ("admin".equals(userName) && "admin".equals(passwd)) {
                showToast("Login success");
                startActivity(new Intent(this, SuccessActivity.class));
            } else {
                showToast("Login fail");
            }
        }
    
        void showToast(String msg) {
            Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
        }
    }

    Monkey

    Monkey只是检查使用下shell命令即可。

    adb shell monkey -p cn.mycommons.testcase -v 50000

    Monkey Runner

    Monkey Runner提供的是一个python文件,然后调用monkeyrunner命令即可。

    $ monkeyrunner test_case.py
    # Imports the monkeyrunner modules used by this program
    from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
    
    # Connects to the current device, returning a MonkeyDevice object
    print 'wait for device connection.'
    device = MonkeyRunner.waitForConnection()
    print 'connect device success.'
    
    # Takes a screenshot
    result = device.takeSnapshot()
    print 'takeSnapshot success.'
    # Writes the screenshot to a file
    result.writeToFile('./test_case1.png','png')
    print 'save image to file success.'
    
    # input user name
    device.touch(200,380,'DOWN_AND_UP')
    print 'touch user name'
    for x in xrange(1,100):
        device.press("KEYCODE_DEL",'DOWN_AND_UP')
    print 'delete user name'
    device.type("admin")
    print 'input admin to user name'
    
    # input passwd 
    device.touch(200,500,'DOWN_AND_UP')
    print 'touch password'
    for x in xrange(1,100):
        device.press("KEYCODE_DEL",'DOWN_AND_UP')
    print 'delete password'
    device.type("admin")
    print 'input admin to password'
    
    # press login button
    device.touch(200,680,'DOWN_AND_UP')
    print 'press login button'
    
    MonkeyRunner.sleep(2)
    
    # Takes a screenshot
    result = device.takeSnapshot()
    print 'takeSnapshot success.'
    # Writes the screenshot to a file
    result.writeToFile('./test_case2.png','png')
    print 'save image to file success.'

    UiAutomator

    package cn.mycommons.testcase;
    
    import android.content.Context;
    import android.content.Intent;
    import android.os.Build;
    import android.support.test.InstrumentationRegistry;
    import android.support.test.filters.SdkSuppress;
    import android.support.test.runner.AndroidJUnit4;
    import android.support.test.uiautomator.By;
    import android.support.test.uiautomator.UiDevice;
    import android.support.test.uiautomator.UiObject;
    import android.support.test.uiautomator.UiObjectNotFoundException;
    import android.support.test.uiautomator.UiSelector;
    import android.support.test.uiautomator.Until;
    import org.hamcrest.Matchers;
    import org.junit.Before;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import static org.junit.Assert.assertThat;
    
    @RunWith(AndroidJUnit4.class)
    @SdkSuppress(minSdkVersion = Build.VERSION_CODES.JELLY_BEAN_MR2)
    public class MainActivityTest {
    
        private static final String BASIC_SAMPLE_PACKAGE = "cn.mycommons.testcase";
        private static final int LAUNCH_TIMEOUT = 5000;
        private static final String STRING_TO_BE_TYPED = "UiAutomator";
    
        private UiDevice mDevice;
    
        @Before
        public void before() {
            mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation());
            mDevice.pressHome();
    
            // Wait for launcher
            final String launcherPackage = mDevice.getLauncherPackageName();
            assertThat(launcherPackage, Matchers.notNullValue());
            mDevice.wait(Until.hasObject(By.pkg(launcherPackage).depth(0)), LAUNCH_TIMEOUT);
    
            Context context = InstrumentationRegistry.getContext();
            final Intent intent = context.getPackageManager().getLaunchIntentForPackage(BASIC_SAMPLE_PACKAGE);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
            context.startActivity(intent);
    
            // Wait for the app to appear
            mDevice.wait(Until.hasObject(By.pkg(BASIC_SAMPLE_PACKAGE).depth(0)), LAUNCH_TIMEOUT);
        }
    
        @Test
        public void testLogin1() throws UiObjectNotFoundException {
            UiObject login = mDevice.findObject(new UiSelector().text("Login"));
            UiObject edtUserName = mDevice.findObject(new UiSelector().text("Input user name"));
            UiObject edtPasswd = mDevice.findObject(new UiSelector().descriptionContains("Input password"));
    
            edtUserName.clearTextField();
            edtPasswd.clearTextField();
    
            edtUserName.setText("admin");
            edtPasswd.setText("admin");
            login.click();
    
            mDevice.waitForWindowUpdate(BuildConfig.FLAVOR, 3000);
        }
    
        @Test
        public void testLogin2() throws UiObjectNotFoundException {
            UiObject login = mDevice.findObject(new UiSelector().text("Login"));
            UiObject edtUserName = mDevice.findObject(new UiSelector().text("Input user name"));
            UiObject edtPasswd = mDevice.findObject(new UiSelector().descriptionContains("Input password"));
    
            edtUserName.clearTextField();
            edtPasswd.clearTextField();
            edtUserName.setText("");
            edtPasswd.setText("");
    
            login.click();
        }
    
        @Test
        public void testLogin3() throws UiObjectNotFoundException {
            UiObject login = mDevice.findObject(new UiSelector().text("Login"));
            UiObject edtUserName = mDevice.findObject(new UiSelector().text("Input user name"));
            UiObject edtPasswd = mDevice.findObject(new UiSelector().descriptionContains("Input password"));
    
            edtUserName.clearTextField();
            edtPasswd.clearTextField();
            edtUserName.setText("abc");
            edtPasswd.setText("");
    
            login.click();
        }
    
        @Test
        public void testLogin4() throws UiObjectNotFoundException {
            UiObject login = mDevice.findObject(new UiSelector().text("Login"));
            UiObject edtUserName = mDevice.findObject(new UiSelector().text("Input user name"));
            UiObject edtPasswd = mDevice.findObject(new UiSelector().descriptionContains("Input password"));
    
            edtUserName.clearTextField();
            edtPasswd.clearTextField();
            edtUserName.setText("");
            edtPasswd.setText("abc");
    
            login.click();
        }
    
        @Test
        public void testLogin5() throws UiObjectNotFoundException {
            UiObject login = mDevice.findObject(new UiSelector().text("Login"));
            UiObject edtUserName = mDevice.findObject(new UiSelector().text("Input user name"));
            UiObject edtPasswd = mDevice.findObject(new UiSelector().descriptionContains("Input password"));
    
            edtUserName.clearTextField();
            edtPasswd.clearTextField();
            edtUserName.setText("abc");
            edtPasswd.setText("abc");
    
            login.click();
        }
    
        @Test
        public void testLogin6() throws UiObjectNotFoundException {
            UiObject login = mDevice.findObject(new UiSelector().text("Login"));
            UiObject edtUserName = mDevice.findObject(new UiSelector().text("Input user name"));
            UiObject edtPasswd = mDevice.findObject(new UiSelector().descriptionContains("Input password"));
    
            edtUserName.clearTextField();
            edtPasswd.clearTextField();
            edtUserName.setText("abcedf");
            edtPasswd.setText("abc");
    
            login.click();
        }
    
        @Test
        public void testLogin7() throws UiObjectNotFoundException {
            UiObject login = mDevice.findObject(new UiSelector().text("Login"));
            UiObject edtUserName = mDevice.findObject(new UiSelector().text("Input user name"));
            UiObject edtPasswd = mDevice.findObject(new UiSelector().descriptionContains("Input password"));
    
    
            edtUserName.clearTextField();
            edtPasswd.clearTextField();
            edtUserName.setText("abcedf");
            edtPasswd.setText("abcedf");
    
            login.click();
        }
    }

    Espressor

    package cn.mycommons.testcase;
    
    import android.support.test.espresso.Espresso;
    import android.support.test.espresso.action.ViewActions;
    import android.support.test.espresso.matcher.ViewMatchers;
    import android.support.test.rule.ActivityTestRule;
    import android.support.test.runner.AndroidJUnit4;
    import org.junit.Rule;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    
    @RunWith(AndroidJUnit4.class)
    public class MainActivityEspressoTest {
    
        @Rule
        public ActivityTestRule<MainActivity> testRule = new ActivityTestRule<>(MainActivity.class);
    
        @Test
        public void testLogin() {
            Espresso.onView(ViewMatchers.withContentDescription(R.id.edtUserName)).perform(ViewActions.typeText("admin"));
            Espresso.onView(ViewMatchers.withId(R.id.edtPasswd)).perform(ViewActions.typeText("admin"));
            Espresso.onView(ViewMatchers.withId(R.id.btnLogin)).perform(ViewActions.click());
        }
    
        @Test
        public void testLogin1() {
            Espresso.onView(ViewMatchers.withId(R.id.edtUserName)).perform(ViewActions.typeText(""));
            Espresso.onView(ViewMatchers.withId(R.id.edtPasswd)).perform(ViewActions.typeText(""));
            Espresso.onView(ViewMatchers.withId(R.id.btnLogin)).perform(ViewActions.click());
        }
    
        @Test
        public void testLogin2() {
            Espresso.onView(ViewMatchers.withId(R.id.edtUserName)).perform(ViewActions.typeText("abc"));
            Espresso.onView(ViewMatchers.withId(R.id.edtPasswd)).perform(ViewActions.typeText(""));
            Espresso.onView(ViewMatchers.withId(R.id.btnLogin)).perform(ViewActions.click());
        }
    
        @Test
        public void testLogin3() {
            Espresso.onView(ViewMatchers.withId(R.id.edtUserName)).perform(ViewActions.typeText(""));
            Espresso.onView(ViewMatchers.withId(R.id.edtPasswd)).perform(ViewActions.typeText("abc"));
            Espresso.onView(ViewMatchers.withId(R.id.btnLogin)).perform(ViewActions.click());
        }
    
        @Test
        public void testLogin4() {
            Espresso.onView(ViewMatchers.withId(R.id.edtUserName)).perform(ViewActions.typeText("abc"));
            Espresso.onView(ViewMatchers.withId(R.id.edtPasswd)).perform(ViewActions.typeText("abc"));
            Espresso.onView(ViewMatchers.withId(R.id.btnLogin)).perform(ViewActions.click());
        }
    
        @Test
        public void testLogin5() {
            Espresso.onView(ViewMatchers.withId(R.id.edtUserName)).perform(ViewActions.typeText("abcdef"));
            Espresso.onView(ViewMatchers.withId(R.id.edtPasswd)).perform(ViewActions.typeText("abcdef"));
            Espresso.onView(ViewMatchers.withId(R.id.btnLogin)).perform(ViewActions.click());
        }
    }

    自动化测试总结

    • Monkey
      准确来说,这不算是自动化测试,因为其只能产生随机的事件,无法按照既定的步骤操作;

    • Monkeyrunner
      优点:操作最为简单,可以录制测试脚本,可视化操作;
      缺点:主要生成坐标的自动化操作,移植性不强,功能最为局限,上面代码中已经显示出来,完全使用的数字坐标,移植到另外一个设备,则不能运行。

    • UiAutomator
      优点:可以对所有操作进行自动化,操作简单;
      缺点:Android版本需要高于4.3,无法根据控件ID操作,相对来说功能较为局限,但也够用了;

    • Espresso
      优点:主要针对某一个APK进行自动化测试,APK可以有源码,也可以没有源码,功能强大;
      缺点:针对APK操作,因此操作相对复杂;

    总结:由上面介绍可以有这样的结论:测试某个APK,可以选择Espresso;测试过程可能涉及多个APK,选择UiAutomator;一些简单的测试,选择Monkeyrunner;

    展开全文
  • 接口测试总结

    千次阅读 2017-10-29 10:18:20
    接口测试总结 一接口测试范围 二接口测试策略 接口设计检查 接口依赖关系检查 接口输入输出验证 第一类条件判断接口 1判断条件的验证 2异常数据的响应 第二类数据查询接口 用户经验值查询接口 第三类逻辑运算接口 三...

    接口测试总结

    由于平台服务器是通过接口来与客户端交互数据提供各种服务,因此服务器测试工作首先需要进行的是接口测试工作。测试人员需要通过服务器接口功能测试来确保接口功能实现正确,那么其他测试人员进行客户端与服务器结合的系统测试过程中,就能够排除由于服务器接口缺陷所导致的客户端问题,便于开发人员定位问题。以下便是个人的平台服务器接口功能测试经验总结:

    一、接口测试范围

    根据服务器的测试需求,接口测试范围主要分为:
    
    1、新增接口的测试;
    2、新增业务功能接口测试;
    3、整个服务器的接口测试。所需测试测试接口依次增多,在测试时间足够的条件下,当然需要对所有接口进行测试用例的设计,但如果测试较短的情况下,则应该首先根据用户的典型操作对测试接口进行优先级划分,对调用频繁接口需要优先进行测试。
    

    二、接口测试策略

       在进行平台服务器接口测试之前,首先需要整理服务器接口的测试方案,分析接口测试的要点,平台服务器的接口测试内容主要有:
    

    接口设计检查

    接口用于服务器与客户端的数据交互,客户端通过网络协议传递的数据为服务器接口的输入数据,因此应该首先通过服务器接口文档及客户端数据约束文档进行交互数据的有效性检查:

    n 整数型数据位数

    n 浮点型数据精度

    n 字符串数据范围值

    要求客户端的整数型、浮点型、字符串数据以及其最大值和最小值都能作为服务器接口的有效输入。这些工作在服务器设计评审时就可以进行,以便确保不会出现客户端上传数据被服务器自动进行截断或四舍五入的操作。

    接口依赖关系检查

    以上策略只谈到单个接口的测试方法,对于用户来说,一个操作可能会造成服务器调用多个接口来进行完成,因此还需要从业务处理的角度,对各种业务操作所涉及的多个接口之间依赖调用进行测试。
    
    接口依赖关系检查主要是通过接口的输出值为另一接口的输入值来实现的,因此在进行接口测试之前,需要分析所测试接口的输入值是通过客户端还是其他接口输出来获取的,在设计测试用例时,加入接口的依赖关系说明以便于测试。
    

    接口输入/输出验证

    服务器接口功能测试类似于单元测试,在设计测试用例时,侧重点在于接口模块输入/输出项的正确性验证,根据接服务器接口处理方式,对各种接口进行分类:

    第一类:条件判断接口

       这类接口在接收到请求数据后,会根据输入参数进行条件判断,然后返回相应结果码,通常涉及条件判断的接口有:用户鉴权接口、升级状态上报、密码修改/重置等接口。因此输入/输出项验证的侧重点主要集中在:
    
    1)判断条件的验证

    要对判断条件进行验证,则需要知道接口是根据哪些输入项来进行判断的,以密码重置接口为例:

    密码重置接口

    『接口功能』:用户登录之后发起找回密码操作,用户输入邮箱信息后,游戏中心将向平台服务器发送请求,平台服务器将随机为用户生成新的密码,发到用户的邮箱中。

    此接口根据输入的userID、email参数来进行数据正确性的判断(key是接口名称,如果错误服务器将不会处理,version是版本号,其值只是用于记录,不参与判断),设计接口测试用例时,应该首先对接口的判断参数进行验证,这些输入项不能为空,然后利用等价类划分、边界值方法来根据userID、email输入项设计各种合法的数据,验证接口是否可以正常处理。

    此外必须要关注数据库的数据,所以加入数据库里数据的校验。比如修改/重置密码后,要去看下数据库的密码是否是修改后的数据
    
    2)异常数据的响应

    只考虑正常情况,而不考虑异常场景是无法保证接口功能运行正常,对于密码重置接口,用户ID不存在、不合法,邮箱输入格式错误、用户邮箱信息不存在或未激活就是测试时需要考虑的异常场景,设计这类输入值,并且检查接口返回的响应码,响应码的正确才能保证客户端根据异常情况来显示相应的提示信息。简而言之,条件判断的接口其测试策略就是根据判断条件来设计各种输入值来检验接口的功能。

    第二类:数据查询接口

       这类接口接收到请求数据后,首先会验证请求是否合法,然后会根据请求项查询数据库相应表中数据返回给客户端,通常涉及数据查询的接口有:用户基本资料/经验值/赛事信息查询、游戏列表获取、在线人数查询等接口。以用户经验值查询接口为例:
    
    用户经验值查询接口

    『接口功能』:用户登录游戏中心后,可以查询自己每个游戏项目的经验值信息,包括此项目的经验值等级、等级称号、今日经验值上限等。

    『接口方向』:游戏中心—>平台服务器

    『遵循协议』:HTTP+XML,请求消息使用Post方式

    此接口首先会根据webkey来判断请求是否合法,然后根据请求参数中的userID、isAll、sportItemID来查询数据表中相应数据。除了象条件判断接口一样根据判断项webkey、请求参数userID、isAll、sportItemID设计合法/不合法和正常/异常测试值之外,还需要结合数据库来对查询结果进行验证:

    1)是否根据正确的关联数据表进行查询;

    2)验证查询结果是否从数据表中正确项中获取,涉及到多表联合查询时,不同表中的相同项设计不同测试数据进行验证;

    3)修改查询结果在数据表中对应项中的数据,使其为空值或客户端相应项的范围值的最大和最小值,查看接口输出是否正确。

    第三类:逻辑运算接口

    这类接口在收到请求数据之后,会进行一系列逻辑运算,然后根据处理结果更新数据库中的数据,通常涉及逻辑运算的接口有:比赛成绩同步、商品支付、各种数据报表等接口。
    

    此接口比数据查询接口又更加复杂,除了用条件判断和数据查询类接口的策略对此接口进行测试用例设计之外,还需要验证对接口的算法规则进行检查,因为此接口涉及根据用户比赛成绩(record)进行排名然后返回其得分及排名情况(score、rank、upRankFlag、exp),通过对相关数据表中的数据进行查看方式,接口算法规则验证包括:

    1)用户胜利、失败、中途主动/被动退出、规定时间内未完成比赛情况下,此场比赛得分(scroe)是否正确;

    2)用户比赛成绩比上次成绩花费时间短、长、持平情况下,排名情况(upRankFlag)是否正确;

    3)用户比赛成绩处于第一名、最后一名、比上次成绩花费时间短/长/持平情况下,用户积分排名(rank)是否正确;

    4)用户胜利、失败、中途主动/被动退出、规定时间内未完成比赛,并且用户经验值在各种经验等级范围下,经验值根据得分进行计算的公式是否正确。

    逻辑运算接口由于还涉及插入或更新数据库操作,因此测试时还需要考虑数据库特性,如数据精度问题,在MySQL数据库中,如果是浮点型数据,存入时会有精度误差(131072.32插入float(10,2)类型的数据会变为131072.31),因此对于需要用于金额计算、数据统计、成绩比较的数据,最好使用定点型。
    
    最后服务器接口的测试如果有足够条件的话,还需要通过白盒测试来对接口代码做进一步的测试,通过编写关键代码的测试桩,可以有效查找将字符数组当成字符串使用造成的读越界这类不易通过黑盒测试发现的BUG。接下来的工作就是如何通过测试工具来执行服务器接口功能测试。
    

    三、支付接口

    一、支付流程

    用户 | 商户系统 | 第三方支付
    —|—|—
    1.用户下单,发送到商户系统。

    2.商户系统生产订单,构造支付请求;发送支付请求给第三方。

    3.第三方向用户展示支付相关信息。

    4.用户输入密码确认支付,发送给第三方。

    5.第三方收到支付密码,确认完成支付

    6.第三方向商户系统返回支付成功,同时后台通知支付结果。

    7.商户系统返回给用户支付结果页面。

    8.用户确认支付成功,发货。

    二、接入流程

    1.业务系统调用支付中心支付接口。

    2.支付中心鉴权。失败:进入支付中心错误。成功:进入支付中心收银台页面。

    3.选择支付方式,向支付机构发起支付。

    4.支付机构通知支付中心支付结果。

    5.支付中心回调业务系统通知支付结果。

    三、接口规范

    1.接口说明

    2.调用URL

    3.请求方法(get/post)

    4.请求参数、参数类型、请求参数说明

    5.返回参数说明

    四、测试用例

    1.通过性验证;参数组合;异常验证(必传/非必传、参数类型、参数长度、为空、边界值);业务逻辑(如:登陆失败5次,需要等待15分钟再登录)

    2.接口安全:

    (1)绕过验证。如购买商品价格300元,提交时用Fiddler设置断点修改金额为3,看后端有没有做验证

    (2)绕过身份授权。如只能是卖家才能修改商品信息接口,我传一个普通用户或其他商家是否能修改成功

    (3)参数是否加密。不加密就能被拦截修改;加密规则是否容易破解

    (4)密码安全规则。密码的复杂程度校验

    五、测试模版

    六、接口参数

    1.收款号;seller_email

    2.商品名称;subject

    3.金额;total_fee

    4.商家名;

    5.付款方式;

    6.sign;key;

    7.外部交易号(商品的ID,primarykey);out_trade_no

    8.合作身份者ID(签订合同后得到一个表示自己的唯一号);partner

    —后面将持续更新!

    展开全文
  • 测试总结报告写法简单总结

    千次阅读 2019-11-02 17:24:50
    1. 编写目的 编写目的先总的说本文档是什么...参考文档写任务书和需求,还要写方案中的提交文档和功能测试总结报告模板 4. 项目组成员 从方案中粘 5. 测试环境与配置 从方案中粘硬件和软件配置 6. 测试用例方法 总的...

    1. 编写目的

    编写目的先总的说本文档是什么文档,编写此文档的目的是什么,总的说一下,然后在写以下具体的编写目的,最后的预期读者从需求里粘过来。

    2. 项目背景

    从方案中粘项目背景,完全粘过来,不用任何改动

    3. 测试参考文档

    参考文档写任务书和需求,还要写方案中的提交文档和功能测试总结报告模板

    4. 项目组成员

    从方案中粘

    5. 测试环境与配置

    从方案中粘硬件和软件配置

    6. 测试用例方法

    总的说一下这次测试用的方法,在具体说明都有那些方法,如等价类划分法和其说明。

    7. 测试方法

    测试方法写一句话(针对需求结果分析,本次测试采用黑盒测试、UI界面测试、安全性测试、易用性测试,以下是对这几种测试方法的简要描述),这些测试方法就是从需求中技术要求粘过来的,然后做一个表格,表头是方法名称和方法说明两个,然后就把需求中的技术要求粘过来,因为有黑盒测试,表格第一行要写方法名称要写黑盒测试,方法说明可以写简短一点,如,黑盒测试又称为功能测试,是测试系统功能但不检查系统代码的一种测试方法

    8. 测试进度回顾

    从需求中粘

    9. 功能测试回顾

    描述测试过程中web端和移动App端的测试过程以及结果,先总写以下花费时间为4个小时,测试过程严格按照软件测试项目的流程开展,包括需求分析、测试方案编写、测试执行(查找Bug)、测试总结报告编写5个阶段,各项具体措施任务的开展遵循测试方案中的计划安排。
    具体测试过程中,采用了什么测试用例设计方法,把测试用例设计方法名称写上,不用写解释,在加一句话(测试用例完全覆盖功能点,根据用例逐条执行查找BUG)
    最后一段说一下测试结果,共设计测试用例多少条,Bug多少条,测试用例完全覆盖功能点,最后一句话写所有测试工作均已顺利完成即可。

    10. Web端用例汇总

    从需求中粘模块,用例编写人用excel表格,执行人同理

    11. 移动端用例汇总

    从需求中粘模块,用例编写人用excel表格,执行人同理

    12. Web端Bug汇总

    从Bug缺陷报告清单中粘,Bug清单模板和这个完全一样。

    13. 移动端Bug汇总

    从Bug缺陷报告清单中粘,Bug清单模板和这个完全一样。

    14. 测试结论

    分四点,最终测试结果说明,测试过程中遇到的重要问题,被测系统的质量总结,个人的收获和得失。
    (1)最终测试结果说明以下测试的系统web端有多少个模块,多少个功能点,设计用例多少条,发现Bug多少条,移动端有多少个模块,多少个功能点,设计多少条用例。发现Bug多少条。
    (2)测试过程遇到的问题是从方案中的风险粘过来的,只粘风险详情和解决方法,快速的方法就是都粘过来,再删风险那一列。
    (3)被测系统的质量总结写根据测试结果发现系统中还存在级别为严重和很高的Bug,尤其是哪个模块和哪个模块的Bug较为严重,所以我们认为现阶段该系统质量不达标,测试不通过。建议软件测试开发人员将系统中Bug修复后,再由测试人员通过测试后方可向用户提交。
    (4)个人的收获和得失写通过本次测试工作,我们体会到了合理的任务分配和时间安排可以加快工作进度,我们的相关专业知识得到了提升,对软件测试这个行业有了更深的了解
    (5)这个是额外加的发现系统开放性Bug,这个占2分,一定要写。这次比赛中发现的系统开放型Bug是日历控件中选择一个日期按回车键会出现位置页面,并且在资产入库页面新添加一条记录。

    展开全文
  • App接口测试总结

    千次阅读 2019-01-22 17:50:57
    参考: 接口测试及常用接口测试工具 app接口测试 App接口测试总结
    展开全文
  • 接口测试与接口性能测试总结

    千次阅读 多人点赞 2019-03-19 16:33:40
    接口测试与接口性能测试总结 这段时间在自己搭建公司的测试平台框架,基本已经成型,可以满足编写接口、接口自动化、接口性能、数据展示等功能,回过头来看可以使用的工具,发现还是尽量保持“工具引用,不依赖工具...
  • 性能测试总结

    万次阅读 2012-04-06 16:01:21
    性能测试总结
  • 系统测试总结报告模板

    万次阅读 2019-01-31 16:00:04
    系统测试总结报告 1 引言 1.1 编写目的 编写该测试总结报告主要有以下几个目的 1. 通过对测试结果的分析,得到对软件质量的评价 2. 分析测试的过程,产品,资源,信息,为以后制定测试计划提供参考 3....
  • SQL注入测试总结

    万次阅读 2018-07-11 11:10:04
    SQL注入测试总结本文以MySQL数据库为例,其它数据库仅供参考。1 黑盒测试1.1 手工测试Web应用的主要注入点有:① POST请求体中的参数② GET请求头URL中的参数③ Cookie1.1.1 内联注入1、字符串内联注入测试字符串...
  • 测试报告(包括测试总结

    万次阅读 2017-12-12 14:45:25
    其他的后续再添加,这次主要写下测试总结要注意的点。 测试总结: 1.总体情况 2.缺少设备或资源导致测不到的地方(在测试计划完成后,一定要向项目经理或需求提出要这些资源) 3.某些模块,开发不进行修改的理由...
  • 测试总结报告内容

    千次阅读 2019-09-22 02:02:49
    测试总结报告内容 一、目的 二、重要项说明 1、系统概述:项目/产品名称、版本、测试项目等 2、测试环境: (1)软件环境:操作系统、服务器端、客户端、Web应用、数据库、浏览器 (2)硬件环境:...
  • CTS 测试总结

    千次阅读 2017-03-03 15:06:32
    CTS测试总结  根据需要使用google提供的最新版本cts tool进行测试。 因我们本地使用的是windows系统,那么在本地使用cts tool时需要我们自己书写一个终端来运行cts tool。当然如果你之前已经写好了脚本文件...
  • PPPOE+测试总结

    千次阅读 2018-06-14 15:30:47
    PPPOE+测试总结PPPOE+测试总结一、PPPoE+概述PPPoE+ 又称为PPPoE Intermediate Agent,和DHCP option82类似,它对PPPoE协议报文进行了扩充。接入设备截获PPPoE发现阶段的协议报文,在上行方向插入用户物理信息,在...
  • 关于各个测试阶段的测试总结: 在集成测试阶段如果还是单元测试模式,那么必然是不可行的; 在集成测试阶段就应该把系统集成到一起,按照全流程进行测试,按照真实的操作步骤来执行; 集成上下文中的数据是系统...
  • Hadoop之POC测试总结

    千次阅读 2019-01-29 22:32:21
    POC测试总结一、 测试内容测试内容测试目的其他功能测试验证产品的自动部署安装、集成统一管理、运维监控功能是否完善、对SQL的支持能力(SQL-标准、事务支持能力、索引、存储过程、UDF),混合负载管理能力存储特性...
  • 开发板串口测试总结

    千次阅读 2017-07-19 15:27:57
    开发板串口测试总结 一般开发板说明书自带串口测试说明,只需要按照说明进行即可,我这里做简要总结。 1.用串口线连接电脑和开发板的串口 2.打开外部串口(这里的外部是对于开发板来说) 新建一个SecurCRT窗口或...
  • 测试总结模板

    2009-12-18 23:04:00
    软件测试总结的就是对整个测试流程进行科学和系统的总结,并根据这些结果对测试进行评价。这种报告是测试人员对测试工作进行总结。供参考的测试总结模板如下所示。1. 概述 1.1 编写目的1.2 项目背景1.3 系统简介 ...
  • 测试基础---测试总结

    千次阅读 2012-11-03 22:10:27
    大家好,今天和大家一起分享的是测试总结。 当我们完成了一个测试项目时就要写测试总结了。那什么时候我们可以终止测试呢?软件测试结束的第一个必要条件是所有在测试计划中所列出的测试项和标准都通过测试。还有...
  • web测试之功能测试总结

    万次阅读 多人点赞 2018-01-16 19:41:29
    所以今天主要是给大家整理下功能测试要点,以web测试来进行总结。 web测试是什么? web测试就是基于BS架构的软件产品的测试,通俗点来说就是web网站的测试
  • 今天Unity学习测试总结

    千次阅读 2016-09-22 20:02:49
    今天Unity学习测试总结,Unity3D测试总结U3D经常莫名奇妙崩溃。 一般是由于空异常造成的,多多检查自己的引用是否空指针。 2.编码切换警告提示。 警告提示:Some are Mac OS X (UNIX) and some are Windows. This ...
  • web接口测试总结

    千次阅读 2015-06-09 18:39:42
    web接口测试总结(转载请注明)  面试中我偏爱问的一个问题是这样的:"接口测试(仅限controller层,不设计service和dao层接口)有什么用,应该怎么做?"。答案当然五花八门,有根本不做的、有模式化的模拟发送请求...
  • 软件测试总结 (一)

    千次阅读 2017-07-04 00:06:22
    软件测试总结 (一) 本文索引 产品质量的标准软件测试分类静态测试和动态测试主动测试和被动测试白盒测试和黑盒测试软件测试级别软件测试工作的组织与管理测试工作的实施测试工作流程 产品质量的标准 ...
  • 近年来随着移动互联网发展迅猛,APP也进行了爆发式的增长,相应的APP的测试检测就摆在每家企业眼前,这次有幸请到了国内应用安全检测团队-爱内测(www.ineice.com)的CTO为我们介绍App应用程序测试流程及测试总结: ...
  • 软件测试总结——常见的面试问题(一)

    万次阅读 多人点赞 2019-10-12 18:40:58
    1.软件测试级别? 单元测试:单元测试是...(测试内容:模块接口测试、局部数据结构测试、路径测试、错误处理测试、边界测试) 集成测试:(集成测试也称联合测试、组装测试,将程序模块采用适当的集成策略组装起...
  • 软件测试总结

    千次阅读 多人点赞 2019-06-19 15:45:11
    1、软件测试的定义: 软件测试就是一系列活动,这些活动是为了评估一个程序或软件系统的特征或能力,并确定其是否达到了预期结果。 2、测试和开发的关系 软件测试和软件开发在整个软件开发生命周期中交互协作,...
  • app测试总结

    千次阅读 多人点赞 2018-08-24 16:47:18
    随着移动互联网的普及,app使用越来越多,对于大多数公司来说,web、app测试必不可少; app的测试与web测试本质没有什么不同,只是额外考虑的点不同; 此篇,记录日常工作中对app测试的常用思考点;   app测试...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 60,125
精华内容 24,050
关键字:

测试总结