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.driverdriver.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 timedef 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 testunitnow = 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. Android自己主动化測试之Monkeyrunner用法及实例

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

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

    Android自己主动化測试框架和工具在四年多的发展日趋成熟. 从五年前的第一代自己主动化架构演进到眼下第四代(本系列讲座第7篇后将具体剖析第三代和第四代自己主动化框架)从曾经最早谷歌推崇的monke ...

  3. 用python做自己主动化測试--绘制系统性能趋势图和科学计算

    在性能測试中.我们常常须要画出CPU memory 或者IO的趋势图. 预计大学里.大多数人都学习过matlib, 领略了matlib绘图的强大. python提供了强大的绘图模块matplotlib ...

  4. Android 自己主动化測试之------ Monkey工具

    尽管 一般公司都有专门的測试人员,可是有时候 免不了 我们既要去开发产品,也要去測试产品,測试产品.有些机械化的 点界面的操作,谷歌已经给我们提供了工具.Monkey, 猴子測试. 什么是Monkey ...

  5. 逐步转向自己主动化測试

    从Mac team转到SSOteam的时间差点儿相同也有一个多月的时间了,当时Bruce问我要不要转team的时候,我也有考虑过一段时间.纠结于各种原因.然后.自己最后还是转了.经过大半个月的适应,还 ...

  6. python的knn算法list_机器学习实战学习笔记1——KNN算法

    一.KNN算法概述: 1.KNN算法的工作原理是: (1)存在一个训练样本集,并且知道样本集中每一数据与所属分类的对应关系,即每个数据都存在分类标签. (2)若此时输入不带标签的新数据之后,将新数据的 ...

  7. 移动App測试实战:顶级互联网企业软件測试和质量提升最佳实践

    这篇是计算机类的优质预售推荐>>>><移动App測试实战:顶级互联网企业软件測试和质量提升最佳实践> 国内顶级互联网公司測试实战经验总结.阿里.腾讯.京东.携程.百 ...

  8. Linux性能优化实战学习笔记:第四十六讲=====实战分析

    Linux性能优化实战学习笔记:第四十六讲 一.上节回顾 不知不觉,我们已经学完了整个专栏的四大基础模块,即 CPU.内存.文件系统和磁盘 I/O.以及网络的性能分析和优化.相信你已经掌握了这些基础模 ...

  9. “物联网开发实战”学习笔记-(四)智能音箱制作和语音控制

    "物联网开发实战"学习笔记-(四)智能音箱制作和语音控制 这次来造一个属于自己的智能音箱,这里详细介绍了智能音箱的语音控制的实现. 智能音箱的技术架构 智能音箱主要涉及拾音.前端信 ...

最新文章

  1. 常见问题:内存,循环引用,runloop的简单理解
  2. rabitMQ和kafka如何选择
  3. Leetcode 455.分发饼干 (每日一题 20210708 同类型题)
  4. 如何理解 if __name__ == “__main__“:
  5. openstack: No valid host was found. There are not enough hosts available
  6. Java编写斗地主的游戏源码
  7. Round14—最小生成树
  8. ubuntu下载软件创建桌面快捷方式
  9. Unity自定义文件夹图标颜色 个性化Unity编译器 unity 彩色文件夹
  10. html在页面显示一个正方形,CSS实现一个自适应的正方形的方法示例
  11. 多金的ToG项目总结——数字人民币
  12. Kubernets简介
  13. JS事件之事件绑定与事件监听
  14. CSS阴影效果(Box-shadow)用法趣味讲解
  15. concatenation 和 element-wise summation 该选哪个?
  16. 牛顿迭代法是一种速度很快的迭代方法,但是它需要预先求得导函数。若用差商代替导数,可得下列弦截法
  17. Android 仿钉钉、微信 群聊组合头像
  18. nodejs 初探 api试用
  19. 转转闲鱼交易猫源码搭建教程
  20. 学习SVM(四) 理解SVM中的支持向量(Support Vector)

热门文章

  1. 掌握jQuery插件开发,这篇文章就够了
  2. 栈,堆,值类型,引用类型,装箱,拆箱 .NET中 6个重要的概念
  3. ListBox的使用
  4. Kilim实现浅析(一)
  5. Scaleform GFx
  6. Your PC needs to be repaired
  7. Codeforces Round #539 Div. 1
  8. 电脑小常识----文件名长度过长解决办法
  9. js读取解析JSON类型数据【申明:来源于网络】
  10. UNIX环境高级编程8.9竞争条件