Selenium2 Python 自己主动化測试实战学习笔记(五)

7.1 自己主动化測试用例

无论是功能測试、性能測试和自己主动化測试时都须要编写測试用例,測试用例的好坏能准确的体现了測试人员的经验、能力以及对项目的深度理解。

7.1.1 手工測试用例与自己主动化測试用例

手工測试用例是针对手工測试人员。自己主动化測试用例是针对自己主动化測试框架。前者是手工測试用例人员应用手工方式进行用例解析,后者是应用脚本技术进行用例解析。

前者具有较好的异常处理能力,并且可以基于測试用例,制造各种不同的逻辑推断,并且人工測试步步跟踪,可以仔细定位问题。后者全然依照測试用例的步骤进行測试,仅仅能在已知的步骤和场景中发现问题。并且往往由于网络问题或者功能的微小的变化导致用例运行异常,自己主动化的运行也非常能发现新的bug。

手工測试用例和自己主动化測试用对照:

手工測试用例:

l  较好的异常处理能力,能通过人为的逻辑推断校验当前步骤的功能实现正确与否。

l  人工运行用例具有一定的步骤跳跃性。

l  人工測试步步跟踪,可以仔细的定位问题。

l  主要用来发现功能缺陷

自己主动化測试用例:

l  运行对象是脚本,不论什么一个推断都须要编码定义。

l  用例步骤之间关联性强。

l  主要用来保证产品主体功能正确完整和让測试人员从繁琐反复的工作中解脱出来。

l  眼下自己主动化測试阶段定位在冒烟測试和回归測试。

自己主动化測试用例选型注意事项:

1.  不是全部的手工用例都要转为自己主动化測试用例。

2. 考虑到脚本开发的成本,不要选择流程太复杂的用例。

假设有必要。能够考虑把流程拆分多个用例来实现脚本。

3.      选择的用例最好能够构建成场景。比如一个功能模块。分n 个用例,这n 个用例使用同一个场景。这种优点在于方便构建keyword測试模型。

4.      选择的用例能够带有目的性,比如这部分用例是用例做冒烟測试,那部分是回归測试等,当然,会存在重叠的关系。假设当前用例不能满足需求,那么唯有改动用例来适应脚本和需求。

5.      选取的用例能够是你觉得是反复运行,非常繁琐的部分,比如字段验证,提示信息验证这类。这部分适用回归測试。

6.      选取的用例能够是主体流程,这部分适用冒烟測试。

7. 自己主动化測试也能够用来做配置检查,数据库检查。这些可能超越了手工用例,可是也算用例拓展的一部分。项目负责人能够有选择地添加。

8. 假设平时在手工測试时。须要构造一些复杂数据,或反复一些简单机械式动作,告诉自己主动化脚本。让他来帮你。也许你的效率因此又提高了。

7.1.2 測试类型

静态内容測试是最简单的測试,用于验证静态的、不变化的UI 元素的存在性。比如:

?每一个页面都有其预期的页面标题?这能够用来验证链接指向一个预期的页面。

?应用程序的主页包括一个应该在页面顶部的图片吗?

?站点的每个页面是否都包括一个页脚区域来显示公司的联系方式,隐私政策,以及商标信息?

?每一页的标题文本都使用的<h1>标签吗?每一个页面有正确的头部文本内吗?

您可能须要或也可能不须要对页面内容进行自己主动化測试。假设您的网页内容是不易受到影响手工对内容进行測试就足够了。假设,比如您的应用文件的位置被移动,内容測试就很有价值。

測试链接:Web 网站的一个常见错误为的失效的链接或链接指向无效页。链接測试涉及点各个链接和验证预期的页面是否存在。假设静态链接不常常更改,手动測试就足够。可是,假设你的网页设计师常常改变链接,或者文件不时被重定向,链接測试应该实现自己主动化。

功能測试一般是须要自己主动化測试的最复杂的測试类型,但也一般是最重要的。典型的測试是登录,注冊站点账户,用户帐户操作,帐户设置变化,复杂的数据检索操作等等。功能測试通常相应着您的应用程序的描写叙述应用特性或设计的使用场景。

測试动态元素:通常一个网页元素都有一个唯一的标识符,用于唯一地定位该网页中的元素。

