作者derekhsu (华丽的天下无双)
看板Soft_Job
标题[心得] 软体测试自动化
时间Tue May 29 00:07:38 2012
既然谈到Automation Test,分享一下在下的经验好了,
Test Case:
文件化後的测试描述,相对於Use Case从使用者角度出发,Test Case从
测试角度出发。至少有输入(Input)、预期输出(Expected Output)、步骤(Test Step)
等三项要素,其他像是测试编号(Test Id),测试方法(Test Method)、前置条件(
Precodtion),这些依照不同公司、环境的测试规范而定。
自动测试:Automation Test,采用电脑自动执行Test Case中的Step。
人工测试:Manual Test,采用人力执行Test Case中的Step
随意测试:Ad-hoc Test,在没有Test Case的情况下人工乱打。
单元测试:Unit Test,程式码层级的测试,主要透过Unit Test Program自动完成。
理想的Unit Test应该能够去除类别之间的Dependency.
除单元测试外,其他的测试若没有主动提到都是指在整合测试阶段的测试。
这里的单元测试是指透过xUnit家族之类的Unit test automation framework来
进行的单元测试。
其他还有一堆有的没有的测试像是Monkey Test、Randomness Test、Load Test、
Stress Test的ROI就不在这里讨论的范围之内的。
有人说Automation Test一定胜过Manual Test或Ad-hoc Test,我的答案是:
从ROI的角度来看,并非100%赞同,特别是GUI Automation。
Ref:
http://www.testingmentor.com/imtesty/2009/11/18/gui-automation-and-roi/
Dan Mosley and Bruce Posey (Just Enough Software Test Automation) suggest
that on average an automated test must run approximately 17 times in order to
break even. But, this doesn’t imply that we break even if we simply run the
same test on a daily build for the next 17 days.
这一段引用了一篇来自於Dan Mosley与Bruse Posey的书,这本书告诉我们自动化测试
「够用就好」,原本这里面的数据是某位我以前的同事告诉我的,我最近才找到来源,
它说「一个平均的自动化测试要打平它的开发成本,至少要可执行约17次。」「而且
这17次不是说执行每日建构17天,而是要在17次版本改变里面被正确执行。」
我们说一个自动化测试不是对的,并不是说被测试的程式是错的,而是自动化测试程式
本身无法依照测试脚本(案例,Test Script/Test Case)上面的定义去验证程式。
这一点是自动化测试一个非常严重的迷思:
错在哪里?
如果一个自动化测试不能够被稳定的执行多次,而每次错误都必须找出自动化错误程式
错在哪里,最後却发现原来都是自动化测试程式的错而不断去修改自动测试程式,那麽
若是由Developer开发自动化程式,这样的程序浪费了他用在Feature开发的时间;若是
由QA开发自动化测试,那麽这样的程序浪费了他执行其他更重要的测试的时间,於是这
个自动化测试案例就失去了他原本的价值。
更严重的是,他会使整个团队不再信任自动化测试的结果,而这就是绝大部分专案执行
自动化测试失败的原因。
「被测试程式的稳定性」是评估自动化测试ROI的第一项指标。
那麽,哪种被测试程式的稳定性最差?
GUI。
因为GUI是最容易因为需求改变而被改变的程式,因此GUI Test(通常GUI Test是
Integration Test层级)的Automation的争议性一直是最高的,甚至有台湾大神
vgod开发的sikuli都做到用Screenshot来Test了但还是有很多问题在。
用Screenshot的Test,假设图改了呢?(Sikuli)
用座标的Test假设位置变了呢?(AutoIt, PyAuto...)
用Id/xpath的Test假设Id换了,或是...没有Id(动态元件,如Ext3)呢?
(Selenium, HP QuickTest ...)
有太多因素可以影响GUI,造成自动化测试程式不是依照预期的正确、或是错误。
一般而言,稳定性最低的GUI Test最不适合做Automation。如果你的团队要做自动化
测试,请将GUI Test的投资顺序挪後。如你能很神奇的维持GUI的稳定,那请您一定要
分享给我们您是怎麽做到的。
稳定性最差的情况是连需求都不稳定,需求一旦变化,Test Case要跟着动,主程式要
跟着动,当然Automation Test也要跟着动。这也是几乎所有专案公司执行Automation
Test都会失败的原因,因为台湾的专案公司在验收时都还可能在改需求在改Code。
所以很多人对於自动化测试的经验相当两极化,原因就是在你是不是在做一个稳定的
产品或专案,一个好的Unit Test可以增加Automation Test的稳定性,但一个乱七八
糟的需求变更流程可以让Unit Test毁Automation Test更厉害。
--
所有我的作品,请到.....
~四十八个德瑞克~
http://blog.derekhsu.homeip.net
马皇本纪:
http://blog.derekhsu.homeip.net/2009/08/821
上官先生传:
http://blog.derekhsu.homeip.net/2009/08/825
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 175.182.34.146
※ 编辑: derekhsu 来自: 175.182.34.146 (05/29 00:10)
1F:推 atpx:相当清楚~~ 05/29 00:16
※ 编辑: derekhsu 来自: 175.182.34.146 (05/29 00:19)
2F:推 Ting1024:相当清楚...感谢 05/29 00:30
※ 编辑: derekhsu 来自: 175.182.34.146 (05/29 01:01)
3F:→ TonyQ:一般来讲,我作过的 UI 测试,底线会是 vision test 。 05/29 01:26
4F:→ TonyQ:vision test 在大多的 UI 元件上都还可以取得相对稳定的品质 05/29 01:27
5F:→ TonyQ:当然,假设原本的稳定性是 5% , vision test 大概是 30% 05/29 01:27
6F:→ TonyQ:这是我们自己作 UI 测试的方法论跟经验谈。 05/29 01:27
7F:→ TonyQ:另外其实大多 ui 元件,都会提供生 ID 给你的方案啦。:P 05/29 01:28
8F:→ superpai:所以Test同时也是在测试公司的品质.. 05/29 01:31
9F:→ derekhsu:哪有Ext哪有生ID给我 05/29 01:31
10F:→ derekhsu:我是没用过Zk,会吐固定的Id吗? 05/29 01:32
11F:→ derekhsu:还有我没听过vision test,也Google不到,愿闻其详 05/29 01:34
12F:→ TonyQ:ZK 是有个 API 可以让你实作,实作完之後就会吐固定 id。 05/29 01:35
13F:→ TonyQ:vision test 简言之,截图比对... 05/29 01:36
14F:→ TonyQ:extJS 可以自己设定ID 或用 selenium selector 去作。 05/29 01:38
15F:→ TonyQ:selenium seelctor 基本上蛮够用了,再不然还可以 customize 05/29 01:38
16F:→ TonyQ:locator 去作。不过这还是要看你要测什麽就是了。 05/29 01:38
17F:推 ohb:重点还是在稳定性...UI Component相较於其他的模组,改版时会 05/29 01:39
18F:→ derekhsu:没有用,动态生出来一堆元件,Id很难预期 05/29 01:39
19F:→ ohb:改动的机率就是比较高...如果你的UI可以尽量都不改,那自动化 05/29 01:39
20F:→ ohb:UI test就有价值在了 05/29 01:39
21F:→ derekhsu:selenium selector那要用狗屎般长的xpath... 05/29 01:39
22F:→ TonyQ:刚查了一下 vision test 是只有我们自己讲的非正式名词XD 05/29 01:40
23F:→ TonyQ:@derekhsu 没吧,他有 css selector 啊 比xpath好用多了 05/29 01:41
24F:→ TonyQ:我也很赌烂 xpath XD 05/29 01:41
26F:→ TonyQ:这是 0.8.0 版的文件,但这个基本上後来改变不大 05/29 01:42
27F:推 ohb:非不得以的话请不要用xpath XD 05/29 01:42
28F:推 LetDogDay:zk有用到extjs?? 05/29 01:43
29F:→ TonyQ:没啊,当然没有,他们是自己刻的。XD 05/29 01:43
31F:→ TonyQ:btw 闲聊,我对元件觉得有点瓶颈所以离开 ZK 了,XD 05/29 01:44
32F:→ TonyQ:所以大家不要太把我的话跟 ZK 连上等号。虽然我还是很喜欢这 05/29 01:45
33F:→ TonyQ:家公司。:P 05/29 01:45
34F:→ TonyQ:但是我不太希望因为这样造成前东家困扰。 05/29 01:45
35F:→ derekhsu:如果tag上面没有css class的话,一样,而且ext的事件都在 05/29 01:47
36F:→ derekhsu:奇怪的地方... 05/29 01:47
37F:→ derekhsu:你根据文字找到了要点的按钮,却发现事件不是绑在那附近 05/29 01:47
38F:→ TonyQ:我记得 ext-js 跟我们一样在不同元件有不同 css class 识别 05/29 01:47
39F:→ TonyQ:应该够用才对。不过可能大多都是要手工作,不太能倚赖 05/29 01:48
40F:→ TonyQ:selenium IDE 这类的工具就是了 :x 05/29 01:48
41F:→ TonyQ:@derekhsu 我们家的东西也是一样,那个是有历史因素的... 05/29 01:48
42F:→ TonyQ:一切都是向下相容造成的... 05/29 01:48
43F:→ TonyQ:@ohb 发现忘了回到你,所以 vision test 很重要, 05/29 01:52
44F:→ TonyQ: 拍张图很快,用这种作法比起传统一一判断状态来得实际 05/29 01:52
45F:→ TonyQ: 不过当然,有些东西就是没办法拍图作,像是位置会浮动 05/29 01:52
46F:→ TonyQ: 对话框... 05/29 01:52
47F:→ TonyQ:反正 UI testing 就是能作多少算多少,我是也有看过一种状况 05/29 01:53
48F:→ TonyQ:是挑几个特定节点去跑程式截图,然後人工看看有没有问题的。 05/29 01:53
49F:→ TonyQ:不过 UI Testing 来讲,几乎不可能没有 false alarm 是最讨 05/29 01:54
50F:→ TonyQ:验的事情...:x 一定要有人读 report ... 05/29 01:54
51F:推 ppHomer:感谢分享!! 05/29 07:26
52F:推 ccpz:ext-js 真的很难测, id 乱数的问题还好解决(另外指定一个 05/29 08:09
53F:→ ccpz:独一无二的关键字就好), 还有很多标准元件他都自己重新设计 05/29 08:10
54F:→ ccpz:变成测试时也要一个一个处理,不然就是event乱绑,自动测试 05/29 08:14
55F:→ ccpz:无法触发 event 时就只能瞎子摸象 orz 05/29 08:14
56F:推 musie:这篇就真的是好文,给推~ 05/29 09:14
57F:推 littlebau:这篇真的是难得的好文,对软体测试不熟。不然也想讨论 05/29 10:19
58F:推 marcusmiller:清楚的好文,还是希望楼上宝哥来分享,毕竟 05/29 13:54
59F:→ marcusmiller:测试不分软韧体,test logic都会很像 05/29 13:56
60F:推 littlebau:觉的软体测试 比韧体测试难多了.. 05/29 17:12
61F:推 andreli:德瑞克好帅 05/29 17:59
62F:推 gpmm:楼上趁乱告白? XD 05/29 23:57
63F:推 ntddt:推自动化测试讨论文~ 06/05 22:48
64F:推 NDark:这篇解开了我多年来的困惑. 07/17 21:06