本人测试知识还不完整,所以下面的文字总结自网络上的文章,红色字体为我平时的测试经验,如有雷同之处,还请见谅,仅自己学习之用。
转载请说明来自博客园--邦邦酱好。
-------------------------------------------------------------------------------------------------
一.介绍
GUI(Graphical User Interface,图形用户界面)是计算机软件与用户进行交互的主要方式。GUI软件测试是指对使用GUI的软件进行的软件测试。
GUI的存在为用户的操作带来了极大的方便,同时,也使得GUI软件更复杂、更难以测试。GUI软件的测试由于其凸现出来的重要性,已日渐引起学术界和工业界的兴趣和重视。然而,目前关于GUI软件测试的研究还处于初级阶段:很多问题还没有解决,GUI软件测试依然需要较高人工成本,目前的技术还不能满足保证软件质量的实际需求。
一般来说,应用程序有以下的基本的组件(或者说是元素):
1.光标(pointer):显示在屏幕上让用户移动以选择对象和命令的符号。通常显示为一个小的箭头。但是在文字处理的应用程序则是用象大写I一样的光标。
2.图标(icon)/图片(picture):代表命令,文件或窗口的小图片。通过移动光标到图标上然后按下鼠标,用户可以执行预定的命令。
3.窗口(window),表单(Form),属性页(Property Sheets),Tab。
4.菜单(menu),工具栏(tool bar),状态栏(Status bar),进度栏(progress bar)
5.按钮(button)
6.对话框(dialog Box),消息框(message Box),输入对话框(input box)
7.文本框(Text Box),列表框(List Box),组合框(combo Box)、下拉列表框(Drop-down List Box)
8.复选框(Check Box),单选框(Radio box),选项框(Option box)、滑动条(Slider)、旋转按钮(Spin Button)
9.静态文字(Static tex),向导(Wizards),树(Tree)...
GUI测试则主要关注应用程序上GUI组件是否符合规范或用户的操作习惯。当然GUI测试是不可以脱离功能而独立测试的,它是随着功能的实现,一个一个窗口进行校验的,也可以和功能测试一起测试。对于简单的系统可以将GUI测试和验证功能实现一起进行,但对于稍微大一些的系统,最好将其分开,这样才不至于 遗漏任何一个重点。
二.通用测试
不管是Windows的应用程序,还是Java的应用程序,或者其他语言类的应用程序,在其开放之前都应该遵从一定的GUI开发规范(这个大多SDK供应商都有)。那么测试也主要依据其进行GUI测试。
1. 在同一个应用程序中的GUI应该一致,这是最重要的,也是最基本的。
2. 在视觉效果上应该和其他标准的Windows应用程序相同
3. 采用标准的键集(快捷键),在同一系统中,同样的操作,特别是名称相同的操作就好使用一致的快捷键。例如浏览(Browse。。。)按钮如果在一个窗口中快捷键是Alt+B,在另一个窗口最好采用同样的快捷键,这样可以方便用户的操作,不至于让用户混淆快捷键。除非在另一个窗口有比其更重要的操作已占用了一个快捷键,否则最好不要改变。
4. 应用程序启动或进入系统的第一个界面应该显示“关于系统”或有关系统相关信息的屏幕
5. 一般来说,应用程序应该保持为最大化。
6. 应用程序可以在Windows的任务条和状态条中显示,如需要在系统托盘中显示的,在缩写至系统托盘和用户移动光标至应用程序的图标上时,最好给予相关的信息。
7. 在系统中使用统一的代表应用程序的图标。
8. 所有的窗口/对话框应具有可以和其他应用程序区分开的一致外观。
9. 应用程序中使用的颜色组合应该有吸引力,且风格一致,搭配合理,色彩的跳跃不要太大。避免使用深色系,特别是红色和绿色,有些客户可能是色盲
10. 登录界面上要有产品信息,如标志和版本,同时包含公司图标。
11. 帮助菜单的“关于”中应有版权和产品信息。
12. 应用程序中应按功能将界面划分局域块,将完成相同或相近功能的按钮框起来, 并配有相应的功能说明
13. 允许使用Tab键切换,且顺序与控件排列顺序要一致,目前流行总体从上到下,同时行间从左到右的方式;Tab不能定位在不可见的控件上;
14. 在不同的分辨率下显示正常(不出现水平和垂直滚动条,无截断的组件),特别是在应用程序推荐的分辨率下显示完全正常,一般为19寸的是1440x900,20寸的是1600x900,21.5寸的是1920x1080,22寸的是1680x1050。
15. 系统中所有的文字应该没有拼写/文字错误,句子没有语法错误,最好贴近用户的使用习惯。
16. 使用用户知道的术语,而不是深奥的技术术语,特别是在错误提示的消息框中,让用户可以很快的知道问题的所在,而不是揣摩错误信息的意思。尽可能的少用缩写。
17. 英文系统中注意不要使用中文或其他语系字符。
18. 在标识控件用途的标签文本和提示信息中,应使用半角符号。如果是指导性标签文本(如解释按钮功能的句子),则使用全角符号,并且句子应遵循中文标点符号标准。
19. 在提示信息中,避免使用主语,尽可能的使用被动语态。提示信息应简洁明了,没有侵犯性词语。使用一致的大小写规则,避免全大写和复杂的符号。
20. 系统使用统一的字体,不要使用需要另外安装的或操作系统特定的字体库。注意斜体和粗体的使用。
21. 系统目前不提供,以后版本才提供的功能最好隐藏,同一版本不同级别的系统中的不允许使用的功能变灰,或操作提交时给予提示。
22. 系统的帮助文件应该和当前的系统版本相一致
23. 使用"退出"命令终止程序;使用"关闭"移走主窗口和非模式对话框;使用"取消"移走模式对话框。当关闭主窗口并不表示终止进程时,对于主窗口使用"关闭"来代替使用"退出"。例如:关闭打印机状态窗口不会取消打印任务
24. 退出系统后应该彻底的关闭程序,而不要在系统托盘或任务条中继续保留系统的某个窗口。如果要保留,在退出系统时应该给予用户提示。
25. 程序应该能够能够保存而恢复到用户最后退出的状态。MDI程序应该能够恢复文档窗口的大小和位置。对话框,下拉框通常应该使用最后输入的值作为默认值。
26. 不同界面中的同一功能应该使用同样的图标和图片。
27. 公司的系列产品要保持一直的界面风格,如背景色、字体、菜单排列方式、图标、安装过程、按钮,用语等应该大体一致。
28. 同一个电脑系统中能不能同时打开多个测试中的软件?会不会报错之类的?
三.窗口测试
窗口是Windows本身以及Windows 环境下的应用程序的基本界面单位,就是显示在屏幕上的一个矩形区域。一般来说窗口是具有标题栏、菜单/菜单栏、工具栏、工作区、状态栏、最大化、最小化按钮和滚动条的标准方框,应用程序通过它和用户进行交互。但是如果没有标题栏、状态栏、最大化、最小化按钮是不是就不叫窗口呢。其实不然,窗口的概念很广,例如按钮和对话框等也是窗口,只不过是一种特殊的窗口罢了。这里我主要将的还是标准意义上的窗口。
窗口主要有进入、移动、改变窗口大小;最大化、最小化和还原;使用滚动条和关闭窗口等操作。因此可以通过如下来测试窗口:
1. 大多数的窗口、屏幕/对话框应该有最小化,恢复和关闭按钮。关闭之后,在内存中的相应进程是否马上消除?
2. 所有的窗口、屏幕/对话框应该有和内容相一致对应的标题。双击标题,会不会出现软件关闭的情况?
3. 只有主窗口才有标题栏图标、菜单栏、工具栏和状态栏。二级窗口不要使用菜单栏、工具栏或状态栏。
4. 每一个窗口/屏幕都应有功能匹配的OK和Cancel按钮。窗口/对话框的缺省<Enter>键应该设置在OK按钮上;窗口/对话框的缺省<Esc>键应该设置在Cancel按钮上。
a.Escape键取消对话框,焦点重新定位回到父窗口先前的焦点上,
b.Alt+F4关闭窗口,和Escape键相似,但它可以在即使没有Cancel按钮的对话框中工作
c.Alt+Space打开窗口的菜单Restore, Move, Size, Minimize, Maximize, Close
d.Shift+F10和右击效果一样。
e.可以用键盘上的箭头按钮实现Move和Size功能
5. 一个窗口每个组件的访问键必须是唯一的。
6. 父窗体或主窗体的中心位置应该在对角线焦点附近;
子窗体位置应该在主窗体的左上角或正中;
多个子窗体弹出时应该依次向右下方偏移,以显示窗体出标题为宜。
7. 二级窗口最好不要显示在任务栏中,因为单击主窗口的任务栏按钮也会激活二级窗口。
8. 如果子窗体的任何操作会影响了父窗体的数据时,关闭子窗体同时必须刷新父窗体的数据。
9. 关闭父窗体时必须关闭所有打开的子窗体。如果由于子窗口没有关闭而无法关闭父窗口,必须给予提示信息框。在关闭提示信息框后显示必须关闭的子窗口。
10. 子窗体的大小最好不要超过父窗体,且最好不要遮住父窗体的主要信息。如果存在多层嵌套窗口,每层窗口弹出时都自动往右下移动一点点,以保证不遮盖上层窗口标题为准。
11. 窗口嵌套层次最好不超过3层。当前活动窗口有没有被适当地加亮?
12. 点击窗口中的帮助按钮或F1必须带出和窗口内容相一致的帮助。
13. 窗口可以被多次打开和关闭。但窗口未关闭或被其他窗口覆盖时,再次点击菜单或按钮,测试窗口是否可以被激活。
14. 如果窗体可以最小化,最大化或可调整大小时,窗体上的控件也要随着窗体而缩放;对于含有按钮的界面一般不应该支持缩放,即右上角只有关闭功能。
15. 工具栏按钮应该有浮动的提示,可以根据用户的要求自己选择定制;
相同或相近功能的工具栏放在一起;
一条工具栏的长度最长不能超出屏幕宽度;
工具栏的图标能直观的代表要完成的操作;
系统常用的工具栏设置默认放置位置;
工具栏太多时可以考虑使用工具厢;
工具厢要具有可增减性,由用户自己根据需求定制。
工具厢的默认总宽度不要超过屏幕宽度的1/5
16. 状态条要能显示用户切实需要的信息,常用的有: 目前的操作、系统状态、用户位置、用户信息、提示信息、错误信息等,如果某一操作需要的时间较长,还应该显示进度条和进程提示。 状态条的高度以放置五好字为宜,滚动条的宽度比状态条的略窄。
17. 菜单和工具条应有清楚的界限,菜单和状态栏中使用统一大小的字体(通常使用5号字体)
18. 菜单应采用“常用--主要--次要--工具--帮助”的位置排列。提供常用的菜单项,如“文件”、“编辑”,“查找”,“打印”等。对常用的菜单项提供快捷命令方式。快捷方式唯一。
19. 主菜单数目不太多时最好为单排布置。如果菜单选项较多,应该采用加长菜单的长度而减少深度的原则排列。菜单深度一般要求最多控制在三层以内。
20. 下拉菜单要根据菜单选项的含义进行分组,並且按照一定的规则进行排列,用横线隔开。一组菜单的使用有先后要求或有向导作用时,应该按先后次序排列。没有顺序要求的菜单项按使用频率和重要性排列,常用的放在开头, 不常用的靠后放置;重要的放在开头,次要的放在后边。对与进行的操作无关的菜单要用屏蔽的方式加以处理,如果采用动态加载方式——即只有需要的菜单才显示——最好。
21. 菜单前的图标不宜太大,与字高保持一直最好。主菜单的宽度要接近,字数不应多于四个,每个菜单的字数能相同最好。
22. 状态栏中的信息应该根据窗口的内容的变化而变化,如在初始状态时,系统有多少条数据,经过查询后状态栏的数据应该发生变化。
23. 滚动条的长度根据显示信息的长度或宽度及时变换,这样有利于用户了解显示信息的位置和百分比;拖动滚动条,检查屏幕刷新情况,并查看是否有乱码;单击滚动条和滚动条的上下按钮;用滚轮控制滚动条;
24. 如果系统的模块较多,较深,经常会多级菜单,最好在窗口上加上导航条,以方便用户可以快速返回。
25. 窗口中的数据内容能否用鼠标、功能键、方向键和键盘访问,比如复制数据?
26. 如果使用多任务,是否所有的窗口被实时更新?
27. 多次或不正确按鼠标(或者键盘)是否会导致无法预料的副作用,比如窗口关闭?
四.按钮测试
1. 在同一窗口中实现某一功能的按钮是唯一的。
2. OK按钮总是在上方或者左方,而Cancel按钮总是在下方或右方。
3. Cancel按钮的等价按键通常是Esc,而选中按钮的等价按钮通常是Enter保持一致。
4. 测试按钮能否正常的实现功能,常用按钮的功能为:
OK:接受输入的数据或显示的响应信息,关掉窗口
Cancel:不接受输入的信息,关掉窗口。取消时最好给予提示,尤其时有大量输入的窗口。
Close:结束当前的任务,让程序继续进行;关掉数据窗口
Help:调出程序的帮助信息
Save:保存数据,停留在当前窗口。如过保存耗时长的话,最好显示类似沙漏,进度条之类的提示。注意验证能否重复保存。如在IE中由于网速慢而导致的重复保存。
Add:新增记录。新增的记录必须排在首页首行。提交失败后必须保留用户已输入的内容,以便再次提交。提交时需对主要标识字段进行重复值、空值(空格)判断。
Update/Edit:修改/编辑记录。如界面存在复选按钮,勾选多条记录进行修改时,需给予只能对一条记录进行修改,默认为第一条的提示信息。修改时加载的内容都为该记录的实际内容,而不再为默认值。修改完成后必须回到原记录所在位置,且刷新显示修改后的值。提交失败后必须保留用户已修改的内容,以便再次提交。在查询条件下修改返回后如不满足查询条件则不显示。需对主要标识字段进行重复值、空值(空格)判断。
Delete:删除记录。在删除之前必须有确认删除的提示信息。删除成功后刷新不显示被删除的记录。删除成功后返回到原记录所在页面;而当原记录所在页不存在时,则返回上一页。当被删除的记录与其它记录存在关联时,应给予不允许删除及更明细提示等信息。针对大批量的删除应提供全选复选框,方便用户删除。
Search:查询记录。每次查询应显示返回的结果数。每次查询应定位到首页。保留前一次的查询条件。当查询条件较多时,需配以重置按钮。当未查询到任何记录时,需给予未查找相关记录的提示信息。除用户明确要求不需要外,需提供模糊查询及组合查询功能。当查询返回的结果大于默认的一页大小时,最好采用分页或者根据系统默认或用户定义的一页显示的记录数量来分页。如有多页,需要提供首页,下一页,上一页,尾页和跳至功能。每页的记录不能重复,但也可以根据用户需要显示上一页的最后一条数据。
Reset:重置。应回到打开窗口时的最初状态。多次点击是否还能正常显示。
Return:返回。如果一个窗口或页面不能通过菜单,工具栏到达,而是必须通过前一个窗口完成才到达,应提供返回按钮或导航条让用户可以返回。
5. 如果点击按钮后还需要用户的进一步的操作,按钮的名称应加上省略号。如Browse。。。
6. OK/Cancel/Apply/Help键的排放最好遵从Windows的标准排放。
7. 按钮最好都给予浮动提示,特别是图片按钮,可以避免由于网络太慢而导致的太长时间不能往下操作。
8. 在某种状态(比如文本可编辑状态)下,点击其他地方的按钮,弹出的框,移动到某个位置,会不会出现不可点击的情况? 某个获取数据的按钮会不会获取数据失败?
9. 在与服务端连接发生断开的时候,相关的交互按钮有没有及时置灰?
五.对话框,消息框测试
1. 对话框/消息框的缺省<Enter>键应该设置在OK按钮上;对话框/消息框的缺省<Esc>键应该设置在Cancel按钮上。
2. 一般来说重要的或复杂操作成功后应该给予提示,根据系统的特性选择弹出信息框或文字显示。需要后续操作的操作在成功后应给予提示。
3. 非法的输入或操作应给出足够的提示说明。
4. 对可能造成数据无法恢复的操作应该给予确认信息,给用户放弃选择的机会。如删除操作。
5. 提示信息不宜太长,宽度不能超过当前窗口的1/2;当超过此比例时,请视具体情况进行换行。有多行提示信息的,请选择对齐方式(一般为左对齐)。
6. 静态文本标签一般采用左对齐,这样显得更有条理且易于浏览。 静态文本标签一般置于相关控件的左边,有时选项过多过长时放在上面。
7. 复杂或带有专业性的操作或输入最好在输入项下面给予提示。
8. 提示信息不宜太长,宽度不能超过当前窗口的1/2;当超过此比例时,请视具体情况进行换行。
9. 通用对话框控件,如Open…,Save As…,Color…,Fonts…,Print…,Page SetUp…等调用系统的对话框只需要是否调用正确,能否实现正常功能就可以了,里面的具体功能可以不用测试。
10. 消息框中的图标必须根据需要选择正确的使用,一般来说 X 表示有很重要的问题需要提醒用户;? 增亮没有危险的问题; ! 强调警告用户必须知道的事情; i 一般信息,可以使乏味的信息变得有趣。
11. 正在进行的操作提示框应使用省略号,如“删除中。。。”。
12. 对话框标题文本中不要出现省略号。如选择"打印选项..."命令结果而显示的对话框的标题应该为"打印",而不是“打印。。。”。但是,表示命令正在执行过程中菜单对话框(如"连接到Internet..."对话框)是一种例外情况。
13. 对于耗时的操作都应给出类似等待光标、进度表或其他的可视反馈。用户可以取消长时间的操作。如果可以取消未完成的操作,那么将按钮标记为"取消",否则将按钮标记为"停止"。
六.信息处理类测试
下面将文本框(Text Box),列表框(List Box),组合框(Combo Box)、下拉列表框(Drop-down List Box),复选框(Check Box),单选框(Radio box)/(option box),选项框(Option box)、滑动条(Slider)、 旋转按钮(Spin Button)等都作为信息处理类来统一总结。
1. 窗口/屏幕上的每一个字段都应有相应的标签。
2. 根据文本框可以接受的类型测试文本框:
1)输入正常的字母或数字(正整数,负数,0,小数等)
2)输入已存在的信息
3)输入超过允许长度的字符或边界数字
4)输入空白,空格,标点,符号
5)输入不同类型或不同日期格式的数据
6)复制/粘贴等操作强制输入程序不允许的输入数据
7)输入数据库或特殊字符集,例如NULL及\n等
3. 测试文件选择框的正确性。
1)使用空文件
2)只有空格的文件
3)不同类型的文件
4)同名文件或内容相同名称不同的文件
5)超大文件等
4. 测试强制性字段的正确性。强制性字段必须用红色的星号*标识,最好是必填项没有输入时,在光标移走时在相应的文本框后显示需要用户输入的红色信息。一般也可以在提交时用弹出消息框提示未填的必填项,关闭消息框后必须停留在第一个待输入的文本框中。
5. 每一个新窗口/屏幕中,光标默认停留在第一个待输入的文本框中。
6. 一般下拉框中应显示一个默认值,列表框中高亮度显示一个默认值。如果不需要默认值时,一般默认值未“请选择。。。”。
7. 一般来说系统应记忆以前输入或选择的信息,但是当涉及安全时,最好不要保留用户的信息。有些地方可以使用复选框让用户决定是否要保留信息。如登录界面。
8. 对输入信息类型有限制的文本框应在输入非法值后给予提示,对于日期型的输入框,最好在标签上就给予提示
9. 当输入的内容达到了字段的长度限制时,一般应控制不允许再输入,或者在提交后提示具体的允许输入的长度,而不是自动截断。
10. 系统中不允许的非法字符,最好是在输入时不允许输入,或在提交时给予具体系统不允许的非法字符列表提示。(如’、”、<、<>)
11. 正确使用复选框或单选框。如果结果只有一个的,则使用单选框,如性别。验证单选按钮不能同时选中只能选中一个,而可以选择多个复选框。
12. 一组单选按钮在初始状态时必须有一个被默认选中,不能同时为空。
13. 分别测试多个复选框可以被逐一选中;同时选中,部分选中;都不被选中。
14. 通过输入数字或用点击上下箭头来测试旋转按钮,测试其自动循环性,如范围为(0~999)先输入为999,在点击向下键,看是否会跳到0。输入字符或超过边界的数值,系统应该提示错误且重新输入;
15. 验证列表框中的条目内容显示正确;允许多选的列表框,要分别检查shift和ctrl选中条目情况
16. 避免使用水平滚动条,因为它会使项目阅读起来比较困难。解决的办法有:尽量使用垂直滚动条、加宽窗口、减小文本的宽度,或者使文本自动换行等。当然,如果确实需要,还可以使用水平滚动条。
17. 全选框勾中时应该选中当页所有记录,去掉当页某个记录的勾选,则全选也不选中。翻页后,自动去掉已勾选的记录及全选的勾选。
18. 复选框可以通过Space可以控制选中/不选中
19. F4, Alt+down或alt+up控制combobox打开和关闭
20. 对于combobox,Escape键等同于Cancel,Up/down箭头按钮控制向上或向下,Shift+up和shift+down可以多选,Ctrl实现多选;
七.测试工具
下面这个链接列举了19款GUI测试工具开源软件,如有需要,可以看看:
http://www.oschina.net/project/tag/408/gui-test-tools
下面这篇文章很好地介绍了如何选取GUI测试自动化工具,可以看看:
http://www.cppblog.com/lauer3912/archive/2011/07/19/151351.html?opt=admin