通常情况下,唯一标识符用HTML 标记的’id’属性或’name’属性来实现。这些标识符能够是一个静态的,即不变的、字符串常量。

Ajax 的測试:Ajax 是一种支持动态改变用户界面元素的技术。页面元素能够动态更改,但不须要浏览器又一次载入页面,如动画,RSS源,其它实时数据更新等等。Ajax 有不计其数的更新网页上的元素的方法。可是了解AJAX的最简单的方式,能够这样想,在Ajax 驱动的应用程序中,数据能够从应用server检索,然后显示在页面上,而不需又一次载入整个页面。

仅仅有一小部分的页面,或者仅仅有元素本身被又一次载入。

在编写用例过程中应该遵守下面几点原则:

1、一个脚本是一个完整的场景。从用户登陆操作到用户退出系统关闭浏览器。

2、一个脚本脚本仅仅验证一个功能点。不要试图用户登陆系统后把全部的功能都进行验证再退出系统

3、尽量仅仅做功能中正向逻辑的验证。不要考虑太多逆向逻辑的验证,逆向逻辑的情况非常多(比如手号输错有非常多种情况),验证一方面比較复杂。须要编写大量的脚本,还有一方面自己主动化脚本本身比較脆弱。非常多非正常的逻辑的验证能力不强。

(我们尽量遵循用户正常使用原则编写脚本就可以)

4、脚本之间不要产生关联性,也就是说编写的每个脚本都是独立的,不能依赖或影响其它脚本。

5、假设对数据进行了改动,须要对数据进行还原。

6、在整个脚本中仅仅对验证点进行验证。不要对整个脚本每一步都做验证。

8.1  使用HTMLTestRunner生成測试报告

HTMLTestRunner 是Python 标准库的unittest 单元測试框架的一个扩展。它生成易于使用的HTML 測试报告。HTMLTestRunner 是在BSD 许可证下公布。

首先要下HTMLTestRunner.py 文件,下载地址:

http://tungwaiyip.info/software/HTMLTestRunner.html

HTMLTestRunner.py 本是一个.py 文件,将它放到Python 安装文件夹下就可以调用。

Windows :将下载的文件放入...\Python27\Lib文件夹下。

在Python 交互模式引入HTMLTestRunner 包,假设没有报错,则说明加入成功。

>>> importHTMLTestRunner

8.1.1    生成HTMLTestRunner測试报告

testBaidu.py

