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文件。

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

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

    项目背景 广告SDK项目是为应用程序APP开发者提供移动广告平台接入的API程序集合,其形态就是一个植入宿主APP的jar包.提供的功能主要有以下几点: - 为APP请求广告内容 - 用户行为打点 - ...

  2. Android 自己主动化測试(3)&lt;monkeyrunner&gt; 依据ID查找对象&amp;touch&amp;type (python)

    我在之前的两篇文章中用java来实现过 Android 自己主动化測试(1)怎样安装和卸载一个应用(java).Android 自己主动化測试(2)依据ID查找对象(java). 可是本质上都是用mo ...

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

    如今,已经有大量的Android自己主动化測试架构或工具可供我们使用,当中包含:Activity Instrumentation, MonkeyRunner, Robotium, 以及Robolect ...

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

    眼下android SDK里自带的现成的測试工具有monkey 和 monkeyrunner两个.大家别看这俩兄弟名字相像,但事实上是完全然全不同的两个工具,应用在不同的測试领域.总的来说,monke ...

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

    Clayton Neal在软件測试和质量保证方面有超过13年的经验,当中有八年的Windows, web,和移动应用程序的測试自己主动化经验.他在測试领域的全部等级都工作过.近期他在Bloomberg ...

  6. Appium IOS 自己主动化測试初探

    手机平台的自己主动化測试工具非常多,之前研究过了安卓和苹果的原生自己主动化測试框架.经一些同事介绍,貌似Appium是个不错的工具. 想记录一下研究的结果,也算是篇干货的文章 在网上也看了一些视频.个 ...

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

    这几天由于原来在用的hp laptop的电池坏掉了,机器一不小心就断电.所以仅仅能花时间在自己的mackbook pro上又一次搭建整套环境.大家都知道搭建好开发环境是个非常琐碎须要耐心的事情,特别是 ...

  8. Android Monkey自己主动化測试

    前言 假设你做Android开发,还没有使用过Monkey进行測试,那么今天看到这篇文章,希望能解决你Android測试中的一些问题.起码能帮你省点測试的时间而且发现很多其它的问题. Monkey简单 ...

  9. iOS自己主动化測试的那些干货

    前言 假设有測试大佬发现内容不正确.欢迎指正,我会及时改动. 大多数的iOS App(没有持续集成)迭代流程是这种 也就是说.測试是公布之前的最后一道关卡.假设bug不能在測试中发现,那么bug 就会 ...

随机推荐

  1. HDU 6373.Pinball -简单的计算几何+物理受力分析 (2018 Multi-University Training Contest 6 1012)

    6373.Pinball 物理受力分析题目. 画的有点丑,通过受力分析,先求出θ角,为arctan(b/a),就是atan(b/a),然后将重力加速度分解为垂直斜面的和平行斜面的,垂直斜面的记为a1, ...

  2. Codeforces 810 C. Do you want a date?

    C. Do you want a date? time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  3. CSU 1330 字符识别? 【找规律】

    你的任务是写一个程序进行字符识别.别担心,你只需要识别1, 2, 3,如下: .*.  ***  *** .*.  ..*  ..* .*.  ***  *** .*.  *..  ..* .*.  ...

  4. codevs 方格取数

    1043 方格取数 2000年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Descri ...

  5. 01、Mecanim动画系统

    序言:Mecanim动画系统是Unity4.0之后退出的新版动画系统,非常适合人类动画系统.本文是作为自己的学习来讲解的, 可能会有些啰嗦,但尽量把自己的坑都为大家列出来,让大家理解透彻. 一.文件的 ...

  6. CSS中的层叠、特殊性、继承、样式表中的@import

    CSS中的层叠.特殊性.继承.样式表中的@import 层叠 CSS有一个机制是层叠,层叠可以理解为对样式的覆盖,优先性为: 网站开发者的样式表 用户样式(通过设置浏览器的显示选项) 浏览器默认的样式 ...

  7. 【单调队列】bzoj1047 [HAOI2007]理想的正方形

    先把整个矩阵处理成b[n][m-K+1].c[n][m-K+1]大小的两个矩阵,分别存储每行每K个数中的最大.最小值,然后再通过b.c处理出d.e分别表示K*K大小的子矩阵中的最大.最小值即可.单调队 ...

  8. 【DFS序】【莫队算法】【权值分块】bzoj2809 [Apio2012]dispatching

    题意:在树中找到一个点i,并且找到这个点子树中的一些点组成一个集合,使得集合中的所有点的c之和不超过M,且Li*集合中元素个数和最大 首先,我们将树处理出dfs序,将子树询问转化成区间询问. 然后我们 ...

  9. Error: Top-level design entity "dff" is undefined

    原因是:在quartus库文件里面已将dff定义了,要是找使用这个名字重命名了,因而需要重新命名为其他的名字.

  10. ASP.NET Core 1.0基础之日志

    过年出去玩了一圈,回来继续翻译.前两天偷懒没有翻译,只是转了两篇C# 7计划中的新features,大家还是很支持的.现在继续完善这个系列. 来源https://docs.asp.net/en/lat ...