zoukankan      html  css  js  c++  java
  • 对 单元测试&测试驱动开发&自动化测试 的理解和实践

                对 UT&TDD&TA之我见

           -刚刚开始学,文中可能会有很多错误和没说明白之处,最近很忙,很久没有写博客了,我想我以后应该上升一个高度,不应该仅仅停留在简单的代码阶段了。

     TA =test automation ..

    我是程序员sylar,我只以一个coder的身份来说明一些问题。

    现在客户需要我们公司完成一个产品,当然一个产品包括HW和SW,HW不在我的思考范围之内(其实就是设计电路,里面需要用到cpu,ram,disk等),而软件部分可以归纳为需求列表,每个需求我可以把她理解为一个软件设计里的一个功能,而我现在就需要完成这一个功能,现在我写了一些代码来实现这个功能A,那么我如何去验证功能A是否正确呢?

    首先我使用UT

           1 安装CppUTest framework ,这是一个UT测试的函数框架,我使用它做UT。

    其中写测试代码的时候,一个group代表一个总体,里面可以有很多测试用例。其中每个测试用例的具体步骤为 1)初始化测试数据 2)调用需要测试的函数(这里为功能1的接口) 3)验证测试的正确性

           2 需要说明的是:

    1) UT代码只是做测试使用,具体使用的时候只有功能函数在跑。

    2)UT是coder自己验证自己功能函数是否正确的手段。

    3)UT的关键是测试用例,好的测试用例不需要覆盖所有的代码,但是需要具有典型性而不冗余。

    4)UT时必须把被测试代码里面的一些和网络/文件系统相关的API去掉。因为我们需要测试的仅仅是功能,不应该把其他可能会执行失败的函数放到UT里。

    做完上面这些,我可以把功能A的代码交给TL了,但是在下回开发功能B的时候我发现了一些问题,比如:需要实现的算法有些复杂/以前做功能A时的UT中的测试用例是否完备?也许UT就是浪费时间,呵呵,这时,应该用TDD了,TDD是一种思想,本着从简单的例子着手的思想,比如,我要实现功能B,那么我先想到一个功能B能够完成的最简单例子(假设为test1),然后我实现它,因为我写的函数仅仅能够正确的执行test1就可以了,所有我的代码一定非常非常简单,这样打个比方,我需要实现函数a=b+c,这时候我第一步想到了1+1=2 那么我的函数就这样写把: fun(int a, int b){return 2;}  如此简单。接下来我会慢慢设计复杂的test,逐渐重塑我的函数,最终完成复杂的功能,最后会发现这样写出来的代码会和最好的代码相差不远。。。 因为这符合人的思维。

    上面的UT和TDD都是coder本人在开发中使用的方法,但是如果测试人员在拿到coder的很多功能函数后应该如何去测试呢(当然coder也应该使用),这里使用robot framework, 他是基于python的,相当于python的一个库,所以

    1: 首先安装python-2.6.5.msi, 接着安装robotframework-2.1.3.tar.gz,然后安装wxPython2.8-win32-unicode-2.8.10.1-py26.exe,最后安装robotide-0.22.1.tar.gz,这应该是一个图形界面? 每一步都需要安装 python install.py –install  最后使用的 测试自动化工具是 ride。 具体的安装过程记不清楚了,但是需要理清楚里面的关系

    首先python是一切的基础,因为他们都是用python编写,这里假设我们需要测试一个网页的登录验证成功与否的情况。 例如网页的输入是ID和密码,然后会验证ID密码是否正确,如果正确转到 welcome.html 如果错误转到 error.html 。下面开始为这个做自动化测试(只说原理):

    我们的最终目的就是运行自动化测试工具之后程序会自动的执行我们的数据并验证登录成功与否。

    首先需要了解,测试的过程应该包括打开登录网页,输入用户名和密码,点击提交按钮,验证是否登录成功。然后返回登录页面开始下次测试。

    下面开始:首先打开ride,这是一个编辑测试自动化的工具,我们将测试的数据存放到里面,然后在他里面插入一个循环验证读取数据并验证密码的过程,大概的流程如下

    Open browserhttp://127.0.0.1/7272

    :for ${id} in@{userid}

           Input id        ${id}

           Input password  mode

           Submit   

           Goback

    注意:

    1 ${id} 和 @{userid}是ride的变量和数组类型

    2 Open browser和Input id等等都属于一个python库,这个库需要自己用python编写,其中包括了打开一个网页,提交表单,返回等等操作。Ride在自动化测试时候使用这些函数才能够打开测试环境或者测试函数。

    3 当测试完成后,ride会把测试结果以html方式呈现出来。其中一次test为一个case多个case可以组成一个suite,多个suite又可以组成一个上级suite.

                                                                                               2010-7-22 19:41 NSN networks company 

  • 相关阅读:
    win7上装红米4手机驱动提示空间不足
    HBuilder中改造console.info
    Thinkphp 出现 “_CACHE_WRITE_ERROR” 错误的可能解决办法
    Linux上跑两个版本的php,5.4.45和5.3.24
    JavaScript中对日期格式化的新想法.
    怪不得知乎急着招前端开发.
    菜鸟利用python处理大文本数据的血泪路
    Python:数字
    Python:列表,元组
    Python:映像、集合
  • 原文地址:https://www.cnblogs.com/SuperXJ/p/1784053.html
Copyright © 2011-2022 走看看