#coding=utf-8
fromselenium import webdriver
importunittest,time
importHTMLTestRunner
classMyTest(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.implicitly_wait(10)
        self.base_url ="http://www.baidu.com"

    def test_baidu(self):
        driver = self.driver
        driver.get(self.base_url +"/")
        driver.find_element_by_id("kw").clear()
        driver.find_element_by_id("kw").send_keys("HTMLTestRunner")
        driver.find_element_by_id("su").click()
    def tearDown(self):
        self.driver.quit()
if__name__=="__main__":
    testSuite=unittest.TestSuite()
    testSuite.addTest(MyTest("test_baidu"))
    Html=".\\result.htm"
    fp=file(Html,'wb')

    runner=HTMLTestRunner.HTMLTestRunner(stream=fp,title=u'百度搜索測试报告',description=u'用例运行情况:')
    runner.run(testSuite)
    fp.close()

首先将HTMLTestRunner 模块imoport 进来。定义測试报告的存放路径fiename,通过file()将文件以读写的方式打开。

接着调用HTMLTestRunner 模块下的HTMLTestRunner 方法。

stream 指定測试报告文件。title 用于定义測试报告的标题。description 用于定义測试报告的副标题。

如今通过HTMLTestRunner 的run()方法来执行測试套件中所组装的測试用例。

最后fp.close()来关闭測试报告文件。

通过Python 提供的help()来查看类和方法的说明。

>>> import HTMLTestRunner

>>>help(HTMLTestRunner)

每次执行測试之前之前都要手动的去改动报告的名称,假设忘记改动就会把之前的报告覆盖。这样做显然会麻烦。那么有没有办法使每次生成的报告名称都不一样而且更有意义,我们能够在报告名称中增加当前时间,这样报告不会重叠而且更清晰的知道生成的前后时间.

time.time() 获取当前时间戳。

time.ctime() 当前时间的字符串形式。

time.localtime() 当前时间的struct_time形式。

time.strftime() 用来获得当前时间,能够将时间格式化为字符串。

Python 中时间日期格式化符号:

%a                   星期几的简写

%A                   星期几的全称

%w                  十进制表示的星期几(值从0到6,星期天为0)

%d                   十进制表示的每月的第几天

%b                   月份的简写

%B                   月份的全称

%m                  十进制表示的月份

%y                   不带世纪的十进制年份(值从0到99)

%Y                   带世纪部分的十制年份

%H 24             小时制的小时

%I 12               小时制的小时

%p                   本地的AM或PM 的等价显示

%M                  十时制表示的分钟数

%S                   十进制的秒数

%f                    十进制的微秒,零填充左边

%Z                   当前时区的名称

%j                    十进制表示的每年的第几天

%U                  一年中的星期数(00-53)星期天为星期的開始

%W                  一年中的星期数(00-53)星期一为星期的開始

%x                   本地对应的日期表示

%X                   本地对应的时间表示

%%                  %号本身

获取当前时间:now = time.strftime("%Y-%m-%d %H_%M_%S")

眼下測试报告仅仅集成到了单个測试文件里,我们的终于目的是将其集成表all_test.py 文件里。以下打开all_test.py 文件,做例如以下改动:UnitTest\Project\all_test.py

#coding=utf-8
import unittest
import HTMLTestRunner
import time

def creatSuite():
   testunit=unittest.TestSuite()
   test_dir="C:\\Users\\ewang\\Desktop\\Python_Selenium2\\UnitTest\\Project\\test_case"
   discover=unittest.defaultTestLoader.discover(test_dir,pattern="test*.py",top_level_dir=None)

   for test_suit in discover:
        for test_case in test_suit:
            testunit.addTest(test_case)
   return testunit

now = time.strftime("%Y-%m-%d%H_%M_%S")
filename ='.\\report\\'+now+'result.html'
fp = file(filename, 'wb')
runner=HTMLTestRunner.HTMLTestRunner(
                   stream=fp,
                   title=u'百度搜索測试报告',
                   description=u'用例运行情况:')

if __name__=="__main__":
   alltest=creatSuite()
  runner.run(alltest)

8.2 创建定时任务

为了让自己主动化測试“自己主动化”起来。如今我们来创建定时任务,使自己主动化測试脚本在指定的时间自己主动化执行。

创建定时任务的方法有非常多,比方,我们能够写一段程序让其在指定的时间执行all_test.py 文件。或者使用系统的定时任务功能在指定的时间执行all_test.py文件。

时间: 2024-08-01 17:42:18

Selenium2 Python 自己主动化測试实战学习笔记(五)的相关文章

Mock+Proxy在SDK项目的自己主动化測试实战

项目背景 广告SDK项目是为应用程序APP开发者提供移动广告平台接入的API程序集合,其形态就是一个植入宿主APP的jar包.提供的功能主要有以下几点: - 为APP请求广告内容 - 用户行为打点 - 错误日志打点 - 反作弊 团队现状 在项目推进的过程中.逐渐暴露了一些问题: 1. 项目团队分为上海团队(服务端)和北京团队(client),因为信息同步,人力资源等其它原因.服务端与client的开发进度非常难保持同步,经常出现client等着和服务端联调的情况 2. 接口文档不稳定,理解有偏差

Android自己主动化測试之Monkeyrunner用法及实例

眼下android SDK里自带的现成的測试工具有monkey 和 monkeyrunner两个.大家别看这俩兄弟名字相像,但事实上是完全然全不同的两个工具,应用在不同的測试领域.总的来说,monkey主要应用在压力和可靠性測试上,执行该命令能够随机地向目标程序发送各种模拟键盘事件流,而且能够自定义发送的次数,以此观察被測应用程序的稳定性和可靠性,应用起来也比較简单,记住那几个命令即可了.而monkeyrunner呢,相比之下会强大一些,它主要可应用于功能測试,回归測试,而且能够自定义測试扩展,

带有机器人框架的.NET自己主动化測试

Clayton Neal在软件測试和质量保证方面有超过13年的经验,当中有八年的Windows, web,和移动应用程序的測试自己主动化经验.他在測试领域的全部等级都工作过.近期他在Bloomberg and Misys担任QA经理.同一时候他还是Sogeti的自己主动化測试顾问.Clayton对自己主动化測试超迷恋,还见识了怎样亲自成功实施測试自己主动化. ? 測试自己主动化的优点我们都非常清楚,更快地反馈问题,降低手工測试,持续集成就是当中随口可举的.測试团队成员越多,公司使用自己主动化越多

Android自己主动化測试解决方式

如今,已经有大量的Android自己主动化測试架构或工具可供我们使用,当中包含:Activity Instrumentation, MonkeyRunner, Robotium, 以及Robolectric.另外LessPainful也提供服务来进行真实设备上的自己主动化測试. Android自身提供了对instrumentation測试的基本支持,当中之中的一个就是位于android.test包内的ActivityInstrumentationTestCase2类,它扩展了JUnit的Test

Robot Framework自己主动化測试框架之我见

一些自己主动化測试现状: 盲目的去做自己主动化,终于以失败告终. 觉得是能提高效率的事情.却推广不下去: 事实上上述问题产生的原因是: 自己主动化測试案例稳定性不高,可维护性比較差: 自己主动化測试工具学习成本高,自己主动化測试人员的成本高: 而RF(Robot Framework,后面都简称RF)具备良好的分层思想.它将測试人员分为懂开发和不懂开发的,懂开发来负责底层keyword开发和维护,供不懂开发的測试人员调用,通过填写表格的形式用自言语言来写自己主动化測试用例.这样写出来的用例測试用例

MAC中在eclipse luna上搭建移动平台自己主动化測试框架(UIAutomator/Appium/Robotium/MonkeyRunner)关键点记录

这几天由于原来在用的hp laptop的电池坏掉了,机器一不小心就断电.所以仅仅能花时间在自己的mackbook pro上又一次搭建整套环境.大家都知道搭建好开发环境是个非常琐碎须要耐心的事情,特别是当你搭建的安卓平台的时候常常须要FQ,那个慢不是常人能够忍受的.所以过程中建议大家边看书或者玩手机边搭建,省得一直瞪着屏幕导致爆血管的意外发生. 这里本人尝试把在mac上搭建移动平台自己主动化測试框架的一些碰到的问题和关键点给描写叙述一下.以方便后来者能够借鉴. 1. 假设你须要的是最新的eclis

小程聊微服务-增艺眼中的自己主动化測试

假设说"生活不仅仅有眼前的苟且,还有诗和远方"的话,那么自己主动化測试可以说是非常多測试人员心中的"诗和远方". "诗和远方"OR"禁果" 測试自己主动化,须要持续改进.但因为其本身是一种过于激动人心的想法:用程序去測试程序--解放了測试人员的生产力.节省大量的人力成本.这就有点"禁果"的意思了. 一个常见的行动模式是:在实施自己主动化測试时,设定一些量化指标,比如依据业务.接口.模块设置的覆盖率. 技术团

Android Monkey自己主动化測试

前言 假设你做Android开发,还没有使用过Monkey进行測试,那么今天看到这篇文章,希望能解决你Android測试中的一些问题.起码能帮你省点測试的时间而且发现很多其它的问题. Monkey简单介绍 Monkey是一个可执行在模拟器和实际设备中的Android命令行自己主动化測试工具,它能够模拟伪随机的用户事件流,比如点击.触摸.手势等.你能够使用Monkey对正在开发的程序进行压力測试. Monkey的特征: 測试的对象为程序包名,通过-p參数指定. Monkey測试使用的事件流.数据流

【金阳光測试】大话Android自己主动化測试--Android自己主动化系列(1)--金阳光于2013年4月份

Android自己主动化測试框架和工具在四年多的发展日趋成熟. 从五年前的第一代自己主动化架构演进到眼下第四代(本系列讲座第7篇后将具体剖析第三代和第四代自己主动化框架)从曾经最早谷歌推崇的monkey随机測试工具到点触流自己主动化工具monkeyrunner.MonkeyTalk.基于元素识别的自己主动化框架sikuli.seeTest.iTest.基于控件识别的Robotium.SL4A.这三种技术各有千秋.基本上如今做出的自己主动化框架都是整合或者改动了以上这些免费的自己主动化框架:比方中