关于测试

自动化测试

软件测试概述

软件测试是一种用来促进鉴定软件的正确性、完整性、安全性和品质的过程,也就是在规定的条件下对程序进行操作以发现程序中的错误,衡量软件的品质并对其是否能满足设计要求进行评估的过程。由于Python的不是静态强类型语言,很多问题在没有运行到代码那一行时是无法发现的,所以测试显得尤为重要。

软件测试的一般性原则包括:

  1. 测试用例中一个必需的部分是对预期输出或结果的定义
  2. 程序员应当避免测试自己编写的程序;编写软件的组织不应当测试自己编写的软件
  3. 应当彻底检查每一个测试的执行结果
  4. 测试用例的不仅包括有效和预期的输入情况,而且包括无效和未知的输入情况
  5. 检查程序“没有做该做的事情”只是测试的一半,检查程序“做了不应该做的事情”是测试的另一半
  6. 要保留测试用例,除非软件本身就是一个一次性的软件
  7. 计划测试工作时不能先入为主的认为不会发现错误
  8. 程序某个部分存在更多错误的可能性与已经发现错误的数量成正比

测试用例的设计

软件测试中最为重要的因素是设计和生成有效的测试用例,由于时间和成本的约束,要实施完全的测试是不可能的,那么研究测试用例的设计就是要解决“在所有可能的测试用例中,哪个子集最有可能发现最多的错误”的 问题。

黑盒测试和白盒测试是软件测试中最普遍的两种策略:

  • 黑盒测试:测试应用程序的功能,而不是其内部结构或运作。测试者不需具备应用程序的代码、内部结构和编程语言的专门知识。测试者只需知道什么是系统应该做的事,即当键入一个特定的输入,可得到一定的输出。测试案例是依应用系统应该做的功能,照规范、规格或要求等设计。测试者选择有效输入和无效输入来验证是否正确的输出。此测试方法可适合大部分的软件测试,例如集成测试和系统测试。

  • 白盒测试:测试应用程序的内部结构或运作,而不是测试应用程序的功能。在白盒测试时,以编程语言的角度来设计测试案例。测试者输入数据验证数据流在程序中的流动路径,并确定适当的输出,类似测试电路中的节点。

上面已经提到过,无论是黑盒测试还是白盒测试,要穷尽所有的输入都是不可能做到的。在实施黑盒测试时,我们可以通过等价类划分、边界值分析、因果图分析、错误猜测等方法来选择有代表性的输入;同样,在实施白盒测试时,我们可以通过语句覆盖、判定覆盖、条件覆盖等方法来保障测试的覆盖度。

测试的阶段

单元测试:对软件组成单元进行测试,其目的是检验软件基本组成单位的正确性,测试的对象是软件设计的最小单位 - 函数。

集成测试:将程序模块采用适当的集成策略组装起来,对系统的接口及集成后的功能进行正确性检测的测试工作。其主要目的是检查软件单位之间的接口是否正确,集成测试的对象是已经经过单元测试的模块。

系统测试:系统测试主要包括功能测试、界面测试、可靠性测试、易用性测试、性能测试。

回归测试:为了检测代码修改而引入的错误所进行的测试活动。回归测试是软件维护阶段的重要工作,有研究表明,回归测试带来的耗费占软件生命周期的1/3总费用以上。

单元测试

单元测试是针对程序中的单个子程序或过程进行的测试,也就是说,一开始并不是测试整个程序而是先将注意力集中在构成程序的较小模块上。单元测试降低了调试的难度,因为能够准确定位到错误是在那个模块中,同时也为并行的测试多个模块提供了可能性。

Python的标准库里有为编写单元测试而准备的unittest模块,执行测试时建议使用pytest。pytest是一款能够自动搜索并执行测试的测试执行工具,并且会输出详细的错误报告。关于单元测试可以看看《Python必会的单元测试框架 - unittest》

