发布新日志

  • Monkey工具学习总结-使用篇

    2017-07-24 16:55:04

    1、Monkey定义:
      Monkey是google提供的一个命令行工具,可运行在模拟器或实际设备中,它向系统发送伪随机的用户事件,模拟用户的按键输入、触屏输入、手势输入等。从而对正在运行的应用程序进行压力测试,目的是看设备多长时间会出现异常,并观察系统的稳定性和容错性能。
    2、Monkey环境搭建
      Monkey是由adb命令来启动的,古只需要配置好adb环境即可。
      (1)、安装Andriod SDK和JDK
      (2)、将SDK下面的tools和platform-tools配置到环境变量中path中;
       (3)、cmd命令行输入adb,如果可以显示help信息,则配置成功。
    3、Monkey命令参数
      monkey [option] <count>---option可选,count必选
      
      option参数分类:
      (1)、基本配置参数,包括 --help,-v-v-v(二级)
      (2)、事件类型和频率参数
             -s<seed> 例如:adb shell monkey -s1111-v10
             --throttle <毫秒数> 事件之间插入固定延迟
             --pct-touch<百分比> 调整触摸事件的百分比
             --pct-motion<百分比> 调整动作事件的百分比
             --pct-pinchzoom<百分比>调整二指缩放事件的百分比
             --pct-trackball<百分比>调整轨迹事件的百分比
             --pct-rotation<百分比>调整屏幕旋转事件的百分比
             --pct-nav<百分比>调整基本导航事件的百分比
             --pct-majornav<百分比>调整主要导航事件<百分比>
             --pct-syskeys<百分比>调整系统按键事件的百分比
             --pct-appswitch<百分比>调整启动Activity的百分比
             --pct-flip<百分比>调整键盘事件的百分比
             --pct-anyevent<百分比>调整其他类型事件的百分比
      (3)、约束限制类参数
            -p<包名>
            -c<类别名>
      (4)、调试类参数
            --dbg-no-events
            --hprof  生成内存快照
            --ignore-crashes 崩溃发送事件
            --ignore-timeouts 忽略超时
            --ignore-security-exceptions 忽略安全异常
            --kill-process-after-error
            --monitor-native-crashes
            --wait-dbg
      (5)、官方隐藏类参数
            --pkg-blacklist-file<黑名单文件>
            --pkg-whitelist-file<白名单文件>
            -f<脚本文件>
    4、Monkey事件
      1、触摸事件
         :Sending Touch (Action_DOWN)
         :Sending Touch (Action_UP)
      2、手势事件
         :sending Touch (Action_DOWN)
         :Sending Touch (Action_MOVE)
         :Sending Touch (Action_UP)
      3、二指缩放事件
      4、轨迹事件
      5、屏幕旋转事件
      6、基本导航事件
      7、主要导航事件
      8、系统按键事件
      9、启动Activity事件
      10、键盘事件
      11、其他类型事件
    4、Monkey启动
       adb shell monkey [opition] <count>
    5、Monkey停止
       adb shell ps|grep monkey
       adb shell kill pid
    6、Monkey测试方法
       (1)、常规的稳定性测试
        (2)、自定义的脚本稳定性测试
         (3)、结合辅助命令、获取更多的信息
    7、Monkey日志分析
      日志分析非常重要,可以定位问题和解决问题。
      首先需要知道如何保存日志:
      (1)、Monkey日志保存的3个方法:
           adb shell monkey [option] <count> >e:\monkeyLog.txt
           将日志保存到monkeyLog.txt文件中
      (2)、adb shell monkey [option] <count> /mnt/sdcard/monkeyLog.txt
           将日志保存到手机sdcard中
      (3)、Monkey [option] <count> 1>/sdcard/monkeyLog.txt 2>/sdcrad/errorLog.txt
            分别保存日志和错误日志,错误日志记录崩溃或应用程序无响应错误日志。
        其次,如何解析日志?,需要先明确日志的构成:测试命令信息、伪随机事件流信息、异常信息、Monkey执行结果信息。
       (1)、测试命令信息
            例如 :Monkey: seed=1501203071005 count=10,
                 // Event percentages:
                 //   11: 13.0%
        (2)、伪随机事件,主要包括上面提到的11大事件
            例如::Switch:
                  :Sending Touch (ACTION_DOWN): 0:(954.0,1300.0)

                  :Sending Touch (ACTION_UP): 0:(962.5436,1295.4299)

                  :Sending Trackball (ACTION_MOVE): 0:(-2.0,2.0)
         (3)、异常信息
                Crash:....
         (4)、执行结果信息,如果有失败则显示失败原因。
          Events injected: 10

          :Sending rotation degree=0, persist=false

           :Dropped: keys=0 pointers=0 trackballs=0 flips=0 rotations=0

            ## Network stats: elapsed time=8211ms (0ms mobile, 0ms wifi, 8211ms not connected)

           // Monkey finished
        再者,可以把自己关心的日志信息,用bat脚本提取出来并收集到一个日志中。
       






     

     
  • Appium python自动化测试环境搭建记录

    2017-07-20 11:07:06

    Python windows下安装步骤:

    首先:

    安装JDK和JRE并加入环境变量:
    JDK环境变量配置:
    1.系统变量→新建 JAVA_HOME 变量 C:\Java\jdk1.7.0_67 (假设JDK安装至此位置)
    2.path后增加:;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
    3.系统变量→新建 CLASSPATH 变量 .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
    4.检验是否配置成功 运行cmd 输入 java -version

    第一步:
    去官网:https://www.python.org/,下载并安装 python 的开发环境包,选择需要安装路径进行安装,笔者下载的是目前最新的
    python3.5.2版本,安装目录为:C:\Python35,注意,安装过程中请勾选“加入环境变量”

    第二步:
    添加 python 的环境变量,桌面“我的电脑”
    右键菜单-->属性-->高级-->环境变量-->系统变量中的 Path 为:
    变量名:PATH
    变量值:;C:\Python35;C:\Python35\Scripts;

    第三步:
    安装easysetup & pip,现在3.5.X版本不需要单独安装 easysetup & pip了,PIP是类似于linux的rpm的安装命令,会自
    动去官网搜索可用的安装包,如果国内网络太慢,则请在安装时指定国内代理域名,安装时增加代理域名参数即可:
    pip install -i --trusted-host http://pypi.douban.com/simple/ XXXX(要安装的包名称)

    第四步:
    安装 selenium,如果是电脑处于联网状态的话,可以直接在 DOS环境下输入
    命令安装:
    pip install selenium
    如果没联网,可以通过下载安装:
    selenium 下载地址: https://pypi.python.org/pypi/selenium
    下载 selenium 2.33.0 (目前的最新版本) ,并解压把整个目录放到 C:\Python35\Lib\site-packages
    目录下。

    第五步:
    安装Pycurl :pip install pycurl

    python setup.py install --record pathXX.txt 记录安装后文件的路径 
    cat pathXX.txt | xargs rm -rf 删除这些文件

    python setup.py install --record pathChardet.txt
    python setup.py install --record pathRequests.txt
    python setup.py install --record pathSimplejson.txt
    python setup.py install --record pathXlrd.txt
    python setup.py install --record pathXlutils.txt
    python setup.py install --record pathXlwt.txt

    第六步:
    安装如下包:
    xlrd(读取Excel) : pip install xlrd (以下包安装命令以此类推)
    xlwt
    ParamUnittest
    configparser
    Appium-Python-Client
    chardet
    requests
    uiautomator
    urllib3
    xlutils

    支持Oracle数据库连接安装包请移步至同级文档:“APP自动化测试相关安装包”下载安装。

  • Robot framework自动化测试环境以及web\app\客户端\数据库\接口自动化环境搭建

    2017-07-20 09:44:15

    1安装python相关

    1.1安装python2.X版本不要安装3.X版本)

    python-2.7.9.msi(一切的基础,切记安装的路径不要有中文不要有空格,http://www.python.org/download/releases/2.7.9/),默认的安装python时,会自动安装setuptoolspip,如果没有安装则参考步骤1.31.4进行安装。

     

    验证方法:

    1、按照1.2配置完环境变量之后在cmd下面输入pip –version,如果显示

    pip 8.1.2 from c:\python27\lib\site-packages (python 2.7),则说明pip安装成功。

    2、或者在C:\Python27\Lib\site-packages下面查看是否有pip setuptools文件夹,如果有则说明已经安装。

     

    1.2环境变量配置

    1.首先需要在系统中注册python环境变量:假设python的安装路径为c:\python27,则修改我的电脑->属性->高级->环境变量->系统变量中的PATH: c:\python27(在原有PATH里添加python.exe所在目录)
     
    2.此时,还是只能通过"python *.py"运行python脚本,若希望直接运行*.py,只需再修改另一个环境变量PATHEXT: .PY;.PYM
     
    3. PATH里添加c:\python27\Scripts
    如下图所示:
     

    1.3安装setuptools

    setuptools (用于后续的一些测试库的安装支持,https://pypi.python.org/pypi/setuptools/
    下载zip或者gz的压缩包,解压
    假设setuptools解压后的目录在D:\ setuptools-14.3\setuptools-14.3setup在该目录)
     
    打开cmd命令行
    cd D:\setuptools-14.3\setuptools-14.3
    python setup.py install
    后续其他python也可使用此方法下载后安装。
     
    ps:若在安装过程中遇到:
    ctype = ctype.encode(default_encoding) # omit in 3.x!
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xb0 in position 1: ordinal not in range(128)
    解决方法:将mimetypes.py替换Lib目录下面的这个文件,然后删除对应的pyc文件
     

    1.4安装pip

    pip-install pip安装方式,适合网络通畅的童鞋,https://github.com/pypa/pip/releases

    setuptools的安装方法

     

    安装完成后,其他库可用pip安装方式安装:

    Example:打开cmd

    Pip install 库名

    2安装robot framework

    2.1安装wxpython(安装版本2.8.12.1

    wxPython2.8-win32-unicode-2.8.12.1-py27.exewxPythonRIDE需要他的支持,http://sourceforge.net/projects/wxpython/files/wxPython/2.8.12.1/ 

     

    2.2安装robot framework

    robotframework-2.8.7

    http://code.google.com/p/robotframework/downloads/list

     

    或者命令:pip install robotframework-ride,这种安装的好处是会自动找到依赖的文件进行一块安装。

     

    验证方法:1 cmd下面输入ride.py如果启用了,就说明安装成功。

     

    2.3安装ride(目前可用版本应该到1.50了)

    robotframework-ride-1.3.0.win32.exerobotFrameworkIDE,目前最新1.3.0http://code.google.com/p/robotframework-ride/downloads/list,如有中文乱码问题请参考:http://blog.csdn.net/tulituqi/article/details/7931069

    ------------------------------------------------------------ 

    3 web ui自动化相关(Selenium2Librabry

    pip install robotframework-selenium2library

     

    3.1安装decorator

    decorator-3.4.0S2L库的依赖库。https://pypi.python.org/pypi/decorator/3.4.0

     

    3.2安装docutils

    docutils-0.11S2L库的依赖库。https://pypi.python.org/pypi/docutils/0.11

     

    3.3安装selenium

    selenium-2.35.0(是selenium的原生python库,要到python官网下载https://pypi.python.org/pypi/selenium/2.35.0,而IEDriver.exe要到GOOGLE下载http://code.google.com/p/selenium/

     

    3.4安装selenium2library

    robotframework-selenium2library selenium2测试库,基于webdriver驱动,最新release1.5.0,下载:https://github.com/rtomac/robotframework-selenium2library/releases,如有问题请参考:http://blog.csdn.net/tulituqi/article/details/7604967 

     

    -----------------------------------------------------------------------------------------------------------------

    查看(1061) 评论(0) 收藏 分享 管理

  • Robot framework自动化框架内置库(BuildIn)关键字大全

    2017-07-20 09:38:06

    BuiltIn

    版本:2.6.3

    范围:global

    命名参数:支持

    介绍

    BuiltInRobot Framework标准库,提供了常用关键字。它自动导入,从而始终可用。 提供的关键字有用于验证的(e.g. Should Be Equal, Should Contain),转换的(e.g. Convert To Integer),其他(e.g. Log, Sleep, Run Keyword If, Set Global Variable)

    所有关键字如下:

    Call Method  ·  Catenate  ·  Comment  ·  Convert To Binary  ·  Convert To Boolean  ·  Convert To Hex  ·  Convert To Integer  ·  Convert To Number  ·  Convert To Octal  ·  Convert To String  ·  Create List  ·  Evaluate  ·  Exit For Loop  ·  Fail  ·  Fatal Error  ·  Get Count  ·  Get Length  ·  Get Library Instance  ·  Get Time  ·  Get Variable Value  ·  Get Variables  ·  Import Library  ·  Import Resource  ·  Import Variables  ·  Keyword Should Exist  ·  Length Should Be  ·  Log  ·  Log Many  ·  Log Variables  ·  No Operation  ·  Regexp Escape  ·  Remove Tags  ·  Repeat Keyword  ·  Replace Variables  ·  Run Keyword  ·  Run Keyword And Continue On Failure  ·  Run Keyword And Expect Error  ·  Run Keyword And Ignore Error  ·  Run Keyword If  ·  Run Keyword If All Critical Tests Passed  ·  Run Keyword If All Tests Passed  ·  Run Keyword If Any Critical Tests Failed  ·  Run Keyword If Any Tests Failed  ·  Run Keyword If Test Failed  ·  Run Keyword If Test Passed  ·  Run Keyword If Timeout Occurred  ·  Run Keyword Unless  ·  Run Keywords  ·  Set Global Variable  ·  Set Library Search Order  ·  Set Log Level  ·  Set Suite Variable  ·  Set Tags  ·  Set Test Message  ·  Set Test Variable  ·  Set Variable  ·  Set Variable If  ·  Should Be Empty  ·  Should Be Equal  ·  Should Be Equal As Integers  ·  Should Be Equal As Numbers  ·  Should Be Equal As Strings  ·  Should Be True  ·  Should Contain  ·  Should Contain X Times  ·  Should End With  ·  Should Match  ·  Should Match Regexp  ·  Should Not Be Empty  ·  Should Not Be Equal  ·  Should Not Be Equal As Integers  ·  Should Not Be Equal As Numbers  ·  Should Not Be Equal As Strings  ·  Should Not Be True  ·  Should Not Contain  ·  Should Not End With  ·  Should Not Match  ·  Should Not Match Regexp  ·  Should Not Start With  ·  Should Start With  ·  Sleep  ·  Variable Should Exist  ·  Variable Should Not Exist  ·  Wait Until Keyword Succeeds

    关键字介绍

    关键字

    参数

    文档

    Call Method

    object, method_name, *args

    使用参数args调用对象object的方法method_name

    方法可能返回值可以赋值给一个变​​量。

    当找不到方法或者方法产生异常时,Keyword会失败。

     

    例子:

    Call Method

    ${hashtable}

    put

    myname

    myvalue

    ${isempty} =

    Call Method

    ${hashtable}

    isEmpty

    Should Not Be True

    ${isempty}

    ${value} =

    Call Method

    ${hashtable}

    get

    myname

    Should Be Equal

    ${value}

    myvalue

    Catenate

    Catenate

    连接给定参数,返回字符串。

    默认用空格连接参数项目,如果第一个参数为'SEPARATOR=<sep>',则使用”sep”来连接.

     

    例子:

    ${str1} =

    Catenate

    Hello

    world

    ${str2} =

    Catenate

    SEPARATOR=---

    Hello

    world

    ${str3} =

    Catenate

    SEPARATOR=

    Hello

    world

    实际结果:

    =>

    - ${str1} = 'Hello world'

    - ${str2} = 'Hello---world'

    - ${str3} = 'Helloworld'

    Comment

    *messages

    在日志文件中以关键字参数形式显示指定信息。

    Comment对参数不进行任何处理,仅仅是显示在日志中,用于显示简单信息。

    如果要显示变量值,可以使用Log Log Many关键字。

    Convert To Binary

    item, base=None, prefix=None, length=None

    转换参数为二进制字符串。

    如果添加了base参数,则先内部使用Convert To Integer转换为整数,然后再转换为二进制数字,以字符串的形式显示,比如1011“

    返回值可以包含可选的前缀和最小长度(不包含前缀和负号等)。如果返回值比要求的长度短,则使用0填充。

     

    例子:

    ${result} =

    Convert To Binary

    10

    # Result is 1010

    ${result} =

    Convert To Binary

    F

    base=16

    prefix=0b

    # Result is 0b1111

    ${result} =

    Convert To Binary

    -2

    prefix=B

    length=4

    # Result is -B0010

    Convert To Boolean

    item

    转换参数为布尔值truefalse

    如果参数是字符串'True'(不区分大小写)就返回真,为'False'就返回假;其他情况调用Python'bool'的方法来判断。请参阅http://docs.python.org/lib/truth.html

    Convert To Hex

    item, base=None, prefix=None, length=None, lowercase=False

    转换参数为十六进制字符串。

    如果添加了base参数,则先内部使用Convert To Integer转换为整数,然后再转换为十六进制数字,以字符串的形式显示,比如'FF0A'

    返回值可以包含可选的前缀和最小长度(不包含前缀和负号等)。如果返回值比要求的长度短,则使用0填充。

    默认返回大写字符串,lowercase参数会转换值为小写(不包含前缀)。

     

    例子:

    ${result} =

    Convert To Hex

    255

    # Result is FF

    ${result} =

    Convert To Hex

    -10

    prefix=0x

    length=2

    # Result is -0x0A

    ${result} =

    Convert To Hex

    255

    prefix=X

    lowercase=yes

    # Result is Xff

    Convert To Integer

    item, base=None

    转换参数为整数。

    如果参数是字符串,则默认转为十进制整数。使用其他进制可以用base指定或者添加前缀,比如0b表示2进制,0o

  • Robot framework app自动化测试常见问题总结

    2017-07-18 14:22:45

    1、抓取ACTIVITY的简便方法

    首先连接手机  打开待测的APP  然后在PC上打开CMD  输入adb shell dumpsys activity |find "mFocusedActivity"
       可以直接定位到activity

    2、如何保证APP和WEB都可以使用(app的谷歌浏览器需要INSPECT,WEB需要运行脚本)
    使用55版本的Chrome,

    关于谷歌  inspect的空白页问题 已解决
    在HOST文件中加入映射
    61.91.161.217    chrome-devtools-frontend.appspot.com
    61.91.161.217    chrometophone.appspot.com
    谷歌浏览器 55版本   安卓手机 6.0.1已可以使用
    3、个别手机每次跑自动化时需要安装unlock 和 appium setting 如何禁用?

    禁掉Appium中安装Unlock, Setting, Android Input Manager
    方法很简单,按照如下方法修改2个文件:
    第一个文件:android-helpers.js
    位置: /Applications/Appium.app/Contents/Resources/node_modules/appium/node_modules/appium-android-driver/lib
    改动点:

    4、如果没有Andriod手机,如何开展自动化测试?

         解决:安装“天天模拟器”,安装本地apk应用即可测试,方便快捷,如果遇到需要测试toast提示信息的,模拟器支持有点问题,建议让开发统一改成一种提示信息类型;

    5、如何保证模拟器测试通过就代表在真机上测试通过?

     解决:1、跟开发确认是否认同模拟器和真机一致,识别出模拟器和真机不同的功能点,专门用真机执行;2、在模拟器调通代码后,在真机上跑一遍,看是否有问题,如果没有问题则说明模拟器可以代表真机,后续则可以在模拟器上进行版本回归测试;

    6、用模拟器的好处是什么?

     解决:可以选择不同的Andriod版本,模拟不同的机型进行测试,不需要真机,最重要的就是不需要花钱;

    7、编写脚本时,如何保证脚本的稳定性和健壮性,减少后续的维护成本?

    解决:locator用相对路径而坚决不用绝对路径,谨记!

    8、Press keycode方法,对应的code值有那些?

        参考:https://testerhome.com/topics/799

    9、(Andriod)在编写测试用例时,需要经常进行调试脚本运行情况,但每次执行都需要重新安装登录,非常繁琐和耗时

        解决方法:在执行一次安装登录操作后,停止Appium程序,点击Android Settings ,选中“No Reset”,重新启动Appium。再次执行用例时就不会重新安装登录了。

    10、(Andriod)执行脚本,跑完几次之后,总是遇到“ WebDriverException: Message: A new session could not be created. ”,怎么解决?

        答:Appium is probably shut down or something like there is already a session。so you have to start it again start it from the terminal or command prompt using the command appium.

              you can use command appium-doctor  for detail reason.

    11、输入信息时,总会弹出手机自带键盘

    解决方法:将手机默认键盘选择为appium android input manager for unicode

    12、划屏无反应

    解决方法:driver.swipe(windht*6/7,heigh/2,widht/7,height/2,2);

    第一步,了解手机分辨率,例如:1080*1980

    第二步,将1080设置成X轴,1980设置为Y轴,计算出预计想滑动尺寸

    13、文本输入框不允许输入中文,如何解决?

    答:需要修改一下AppiumLibrary 的这个文件:

    F:\Python27\Lib\site-packages\AppiumLibrary\keywords_applicationmanagement.py

    这里写图片描述

    加入两行代码就可以了。

    desired_caps["unicodeKeyboard"] = "True"

      desired_caps["resetKeyboard"] = "True"

    这个时候跑case 的时候,appium 会把测试手机的输入法设置成Appium 的输入法。这个输入法不能弹出键盘,如果需要正常输入,就需要切换回系统的输入法。或者你自己安装的输入法。 


    14、输入密码之后,密码键盘没有隐藏,遮挡下面的按键,导致无法点击下面的按钮,如何解决?

          答:输入密码之后,在点击按钮之前,增加go back关键字----我封装的“页面回退”关键字。

    15、appium自动化测试中如何获取toast消息?

         答: 1、需要安装Appium 1.6.3版本;(首先安装node.js V6.11.0版本,之后通过命令行:npm install -g appium@1.6.3进行安装)

                 2、脚本设计中使用desired_caps['automationName']='uiautomator2';

                 3、封装关键字Find_Toast,里面的代码内容如下:

                       message='密码输入不一致,请重新输入'

                      message1='//*[@text=\'{}\']'.format(message)

                      element=WebDriverWait(driver,10,poll_frequency=0.5).until(expected_conditions.presence_of_element_located((By.XPATH,message1)))

    16、在WebView模式下,capture screenshot关键字不可用,如何解决?

         答: 如果要截图,先切回到Native模式,在进行截图。

    17、在WebView模式下,swipe关键字不可用,如何解决?

       答: 如果要滑动,先切回到Native模式,滑动完之后在切换到webview模式。

  • Robot framework web自动化测试环境搭建常见问题和解决方法

    2017-07-18 14:16:47

    Q1:RF安装完成之后,导入Selenium2Library后使用open browser关键字无法启动浏览器,或者浏览器启动之后无法输入URL地址。

     答:这类问题通常是由于driver跟浏览器版本不兼容引起的,需要升级driver版本同时需要降低浏览器版本。目前IEDriverServer最新版本是3.0,chromedriver版本是2.19;
    火狐浏览器43.0.1版本是没有问题的,chrome浏览器47.0版本是没有问题的;

    Q2:RF使用火狐浏览器启动时报'geckodriver' executable needs to be in PATH错误,如何解决?
    答:这个是因为selenium版本为3.0的原因,需要将Selenium的版本降低为3.0以下版本。解决方法:首先用命令pip show selenium看下selenium版本,如果是3.0以上版本则删除C:\Python27\Lib\site-packages目录下面的selenium和selenium-3....文件夹,然后在cmd下面执行pip install selenium==2.53.6,安装完重启下RF即可解决。

    Q3:安装AutoIT之后导入AutoItLibrary库为红色,无法导入成功?
    答:首先,需要看下安装的版本,64bit操作系统,需要用AutoItLibrary-1.1_x64这个文件;同时需要安装AutoIt-V3应用;
    其次,安装AutoItLibrary时,需要以管理员身份安装,以管理员身份运行cmd,cd到AutoItLibrary-1.1_x64目录下面,运行python setup.py install命令进行安装;通常到这步重启RF之后,AutoItLibrary即可导入成功。如果还没有成功,继续下面的步骤。
    再次,利用cmd进入AutoItX3.dll文件所在路径,运行系统注销和系统注册命令:
    c:\Python27\Lib\site-packages\AutoItLibrary\lib>regsvr32 /u AutoItX3.dll
    c:\Python27\Lib\site-packages\AutoItLibrary\lib>regsvr32 /s AutoItX3.dll

    Q4:AutoItLibrary库都有哪些关键字?如何使用?
    答:可以查看这个网页:http://www.cnblogs.com/tinghai8/p/5839050.html

    Q5:安装DatabaseLibrary之后,库导入后为红色,无法导入成功?报"ImportError:DLL load failed....."
    答:检查按装步骤
    1、 安装cx_Oracle(64位);
    2、 将oracle instant client-11-64位的文件路径放到环境变量中,并将oracle instant client文件下面的oci.dll、oraocci11.dll、oraociei11.dll复制到site-package下面;
    3、 Pip install robotframework-databaselibrary;

    Q6:RF使用IE执行应用时报“IEdriverserver not in PATH”错误
    答:python27下面没有IEDriverServer.exe文件

    Q7:RF安装之后pip版本较低,用pip安装其他库时报错。
    答:先用 python -m pip install --upgrade pip命名进行在线升级,之后在用pip安装其他库。

    Q8:setup和teardown中使用带参数的关键字如何处理,例如open browser关键字。
    答:关键字和参数中间用|分割即可,例如open browser | http://www.baidu.com |gc放到setup中。

  • Robot framework web自动化测试遇到的常见问题和解决方法汇总

    2017-07-18 14:09:21

    Q1:执行脚本时报“Element can not be clickable on point(25,100)”?
    答:这个原因是元素被遮挡,无法看到,需要滚动滑动条使元素可见,即可操作。对于页面主体部分滑动可以使用javascript命令:javascript.:window.scrollBy(250,1300);对于左导航栏部分滑动可以使用javascript命令:jquery=$(".滑动条class").offset( {top:-400,left:0})

    Q2:excel数据文件编辑后保存报共享冲突是什么原因?
    答:是由于RF真正允许脚本占用了excel进程导致,手工杀死pythonw.exe进程即可解决;

    Q3:执行脚本时报“local variable 'cellValue' referenced before assignment”,怎么解决?
    答:这个是因为excelLibrary关键字缺少了参数引起的,目前比较多的是“获取表单单个值”关键字缺少了&{ii}参数。还有就是用例中参数传的单元格值不正确,例如本来B2有值,传的是B3单元格(空);

    Q4:脚本执行未通过,经排查locator(id,name,xpath)都没有问题,但执行时就是无法操作上对象?
    答:原因一:页面中是否存在iframe;如果有iframe需要先用Select Frame关键字,如果切换了页面,页面iframe不同时,需要unselect frame然后在选择新的iframe. 注意:unselect frame是跳出所有的iframe.
    原因二:用locatord在页面上定位到了多个相同的对象,导致无法对期望的对象进行操作;例如id=bankName存在多个对象,需要明确操作的是那个对象,则用(//*[@id="bankName"])[x],x表示第下x+1个元素。
    原因三:网络或者浏览器的原因,页面加载速度慢,页面还没有加载完,就执行操作导致无法操作成功,此时需要增加一个wait until page contain (element)等相关关键字或者wait until element is visible,保证元素加载完在操作。
    备注:不要用sleep关键字,因为sleep关键字不能智能判断页面时间,脚本失败率非常高。

    Q4:脚本执行后报“element is not clickable”?
    答:这说明元素是不可以点击的元素,例如div元素,则需要用其他操作。

    Q5:脚本执行后报“element is not visible”?
    答:这个是因为元素被隐藏了、不可见。元素display属性为none。可以通过javascript先将元素设置为可见:document.getElementById("id").style.display="block"

    Q6:执行查询语句在数据库中查询的结果含有中文时,显示的为乱码。
    答:这个是因为数据库默认编码方式不是utf-8,需要进行代码转换,可以导入TestLibrary库,使用decode关键字进行解决。

    Q7:测试用例是否可以设置多个Tag值?
    答:可以

    Q8:运行时, Run页面中only run tests with these tage或者skip tests with these tags下面是否可以输入多个tag?
    答:可以,中间用“;”分割

    Q9:执行脚本时,用get Text关键字获取元素值不是期望的值。例如 get text |xpath=/html/body/div,明明是“ABC”,获取的却是“BCD”
    答:需要查看页面是否是新打开的窗口,还是在原来的窗口,如果是新打开的窗口,需要用 select window | URL选择到新的窗口中。

    Q10:对于密码输入框通过安全控件实现的,脚本无法输入密码,即使可以输入密码,系统判断为没有输入,如何解决?

    答:这种问题技术解决有难度,最简单的方法是让开发把密码安全控件去掉,改成普通的密码输入框;

    Q11:对于登录时或者脚本执行过程中,需要输入动态验证码的怎么操作?

    答:动态验证码的需要使用图像技术解决,技术上是可以解决的,但是成本太高,最简单的方法是让开发将验证码改成通用验证码,例如000000.

    Q12:有时通过inputtext或者select的方式无法给控件负值成功,如何通过javascript给控件负值?

    答:执行这条javascript:window.document.getEltementById('Startime').value='2016-11-12'

    Q13:问题:如何处理数据库中长度不够?                         

    答: 对于数据库的取值,一些FLOAT类型的数据,小数点后2位如果都为0,取出来可能只有小数点后1位,可以对取出的数据进行处理,先验证是否缺失,如果缺失补一位再return,如果不缺失则正常return

    Q14:左导航栏下面的菜单遮挡,看不到需要滑动一下,怎么处理?             

    答:可以使用FOCUS定位元素再选取,对于一些个别的情况可能无法适用。

    Q15:怎么验证查询结果按照时间倒序排列?                                      

    答:可以使用sql语句倒序排列,跟页面的结果进行比对

    Q16:脚本执行时报如下错误UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-78: ordinal not in range(128),或者中文字符显示为???,如何解决?

    答:首先需要判断这个错误是python的引起的还是数据库操作过程中报出的,如果是python引起的,解决办法如下:

        python27默认编码格式为ascii

     1、查看python默认编码格式
     import sys
     print sys.getdefaultencoding()
     2、修改默认编码格式为utf-8且只在本次生效

            import sys

     reload(sys)
     sys.setdefaultencoding('utf-8')

       3、永久生效

             在python27下面的site-package文件下面创建sitecustomize.py文件,将 步骤2中的内容拷贝进去,保存即可。

    如果是数据库操作过程报的错,则解决办法如下: 

        1、将instantclient_11_2-64文件放到C盘下面;

        2、然后配置如下环境变量:

    1.   ORACLE_HOME = C:\instantclient_11_2
    2. TNS_ADMIN = C:\instantclient_11_2
    3. NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK

         4.Path变量,在后面添加 C:\instantclient_11_2

     

    Q17:元素含有readonly属性,导致元素不可操作,如果要操作该如何处理?

         答:用js,$("aa").removeAttr("readOnly");document.getElementById(id).removeAttribute("readonly");

    Q18:类似OBM,checkbox开关和radio无法勾选,执行脚本时报对象is not visible,如何解决?

            通过JS,脚本为:Execute javascript $("input[id='nosingleLimit_kuaijie']").click()

    Q19:左道航栏如果被遮挡,无法点击菜单,如何处理?

           通过JS:$("span:contains(通道管理)").mouseover();$("a:contains(机构管理)").click();

    Q20:上传文件部分脚本执行时,过程中不报错,但用之前的方法上传上的文件不能回显(个别电脑,销售系统进件流程)

    解决办法:将上传文件 部分的脚本用另一种方式实现

    Wait For Active Window 打开
    Control Set Text 打开 \ Edit1 ${file}
    sleep 2
    Control Click \ \ Button1
    sleep 2s

    Q21:Robot framework如何对AJAX应用进行自动化实现?

           1、首先进入到iframe中; 2、获取输入窗体<body>元素;3、按Tab; 4、输入内容,具体实现步骤:

             Select Frame. id=ueditor_0 
             Press Key |xpath=/html/body | \\9 
              Input Text | xpath=/html/body |${客服真推消息内容1}

  • pyc文件

    2016-08-15 20:28:23

    pyc是一种二进制文件,是由py文件经过编译后,生成的文件,是一种byte code,py文件变成pyc文件后,加载的速度有所提高,而且pyc是一种跨平台的字节码,是由python的虚拟机来执行的,这个是类似于JAVA或者.NET的虚拟机的概念。pyc的内容,是跟python的版本相关的,不同版本编译后的pyc文件是不同的,2.5编译的pyc文件,2.4版本的python是无法执行的。

    1.编译单个py文件

    (1)

    直接在命令行下执行 python -m py_compile file.py

    (2)

       root@ubuntu:/var/# python

      >>> import py_compile
      >>> py_compile.compile(r'/home/test/test.py')
      >>> py_compile.compile('webmail_sina.py') 
    2.批量生成pyc文件

    root@ubuntu:/var/# python
    >>> import compileall
    >>> compileall.compile_dir(r'/home/codemo/Desktop/python')



    在你 import 别的 py 文件时,那个 py 文件会被存一份 pyc 加速下次装载。而主文件因为只需要装载一次就没有存 pyc,你可以写两个 a.py 和 b.py,一个 import 另一个试试看。


    python -m py_compile /path/to/需要生成.pyc的脚本.py
  • 【转】web端和移动端优秀的自动化测试工具有哪些

    2016-08-13 14:55:26

    作者:陈晔
    来源:知乎


    移动无线测试技能树
    • 常用IDE
      • Android
        • ADT
        • Android Studio
      • iOS
        • Xcode
      • Common
        • Atom
        • Sublime Text
        • Vim
    • 基础知识

      • Android
        • 掌握Android开发基础技能
      • iOS
        • 掌握iOS开发基础技能
      • web
        • 掌握web开发基础技能
      • api
        • 掌握api相关基础知识
      • 测试
        • 掌握基本的测试用例设计方法和思想
    • 常见应用模式

      • Native
      • Hybrid
      • H5 App
      • ReactNative
    • 常用工具

      • Android
        • Android sdk manager
        • adb
        • ddms
        • ant
        • aapt
        • emulator
        • Genymotion
        • hierarchyviewer
        • monitor
        • monkey
        • monkeyrunner
        • uiautomatorviewer
      • iOS
        • lldb
        • iExplorer
        • libimobiledevice 套件
        • codesign
        • instruments
        • xcodebuild
        • atos
        • xcrun
    • 常用UI Automation框架

      • Android
        • Instrumentation
        • Athrun
        • Robotium
        • Monkey
        • Monkeyrunner
        • uiautomator
        • Selendroid
        • Calabash-Android
        • monkeytalk
        • Appium
        • Espresso
        • cafe
      • iOS
        • UIAutomation
        • XCUITesting
        • KIF
        • Frank
        • appium
        • ios-driver
        • Mechanic.js
        • monkeytalk
        • Calabash-iOS
        • TuneupJs
        • ynm3k
    • 常用单元测试框架

      • Android
        • robolectric
        • Instrumentation
        • Mockito
        • RxJava
      • iOS
        • OCUnit
        • GHUnit
        • XCTest
        • OCMock
        • OCMockito
        • Expecta
        • OCHamcrest
    • 常用动态更新

      • ReactNative
      • waxpatch/wax
      • ota
    • 常用性能工具

      • 抓包
        • Charles
        • fiddler
        • burpsuite
        • tcpdump
        • anyproxy
      • 弱网模拟
        • iOS developer mode
        • ATC
        • Charles
      • memory
        • Android
          • MAT
          • ddms
          • Memory Monitor
          • Allocation Tracker
          • LeakCanary
          • dumpsys
          • procrank
          • top
        • iOS
          • Memory Leaks
      • Scan
        • Android
          • findbugs
          • lint
          • infer
          • CheckStyle
          • PMD
        • iOS
          • scan-build
          • oclint
          • infer
          • deployment -other
        • Common
          • 安捷伦
          • tcpdump
          • wireshark
          • 高速(慢速)摄像机
          • 埋点
          • 腾讯GT
          • 网易Emmagee
        • Android
          • gfxinfo
          • dumpsys
          • traceview
          • systrace
          • GameBench
          • battery-historian
        • iOS
          • Core Animation(instruments)
          • Network(instruments)
          • TimeProfiler(instruments)
          • Zombies(instruments)
    • 安全

      • Android
        • Drozer
        • apktool
        • dex2jar
        • proguard
        • 加固
        • exported/permission
        • AndBug
        • androguard
        • Xposed
      • iOS
        • IDB
        • iRET
        • DVIA
        • LibiMobileDevice
        • otool
    • abtest

      • AB Tester
      • AppAdhocOptimizer
      • Google Website Optimizer
      • Visual Website Optimizer
    • 常用灰度测试工具

      • testflight
      • 蒲公英
      • fir
      • pre
    • 常用云测平台

      • testin
      • MQC
      • MTC
    • 常用持续集成平台/相关工具

      • Jenkins
      • Travis CI
      • Android
        • mvn
        • gradle
      • iOS
        • xctool
        • Cocoapods
    • 多语言开发应用

      • SL4A
      • gomobile
    • 多设备远程管理平台

      • STF
    • 软技能

      • 知识管理/总结分享
      • 沟通技巧/团队协作
      • 需求管理/PM
      • 交互设计/可用性/可访问性知识
      • 快速的学习能力
  • TestNG doc

    2012-08-21 11:11:56

    http://testng.org/doc/eclipse.html

    TestNG doc
  • Downloading TestNG

    2012-08-21 11:10:15

    Downloading TestNG

    Current Release Version

    The latest version of TestNG can be downloaded from Maven Central.

    For the Eclipse plug-in, we suggest using the update site:

    • Select Help / Software updates / Find and Install.
    • Search for new features to install.
    • New remote site.
    • For Eclipse 3.4 and above, enter http://beust.com/eclipse.
    • For Eclipse 3.3 and below, enter http://beust.com/eclipse1.
    • Make sure the check box next to URL is checked and click Next.
    • Eclipse will then guide you through the process.

    You can also install older versions of the plug-ins here. Note that the URL's on this page are update sites as well, not direct download links.

    TestNG is also hosted on GitHub, where you can download the source and build the distribution yourself:

    $ git clone git://github.com/cbeust/testng.git
    $ cd testng
    $ cp ivy-2.1.0.jar ~/.ant/lib
    $ ant
    

    You will then find the jar file in the target directory

    Beta Version

    The beta version contains changes that have been committed to the repo since the current release.

    Take a look at CHANGES.txt to see if the change you want is included in the beta (listed under "Current").

    You can download the beta version here.

  • 自动化测试脚本编码规范

    2011-09-16 12:50:49

    为了使所有的测试工程师在进行自动化设计和测试时能够使编写的脚本风格一致、步骤一致,能够把大家的设计和代码组装在一起,因此有必要对自动化测试脚本编写进行统一的规范化,下面就先来介绍整理编写的自动化脚本编写的规范。仅供参考。

      1.自动化脚本编写的规范

      1)基本信息

      在每个脚本模块的最上面,必须写上脚本运行的软件和硬件环境(如IE版本、QTP版本、数据库版本等)、外包项目名称、脚本编写人(使用英文名或中文拼音缩写)、脚本创建时间、脚本修改时间、修改说明、输入参数、输出参数、脚本描述等。

      2)常量命名规范

      常量的命名应该全部用大写,使用"_"作为单词间的分隔符,单词尽量使用全名称,如,Public Const MSG_EMPTY_ROW As String = "有空行存在"。

      使用Public而不是早期版本的global来声明变量。

      另外,对常量的声明必须带上类型,如前面的As String。

      3)变量命名规范

      变量命名应该简单,应尽量使用缩写。如果是一般的值类型(如integer string),则直接使用变量用途命名。尽量使用全名,例如,Dim name As String;如果是一般的临时性变量定义,应该尽可能地简单,例如,Dim i As Integer;如果名称由多个单词组成,则取每个单词的首字母,如EntityManager缩写为em,ProcedureManager缩写为pm;如果名称由一个单词组成,则对单词进行分段取首字母,如Entity缩写为et。缩写应该控制在3个字母以内,且尽量清晰。

      4)参数命名规范

      参数命名的原则是全部用小写,如果参数包括两个或两个以上的单词时,首单词字母小写,其他单词首字母大写,如stepName、stepDescription。

      5)函数命名规范

      此处函数包括sub和function,函数表示的是一个动作,所以它的结构应该是动词+名词,动词必须小写,后面的名称首字母大写,如getMaterialCode。函数命名尽量不要使用缩写,而且它的名称应该使人一目了然,能够从名称就知道这个函数的功能,不要使用无意义的函数名称。当函数名称不足以表达其功能时,应使用在函数头部加上让调用者足够明白的注释。

      6)代码注释规范

      注释务必做到准确简洁,能够充分表达代码实现的功能。

      7)空行

      空行是区分代码块与块的间隔,在函数之间必须加上空行;而在函数内部,变量声明块和实现块(实现块指除变量声明外的其他代码)要使用空行来间隔,实现块的内部,通过空行来标识一个功能段。

      8)缩进

      必须严格执行缩进,变量声明块不缩进,实现块必须保证全部缩进(不可能有实现块是行首对齐的);对于基本的控制结构来说,必须要有缩进,如IF、DO、WITH、FOR、WHILE块。

      9)续行

      对于过长的语句来说,必须使用续行,续行位置要有明显意义,例如,sql ="SELECT [code],[name] FROM [Person]"_&"WHERE [code] LIKE'001%'"。

      另外,还要通过管理对象库来提高代码的可读性,通过修改命名来达到更加易读的效果。对于使用比较频繁的代码块来说,最好将其写成函数,并尽量将功能复杂的大函数拆分成小函数。

      注意:在任何地方,不要写ElseIf语句,最好转换成If…Else…Endif结构。

       2.业务组件测试

      BPT为Bussiness Process Testing的缩写,译为业务组件测试。

      1)业务组件的简介

      业务组件是组成流程测试的基本单元,组合不同的业务组件可以实现不同的业务流程测试。如将黄金交易系统的登录作为一个组件,将交割申报作为一个组件等,然后可以将这些组件按照一定的业务流程组合在一起,以满足不同业务流的测试。这里业务组件可以重复使用,从而在一定程度上提高自动化开发的效率。

      2)业务组件测试的优点

      业务组件测试有以下几个优点:

      相关业务人员可以在没有脚本的环境下组合业务组件,实现业务流程。

      对业务人员的编程能力没有要求,业务人员只需了解系统的业务流程,不用关心具体的脚本实现。这一点也实现了业务层和脚本层的分离。

      一旦某个组件开发完毕,即可在不同的流程中使用该组件,实现高可复用性,从而加快业务流程测试的速度。

      明确角色分工,业务人员负责流程的开发、组织;QTP工程师负责脚本的开发、维护,以及相应函数库的开发、维护。

      因为实现了脚本的复用,提高了自动化开发的效率,在无形中降低了测试过程中维护的时间和成本。

    图  业务组件测试的简易流程

      从图中可以看出整个过程分为两条线:第一条是由业务人员划分组件并组合不同的组件实现的不同流程测试;第二条是QTP专家负责组件的脚本的具体实现并负责调试成功,上传到QC供业务人员测试时调用。

      注意:

      此过程需要QC有Bussiness Process Testing组件许可的支持,也就是需要单独向HP购买。

      3.整个流程的开发过程

      下面我们还是以黄金外包项目为例,简单地演示一下整个流程的开发过程。

      1)划分组件

      个人网银交割申报业务划分为以下几部分:

      登录。

      递延交割申报。

      递延交割当日委托查询。

      递延交割当日成交查询。

      递延交割历史委托查询。

      历史递延交割成交查询。

      注销。

      2)组织业务测试流程

      组织业务测试流程为:登录-递延交割申报-递延交割当日委托查询-递延交割当日成交查询-递延交割历史委托查询-历史递延交割成交查询-注销。


  • 自动化测试脚本技术

    2011-09-16 12:41:18

    一、线性脚本

      线性脚本的优点:

      1. 线性脚本不需要深入的工作或计划,只需坐在计算机前利用自动化测试工具录制手工测试任务即可。

      2. 线性脚本可以快速开始自动化,测试工程师只需理解测试流程即可开展自动化测试工作,同时也是树立测试工程师开始对自动化感兴趣最快速的方法和技术。

      3. 线性脚本对实际执行操作可以进行审计跟踪。

      4. 使用线性脚本技术,用户不必是编程人员(假设不需修改脚本,用户不必关心脚本本身)。

      5. 线性脚本提供良好的演示效果。

      线性脚本的缺点:

      1. 过程繁琐:产生可行的自动化测试(包括比较)的时间比运行手工测试要长2到10倍。

      2. 一切都依赖于每次测试所捕获的内容。

      3. 测试输入和比较,以及测试的数据和业务都是‘捆绑’在脚本中的,不便于修改测试数据和测试步骤。

      4. 脚本不能共享和重用。

      5. 由于线性脚本要求测试的对象相对比较的固定,因此容易受软件变化的影响。

      6. 线性脚本修改代价大(维护成本高)。

      7. 如果回放脚本时发生了录制脚本时没有发生的事情,如来自网络的意外错误消息,脚本很容易与被测试软件发生冲突,引起整个测试失败。

      线性脚本的适用范围:

      1. 当测试事例只使用一次时,则无需对将要丢弃的脚本花费太多的功夫,线性脚本便非常方便使用。

      2. 线性脚本适合在做培训或演示时,可以回放录制好的脚本来代替击键动作。

      3. 线性脚本可以用于转换。如系统的某一部分发生变化,但从用户的角度不能影响系统的工作,可以录制有用数据,替换软件或硬件,然后回放录制过程可以使新系统恢复到初始状态。

      4. 线性脚本可以用自动编辑来修改自动测试,任何特定的修改只做一次,因此一次性的脚本足以满足需求。

      5. 线性脚本可用于设置和清除测试,通过回放输入序列操作文件或数据库进行相应的记录的设置和清除。

      二、结构化脚本

      目前所有测试脚本支持三种基本控制结构如下:

      顺序结构(即前面的线性脚本,依次执行每行的指令)。

      选择结构:使脚本具有判断功能,即加入类似“if,switch”类型的语句来使脚本的执行具有跳跃能力,按照判断条件执行相关的指令。

      叠代/循环结构:可以根据需要重复执行一个或多个指令序列如加入像“for,while”等语句。

      结构化脚本类似于结构化程序设计,脚本中含有控制脚本执行的指令,这些指令或为控制结构或为调用结构。结构化脚本可以进行嵌套调用另一个脚本,执行完后在返回到当前脚本。

    结构化脚本的优点:

      1. 结构化脚本健壮性更好,对一些容易导致测试失败的特殊情况和测试中出现的异常情况可以进行相应的处理。

      2. 结构化脚本可以像函数一样作为模块被其他脚本调用或使用。

      3. 结构化脚本可以提高脚本的重用性和灵活性,使得代码易于维护,可以更好的支持自动化测试。

      结构化脚本的缺点:

      1. 脚本变得非常复杂,在一定程度上增加了另外的维护工作量。

      2. 脚本还是在录/播的基础上实现的,因此脚本内仍然捆绑着测试的数据和逻辑,即键盘、鼠标动作表示的输入被固化在脚本中,测试修改和定制非常复杂困难。

      三、共享脚本

      共享脚本意味着脚本可以被多个测试事例使用,即脚本语言允许一个脚本被另一个脚本调用,这样可以节省生成脚本的时间。当重复任务发生变化时,只需修改一个脚本。共享脚本可以是在不同主机、不同系统之间共享脚本,也可以是在同一主机、同一系统之间共享脚本。此脚本开发的思路是产生一个执行某种任务的脚本,而不同的测试要重复这个任务,当要执行这个任务时只要在适当的地方调用这个脚本便可以了。

      共享脚本的优点:

      1. 共享脚本使得实现类似的测试花费的开销较少。

      2. 共享脚本的维护开销低于线性和结构化脚本。

      3. 共享脚本中删除明显的重复代码,这样代码更加简洁易懂。

      4. 可以在共享脚本中增加更智能的功能,如认为的等待一定时间再次运行某个功能。

      共享脚本的缺点:

      1. 需要跟踪更多的脚本、文档、名字以及存储。如果管理不好,很难找出适合的脚本。

      2. 对于每个测试用例仍需一个特定的测试脚本,因此维护成本比较高。

      3. 共享脚本通常是针对测试软件的某一部分,不能实现真正意义上的共享。

      共享脚本的编写需要更高的编程技能,提高了对测试工程师的要求数据驱动脚本是当前广泛应用的自动化测试脚本技术,它是将测试输入数据存储在数据文件里,而不是继续放在脚本本身里面。脚本里只存放控制信息,执行测试时,从文件中而不是从脚本中读取数据输入,从而使得同一个脚本可以执行不同的测试,实现了数据与脚本的分离,但测试逻辑依然与脚本捆绑在一起。

      四、数据驱动脚本

      数据驱动脚本的优点:

      1. 在数据驱动脚本的层次上,自动化测试可以真正从中获益,可以以较小的额外开销实现很多测试事例的自动化,不需要编写更多的脚本。

      2. 在数据驱动脚本中,数据文件的格式对于测试者而言非常易于处理,甚至可以在数据配置文件里添加很多方便维护的注释来增加数据的可理解性。

      3. 数据驱动脚本技术使得测试工程师可以将更多的时间和精力放在自动化测试和维护测试上。

    4. 数据驱动脚本技术对于测试事例的数据输入和维护带来了极大的方便。

      5. 在数据驱动脚本中,甚至连期望结果都可以从脚本中提取出来,使得脚本的维护工作变得更为简单。

      6. 对于一组功能强大灵活的数据驱动脚本,测试者本人甚至不需具有脚本编程技能,而只需掌握数据文件的配置方法,便可轻松的使用脚本完成自己的测试

      数据驱动脚本的缺点:

      1. 需要具有一定编程背景知识的人员加入到脚本编写里面。

      2. 因为脚本变得逻辑性更强,引入更多的控制指令,初始脚本建立时间和开销较大。

      3. 如果开发出的脚本不规范,则后期的管理和维护会带来巨大的工作量,对于测试工程本人来说需要的技能也更高。

      五、关键字驱动脚本

      关键字驱动脚本实际上是较复杂的数据驱动脚本的逻辑扩展。数据驱动脚

      本的限制是每个测试事例执行的导航和操作必须一样,测试的逻辑知识建立在数据文件和控制脚本中。关键字驱动脚本将数据文件变为测试事例的描述,用一系列关键字指定要执行的任务。关键字驱动脚本的一个特点是它看起来更像描述一个测试事例做什么,而不是如何做。前面四种脚本是说明性方法的脚本,只有关键字驱动脚本是描述性方法,因而它更容易理解。描述性方法是将被测软件的知识建立在测试自动化环境中,相关的知识包含在支持脚本中,这些支持脚本了解被测软件,但是不需要了解测试事例。

      核心思想为三个分离

      1)界面元素名与测试内部对象名的分离在被测应用程序和录制生成的测试脚本之间增加一个抽象层,它可以将界面上的所有元素映射成相对应的一个逻辑对象,测试针对这些逻辑对象进行,界面元素的改变只会影响映射表,而不会影响测试。

      2)测试描述与具体实现细节的分离

      把测试描述和测试的具体实现细节分离开来。测试描述只说明软件测试要做什么以及期待什么样的结果,而不管怎样执行测试或怎样证实结果。这样做是因为测试的实现细节通常与特定的平台以及特定的测试执行工具有着密切的联系。这种分离使得测试描述对于应用实现细节是不敏感的,而且有利于测试在工具和平台间的移植。

      3)脚本与数据的分离 最后,可以把测试执行过程中所

      需的测试数据从脚本中提取出来,在运行时测试脚本再从数据存放处读取预先定制好的数据,这样脚本和数据可以独立维护。

      以上这三个分离各司其职、互相独立,最大程度地减少相互之间的影响。从关键字驱动的思想可以看出,该种测试框架不仅实现了将数据和脚本相分离,而且实现了测试逻辑和数据的分离,大大提高了脚本的复用度和维护性,从而更大限度地实现了测试工具的自动化

      根据测试用例得出自动化测试框架的典型要素

      1)公用的环境

      不同测试用例也会用到相同的测试环境,将该测试环境独立封装,在各个测试用例中灵活调用,可以增强脚本的可维护性。

      2)公用的对象

      成功的框架开发需要确定领域专用的“热点”(Hot spot)。所以在开发过程中必然存在大量相同的对象(如窗口、按钮、页面等)。将对象抽取出来形成一个独立的可重用强的个体,当对象的属性需要变更时做到只需修改对象属性而无需修改脚本。

      3)公用的方法

      将方法封装成独立的函数,通过参数的形式调用,尽量做到和数据无关。

  • 关于SSH

    2009-11-18 16:54:33

    一、SSH介绍 
      什么是SSH? 
       传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据, 别有用心的人非常容易就可以截 获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的, 就是很容易受到“中间人”(man-in-the-middle)这种方式的攻 击。所谓“中间人”的攻击方式, 就是“中间人”冒充真正的服务器接收你的传给服务器的数据,然后再冒充你把数据传给真正的服务器。 服务器和你之间的数 据传送被“中间人”一转手做了手脚之后,就会出现很严重的问题。 
      SSH的英文全称是Secure  Shell。通过使用SSH,你可以把所有传输的数据进行加密,这样“中间人”这种攻击方式就不可能实现了, 而且也能够防止DNS和IP欺骗。还有一个 额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。 SSH有很多功能,它既可以代替telnet,又可以为ftp、pop、甚至ppp提 供一个安全的“通道”。 
      最初SSH是由芬兰的一家公司开发的。但是因为受版权和加密算法的限制,现在很多人都转而使用OpenSSH。 OpenSSH是SSH的替代软件,而且是免费的,可以预计将来会有越 来越多的人使用它而不是SSH。 
      SSH是由客户端和服务端的软件组成的,有两个不兼容的版本分别是:1.x和2.x。 用SSH 2.x的客户程序是不能连接到SSH 1.x的服务程序上去的。OpenSSH 2.x同时支持SSH 1.x和2.x。 
      SSH的安全验证是如何工作的 
      从客户端来看,SSH提供两种级别的安全验证。 
      第一种级别(基于口令的安全验证)只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密, 但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器, 也就是受到“中间人”这种方式的攻击。 
       第二种级别(基于密匙的安全验证)需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。 如果你要连接到SSH服务器 上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后, 先在你在该服务器的家目录下寻找你的公用密匙,然后把它和你发 送过来的公用密匙进行比较。如果两个密匙一致, 服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。 客户端软件收到“质 询”之后就可以用你的私人密匙解密再把它发送给服务器。 
      用这种方式,你必须知道自己密匙的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令。 
      第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)。 但是整个登录的过程可能需要10秒。

    二、SSH的构成

    SSH 主要有三部分组成:

    传输层协议 [SSH-TRANS] 提供了服务器认证,保密性及完整性。此外它有时还提供压缩功能。 SSH-TRANS 通常运行在 TCP/IP连接上,也可能用于其它可靠数据流上。 SSH-TRANS 提供了强力的加密技术、密码主机认证及完整性保护。该协议中的认证基于主机,并且该协议不执行用户认证。更高层的用户认证协议可以设计为在此协议之上。

    用户认证协议 [SSH-USERAUTH] 用于向服务器提供客户端用户鉴别功能。它运行在传输层协议 SSH-TRANS 上面。当 SSH-USERAUTH 开始后,它从低层协议那里接收会话标识符(从第一次密钥交换中的交换哈希 H )。会话标识符唯一标识此会话并且适用于标记以证明私钥的所有权。 SSH-USERAUTH 也需要知道低层协议是否提供保密性保护。

    连接协议 [SSH-CONNECT] 将多个加密隧道分成逻辑通道。它运行在用户认证协议上。它提供了交互式登录话路、远程命令执行、转发 TCP/IP 连接和转发 X11 连接。

    一旦建立一个安全传输层连接,客户机就发送一个服务请求。当用户认证完成之后,会发送第二个服务请求。这样就允许新定义的协议可以与上述协议共存。连接协议提供了用途广泛的各种通道,有标准的方法用于建立安全交互式会话外壳和转发(“隧道技术”)专有 TCP/IP 端口和 X11 连接。

    通过使用SSH,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、PoP、甚至为PPP提供一个安全的"通道"。

    SSH分为两部分:客户端部分和服务端部分。

    服务端是一个守护进程(demon),他在后台运行并响应来自客户端的连接请求。服务端一般是sshd进程,提供了对远程连接的处理,一般包括公共密钥认证、密钥交换、对称密钥加密和非安全连接。

    客户端包含ssh程序以及像scp(远程拷贝)、slogin(远程登陆)、sftp(安全文件传输)等其他的应用程序。

    他们的工作机制大致是本地的客户端发送一个连接请求到远程的服务端,服务端检查申请的包和IP地址再发送密钥给SSH的客户端,本地再将密钥发回给服务端,自此连接建立。刚才所讲的只是SSH连接的大致过程,SSH 1.x和SSH 2.x在连接协议上还有着一些差异。

    SSH被设计成为工作于自己的基础之上而不利用超级服务器(inetd),虽然可以通过inetd上的tcpd来运行SSH进程,但是这完全没有必要。启动SSH服务器后,sshd运行起来并在默认的22端口进行监听(你可以用 # ps -waux | grep sshd 来查看sshd是否已经被正确的运行了)如果不是通过inetd启动的SSH,那么SSH就将一直等待连接请求。当请求到来的时候SSH守护进程会产生一个子进程,该子进程进行这次的连接处理。

    SSH:新的MVC软件开发模式,  SSH(Struts,Spring,Hibernate)     Struts进行流程控制,Spring进行业务流转,Hibernate进行数据库操作的封装,这种新的开发模式让我们的开发更加方便、快捷、思路清晰!

  • 跑RFT脚本时候可以使用command line命令

    2009-07-30 17:46:47

    使用command line命令,可以帮助我们不用打开RFT平台的情况下跑自动化脚本。从而可以简化时间;

    首先我们要建一个.txt文件,然后把语句敲进去然后把后缀改为.bat就可以运行了;

    具体的构成语法是:

    java <standard java options> -classpath rational_ft.jar com.rational.test.ft.rational_ft <Functional Tester options> or
    java <standard java options> -jar rational_ft.jar <Functional Tester options>
     
    其中如果用-classpath 我们必须要指明com.rational.test.ft.rational_ft ,如果用-jar,则不必指明,一般情况下-classpath后面紧跟的是rational_ft.jar的位置,要用引号;
     
    后面通常带的参数是:
    -datastore 其后面为脚本存放的目录,一般到包的上一层且不添加/
    -playback 其后为脚本所在的包和类,格式为包.类,没有后缀;
     
    举例说明:
    java -classpath "C:\Program Files\IBM\SDP70\FunctionalTester\bin\rational_ft.jar" com.rational.test.ft.rational_ft -datastore "D:\workspace\Sample"  -playback Testcases.testcase
     
    另外我们需要注意的是这些语句要一气呵成不能换行;
     
     
     
     
     
     
     
  • RFT自动化功能测试工具实用教程----初级

    2008-06-02 18:07:29

     

    本教程所需的时间

    要完成本教程,您将需要大约 2 小时时间。

    学习目标

    Functional Test 教程分为 10 个练习部分,为了正确实施教程,必须按顺序完成这些练习。该教程将教您如何着手使用 Functional Test,它将预演主要的测试用例,以及如何执行基本操作。当您完成这些练习时,您将学会如何:

    • 设置 Functional Test 来着手
    • 创建 Functional Test 项目
    • 记录脚本
    • 记录时启动您的测试应用程序
    • 创建验证点
    • 回放脚本
    • 查看并理解日志
    • 使用对照器更新验证点
    • 更新对象图
    • 更改对象识别首选项
    • 使用正则表达式

    注:在开始本教程之前先打印教程并通读打印稿以方便使用,这是个好主意。您可以在开始本教程之前单击每个练习结尾的链接并打印所有的练习内容,方法是在每个主题内部右键单击并单击打印。也可以打开 PDF 文件进行打印。

    准备就绪后,则开始进入练习 1.1:设置 Functional Test

    练习 1.1:设置 Functional Test

    IBM 提供 Java 运行时环境(JRE),可以安装并启用它来测试 Java 应用程序。对于本教程,您将使用该 JRE。如果您想测试自己的 Java HTML 应用程序,就必须运行启用程序并配置您的环境和应用程序。关于这些设置任务的更多信息,请参阅欢迎页面的第一步页面上的“Functional Test 入门向导。目前您不需要采取任何措施来使用预配置的 JRE 就可以继续操作。

    设置日志记录选项

    Functional Test 提供了几个日志记录选项。我们将使用 HTML 日志。

    1.       要验证这是您设置的选项,请单击窗口 > 首选项

    2.       首选项对话框的左侧窗格中,展开 Functional Test,然后展开回放并单击日志记录

    3.       验证日志类型字段右边的使用缺省值复选框已被选中,并且 html 出现(变灰)在字段中。

    4.       单击确定

    此设置会在您回放脚本后自动打开 HTML 日志。

    创建 Functional Test 项目

    在开始记录之前,您必须先创建 Functional Test 项目。

    1.       Functional Test 菜单中单击文件 > 新建 > Functional Test 项目

    2.       项目名称下输入 FTtutorial,不要加任何空格。

    3.       项目位置下输入 C:\FTprojectFunctional Test 会创建这个目录。

    4.       如果有源控制选项可用,则不要选择将项目添加到源控制中

    5.       如果有关联项目选项可用,则不要选择 Functional Test 项目与当前 Rational 项目相关联

    6.       单击完成

    现在,在 Functional Test 透视图的左侧窗格“Functional Test 项目视图中可以看到 FTtutorial 项目。

    现在您可以开始进入练习 1.2:记录脚本

    练习 1.2:记录脚本

    在开始本练习之前,您必须先完成练习 1.1:设置 Functional Test

    开始记录

    现在您已可以开始记录。

    1.       要开始记录,请单击 Functional Test 工具栏中的记录 Functional Test 脚本按钮( )。

    2.       如有必要,选择您刚创建的 FTtutorial 项目。

    3.       脚本名称字段中输入 Classics(即您将要使用的应用程序的名称)。

    4.       如果将脚本添加到源控制中选项可用,请不要选择该选项。

    5.       单击完成

    Functional Test 窗口自动最小化,且记录监视器出现。

    每次您开始记录时,“Functional Test 记录监视器就会出现。如果您不想在屏幕上看到该监视器,则可将它最小化,也可以调整它的大小。您还可以单击仅显示工具栏按钮( ),该按钮会隐藏监视器并仅显示工具栏。单击显示监视器按钮( )可让它重新出现。在本教程中使监视器保持显示状态。

    该监视器对您记录会话期间的每个操作都显示消息,例如启动和暂停记录、启动应用程序或浏览器、应用程序中的单击操作和所有其它操作、插入验证点以及在脚本中插入其它项。

    6.       单击监视器消息首选项工具栏按钮( )。您可以使用这些选项随时控制监视器中文本的外观。

    7.       单击取消

    8.       单击插入脚本支持命令工具栏按钮( )。这将打开脚本支持功能对话框,它允许您调用其它的脚本、在您的脚本中插入日志项、插入定时器、插入休眠命令(延时)或插入注释。

    9.       单击关闭

    启动应用程序

    1.       要启动测试应用程序,请单击启动应用程序工具栏按钮( )。

    2.       如有必要,在启动应用程序对话框中使用箭头来选择 ClassicsJavaA,并单击确定 查看(2526) 评论(0) 收藏 分享 管理

362/2<12
Open Toolbar