可以安装testfixtures库来辅助单元测试,它整合了多种典型配置器,提供了生成目录、更改系统日期、生成mock对象的功能模块,这些模块能够帮助我们将单元测试与单元测试所依赖的环境分离开。mock 是将测试对象所依赖的对象替换为虚拟对象的库,在测试的时候,我们可以为虚拟对象指定其在被调用时的返回值以及是否发生异常等。

WebTest是用于Web应用功能测试的库。它会对WSGI应用执行模拟请求并获取结果。基本上所有WSGI应用的测试都可以用它。

tox能便捷地为我们准备好执行测试所需的环境。tox会在多个virtualenv环境中搭建测试 环境,然后在这些环境中执行测试并显示结果。它能够把测试工具的选项及环境变量等内容统 一起来,所以我们只需执行tox命令即能轻松完成所需的测试。

Selenium

Selenium是实现Web应用程序的功能测试以及集成测试自动化的浏览器驱动测试工具群。和使用浏览器的用户相同,Selenium可以在浏览器进行的鼠标操作、在表单中输入文字、验证表单的值等,利用这一点就可以将手动操作变成自动化操作。

Selenium优点

  1. 自动化测试用例制作简单。Selenium提供了Selenium IDE工具,该工具可以捕获鼠标、键盘的操作,然后通过重放功能来重复这些操作,这样就可以简单的制作测试用例。
  2. 支持多种浏览器和操作系统。

Selenium的组件

  1. Selenium IDE
  2. Selenium Remote Control
  3. Selenium WebDriver

与持续集成工具(CI)协作

持续集成指的是频繁的将代码集成到主干。它的好处主要有两个:

  1. 快速发现错误。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易。

  2. 防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。

持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是代码集成到主干之前,必须通过自动化测试,只要有一个测试用例失败,就不能集成。编程大师Martin Fowler曾经说过:“持续集成并不能消除Bug,而是让它们非常容易发现和改正。”

可以在Jenkins中安装“Seleniumhq Plugin”插件,这样就可以将Selenium IDE制作的测试用例保存为HTML格式并提供给Jenkins来使用,基本步骤是:

  1. 在执行测试的机器上,从版本控制系统中下载测试套件和测试用例。
  2. 在执行测试的机器上下载Selenium Server。
  3. 从Jenkins的“系统管理”中选择“插件管理”来安装“Seleniumhq Plugin”。
  4. 在Jenkins的“系统管理”中选择“系统设置”并配置“Selenium Remote Control”下的“HTMLSuite Runner”。
  5. 新建测试用的Jenkins任务并进行配置,配置的内容包括:浏览器、起始URL、测试套件和测试结果输出文件。

配置完成后,就可以执行Jenkins的“立即构建”了。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,525评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,203评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,862评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,728评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,743评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,590评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,330评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,244评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,693评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,885评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,001评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,723评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,343评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,919评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,042评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,191评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,955评论 2 355

推荐阅读更多精彩内容

  • 1.测试与软件模型 软件开发生命周期模型指的是软件开发全过程、活动和任务的结构性框架。软件项目的开发包括:需求、设...
    宇文臭臭阅读 6,725评论 5 100
  • 基于 SELENIUM 的自动化测试架构 非常感谢各位查阅本篇文章,笔者在此感谢各位。 目前市面上有分门别类的自动...
    厲铆兄阅读 6,071评论 6 43
  • 1.问:你在测试中发现了一个 bug ,但是开发经理认为这不是一个 bug ,你应该怎样解决。 首先,将问题提...
    qianyewhy阅读 9,259评论 4 123
  • 一、 软件测试基本概念 1 bug的概念 bug类型:defect、fault、problem、error… pr...
    三口一个瓜阅读 3,688评论 0 12
  • 洞见SELENIUM自动化测试 写在最前面:目前自动化测试并不属于新鲜的事物,或者说自动化测试的各种方法论已经层出...
    厲铆兄阅读 6,728评论 3 47