![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Squish
文章平均质量分 61
se-tester
这个作者很懒,什么都没留下…
展开
-
第Ⅰ部分 Squish教程
这篇Squish用户指南解释了所有Squish最常用的特性,提供了一些如何最好的使用Squish的示例。该篇指南主要致力于Squish的脚本支持,不同的脚本语言支持,这里我们只给出Python的示例。许多示例展示了如何从实践上处理问题。Unicode UTF-8文件编码Squish IDE加载和保存的测试脚本(名字符合 test.*格式)都是以UTF-8编码格式保存的。所有的Squis原创 2015-11-20 15:05:16 · 9161 阅读 · 1 评论 -
Ⅰ.14 如何处理测试脚本发生的异常
Squish的一些函数失败时会产生一些可以捕捉到的异常。我们可以写出可以捕捉这些异常并做出响应的测试脚本——例如,在测试 log 中记录测试失败信息。不管函数异常是什么,异常处理机制对于每个脚本语言是一致的,因此我们只需要看一个如果实现的例子就明白了:try: checkBox = waitForObject(":Make Payment.Check Signed_QCheckBo原创 2015-12-04 10:47:01 · 865 阅读 · 0 评论 -
Ⅰ.2.2 如何调用Qt对象的函数
使用Squish有可能调用任何Qt对象的每个公开的函数。另外也有可能调用Qt提供的静态函数。下面的例子中我们改变button的text,在上一部分中使用QButton::setText函数查询该button。button = waitForObject(":Address Book - Add.OK_QPushButton")button.setText("Changed Butto原创 2015-11-17 08:54:41 · 2257 阅读 · 0 评论 -
Ⅰ.2.6.3.4 如何测试 QTableViews(QAbstractItemModels 和 QItemSelectionModels)中的 Items
Table views,像其他的view 类一样,展示model中数据而不是自己保存数据。因此执行测试table展示的数据的关键是获取table view的model,对model的数据进行操作。下面举个例子展示如何操作,这个例子与list view的例子比较相似。Example 6.10 The tst_tableview Test Scriptdef main(): start原创 2015-11-17 17:58:59 · 932 阅读 · 0 评论 -
Ⅰ.2.6.3.2 如何测试 QListViews(QAbstractItemModels 和 QItemSelectionModels)中的 Items
view 类本身不保存任何数据,相反的它们可以显示model中数据。因此如果我们想要访问与一个view相关的所有items,我们必须首先获取该view的model,然后遍历model中的items。而且,在一个选择器model中,选择器独立于model。这是因为选择器事关视觉交互,不会影响底层数据。(当然用户可以选择然后改变所选内容,但是从数据model看来,这种改变简单的应用于一个或更多item原创 2015-11-17 16:09:54 · 964 阅读 · 0 评论 -
Ⅰ.2.4 如何使用Qt Convenience API
除了标准的Qt API之外Squish提供了脚本API,这个部分描述了这些脚本API使执行普通用户行为更容易,例如点击一个button或者激活一个菜单选项。下面是一些如何使用这些API的例子。第一行展示了如何点击一个button,第二行展示了如何双击一项(例如,一个list、table或tree中的项——尽管这里我们的点击的项是在table中的),最后一个例子展示了如何激活一个菜单选项(这里是原创 2015-11-17 08:57:20 · 859 阅读 · 0 评论 -
Ⅰ.2.6.6 如何测试Graphics Views、Graphics Scenes 和 Graphics Items (Qt 4)
Qt 4.2介绍了QGraphicsView、QGraphicsScene 和 QGraphicsItem及其子类的的graphics/view 结构。两个附加类被添加到Qt 4.4中,另两个被添加到Qt 4.6中。对于测试使用该结构的应用程序,Squish提供了所有支持。这个部分我们将测试一个简单的示例应用程序(example/qt/shapes),该应用程序使用一个图形视图作为它的主窗口区原创 2015-11-18 16:10:42 · 701 阅读 · 0 评论 -
Ⅰ.2.6.3.1 如何测试 QListWIdgets 中的 Items
遍历list widgets中的所有items是很容易的,本文介绍如何获取它们的texts以及检查它们的checked和selected状态。Example 6.6 The tst_listwidget Test Scriptdef main(): startApplication("itemviews") listWidgetName = "{type='QListWid原创 2015-11-17 15:57:16 · 1100 阅读 · 0 评论 -
Ⅰ.2.1 如何访问Qt对象
正如我们在Squish使用指南—如何找到并访问对象一文中了解到的,可以调用waitForObject(或findObject寻找隐藏的对象)来获得一个拥有特定的real name或者symbolic name的对象的一个引用。一旦获取这个引用,我们可以用它与对象交互,访问对象的属性或者调用对象的方法。这里有一些访问QRadioButton的例子,如果未检查到它,可以点击它来检查,因此最后应该检原创 2015-11-17 08:52:33 · 1721 阅读 · 0 评论 -
Ⅰ.4 如何使用测试语句
这个部分讨论Squish提供的用以执行测试的API,测试完会得到相应的结果。验证点也用这个测试API,更多的关于验证点的说明将在在17章中介绍。比较两个值并将比较的结果写入测试日志,使用test.compare 函数。简单的检查某些值为真(即检查一个布尔值),使用test.verify 函数。在某个点将一些中立的信息写入测试日志中,使用test.log 函数。将一条警告写入测试日志中使用tes原创 2015-11-20 14:46:46 · 868 阅读 · 0 评论 -
Ⅰ.2.6.2 如何测试Stateful 和Single-Valued Widgets(Qt 4)
这一部分,我们将会理解如何测试example/qt/paymentform例子程序。这个程序使用许多基本的Qt widgets包括 QCheckBox,QCombox,QDateEdit,QPushButton,QRadioButton,和QSpinBox。作为这里所覆盖的例子的一部分,我们将会展示如何检查单个widgets的值和状态。我们也将证明如何测试一张表的业务规则。The pa原创 2015-11-17 10:32:33 · 872 阅读 · 0 评论 -
Ⅰ.2.6.3.5 如何测试 QTreeWidgets 中的 Items
tree widgets (tree views中显示的models)比list和table widgets难测试一些。这事因为trees有一个比较复杂的基础结构。这个结构本质上是这样的:一系列的行(顶层items),每行有一个或多个列,每列有自己的子items。每个子item有一个或多个列,并且有自己的子items,以此类推。遍历tree的最简单的方法就是使用递归程序(即,调用自己的程序),原创 2015-11-18 09:33:15 · 598 阅读 · 0 评论 -
Ⅰ.2.6.4 如何测试 Table Widgets,以及使用外部数据文件(Qt 4)
这个部分,我们将了解如何测试 csvtable 程序。这个程序使用了 QTableWidget 来展现一个 .csv(以逗号间隔开值)文件的内容,它提供了基本的处理数据的功能——插入行、删除行、编辑格子 和交换列。这个测试使我们了解了如何导入测试数据,处理数据以及比较QTableWidget展示的值和其期望值。因为 csvtable 程序是一个主窗口风格的应用程序,我们也会学习如何测试menu选项原创 2015-11-18 13:58:44 · 797 阅读 · 0 评论 -
Ⅰ.2.9.如何测试支持国际化的Qt AUT
Qt 支持创建国际化的应用程序。意思就是,举个例子,开发者可以创建一个Qt应用程序,在使用英语语言的地方(如U.S)该程序可以在menu选项和对话框标签上展示English文本,在用德语的地方显示German,以此类推。如果Squish 使用了AUT对象属性——包括它们用来识别对象的文本来识别对象,当谈到这种测试的时候,国际化的AUT可能会引起问题。因此,举个例子,File 菜单项将会有下一个原创 2015-11-20 10:17:59 · 754 阅读 · 0 评论 -
Ⅰ.18 如何创建和使用共享数据和共享脚本
这个部分讨论如何将测试拆分成多个文件,以及如何共享、访问和使用共享脚本和共享数据文件。当你有一个功能适用于多个测试案例时,理想的做法就是共享脚本。然而,如果你主要从草稿创建测试脚本,并且它们有相同的基本结构,你会发现创建测试脚本模板以省去重复的拷贝粘贴是很方便的。Ⅰ.18.1 如何存储和定位共享脚本和共享数据Ⅰ.18.2 如何实现Data-Driven测试Ⅰ.18.3 如何在AUT中使用测试数据原创 2015-12-14 09:52:02 · 564 阅读 · 0 评论 -
Ⅰ.18.2 如何实现Data-Driven Testing
数据驱动的测试是一种将测试数据(输入,和期望输出)从只包含测试逻辑的测试脚本代码中区别开的方法。对于测试数据正常的实践是从一个文件或数据库中读取一项或记录,对于测试脚本使用数据来测试AUT,然后与期望值比较结果。这种方法的一个好处是它使得修改测试而不修改测试案例的代码成为可能——相反的我们只是添加更多的测试中将要读取和处理的数据。对于那些有编码经验和无编码经验的测试工程师,它可以分离这些工程师原创 2016-01-05 15:52:01 · 1725 阅读 · 0 评论 -
Ⅰ.15 如何修改Squish函数
一些情形下修改Squish的函数很有用——例如,在测试log中记录每个对特定函数的调用。一些脚本语言支持相同名字的函数替换其他的函数,因此我们可以在Squish中利用这种机制。但是记住大多数Squish的函数在调用了startApplication函数之后才可访问,因此任何修改必须在那之后进行。假设,例如,我们想改变clickButton函数以使每次调用了该函数都往测试日志写信息。下面是实现的原创 2015-12-04 13:36:23 · 1250 阅读 · 0 评论 -
Ⅰ.6 如何创建和使用Synchronization Points
当Squish纪录脚本时,事件recorder必须确保同步了AUT和测试脚本。实现此功能的方法是recorder自动的插入snooze语句到脚本中。这些语句强制脚本等待一定的时间(该时间可能是个小数如2.5秒)。有必要确保脚本回放的速度和纪录时的速度一致。例如,如果用户等待弹出某个窗口,脚本将等待同样的时间。阻止Squish过快的运行AUT是很重要的,这样AUT的toolkit才能跟得上。使用原创 2015-11-21 20:43:32 · 765 阅读 · 0 评论 -
Ⅰ.5 如何使用事件句柄
在Squish测试脚本中有可能要对AUT内部发生的事件做出反应。这可能是有用的,例如,当对话框意外出现时 比如一个错误消息提示,提供一个测试脚本来响应它。可以通过注册一个事件句柄函数来实现该功能,当一个指定的对象、一个指定类型的对象或者任何对象的事件发生时,调用句柄。事件句柄函数通过调用 installEventHandler 函数来注册。对于一个应用于所有AUT对象的句柄,即全局事件句柄,只原创 2015-11-20 16:05:07 · 1283 阅读 · 0 评论 -
Ⅰ.2.8 如何做自动压力测试(Automatic Stress Testing)
这个部分解释了如何使用Squish为应用程序实现完全的自动化压力测试。这里实现的压力测试的类型叫做“Monkey Testing”。这个名字来源于这样的想法:如果你有一屋子的猴子和打字机,不限制时间和替代品,它们将最终打出所有的伟大的文学著作。Qt 和 JavaScript基于JavaScript 测试套件,目前Squish提供支持Qt 工具包的 monkey testing。所有的m原创 2015-11-19 11:36:19 · 1691 阅读 · 0 评论 -
Ⅰ.2.6.8 如何测试QTable (Qt 3)
一个QTable由那些可以使用QTable::item函数返回的item组成的。例如,为了测试一个text中包含“Kiwi”的cell是在第五行第四列(使用基于0的索引),可以使用下面的代码: table = waitForObject(":fruit_QTable") cell = table.item(5, 4) test.compare(cell.text(),原创 2015-11-19 11:03:07 · 581 阅读 · 0 评论 -
Ⅰ.2.6.5 如何测试QAction、QMenu、以及QMenuBar(Qt 4)
如果我们想检查一个菜单项的属性,可以使用Squish IDE插入验证点,或者手写代码。这里我们介绍如何写代码。QMenus(QWidgets 也是如此)有一份QAction 对象列表。我们可以获取这个列表,使用QList API 遍历它的actions,对于每个action我们可以查询或者设置它的属性。首先我们看一个访问一个action的属性的例子,然后看一下该例依赖的自定义函数 getAct原创 2015-11-18 15:58:01 · 1134 阅读 · 0 评论 -
Ⅰ.2.6.3.6 如何测试 QTreeViews(QAbstractItemModels 和 QItemSelectionModels)中的 Items
tree views使用一个tree结构的model,因此遍历所有model的items的最容易的方法是使用一个递归程序,就像我们队tree widgets操作的那样,下面是例子:Example 6.12 The tst_treeview Test Scriptdef checkAnItem(indent, index, treeView, model, selectionModel):原创 2015-11-18 11:00:49 · 862 阅读 · 0 评论 -
Ⅰ.2.6.7 如何测试QListView (Qt 3)
这个部分介绍了如何验证一个Qt 3 list view widget(事实上是个tree widget)包含了我们所期望的items。一种方法是遍历list view中的所有items,检查它们的每个text。例如,如果我们有一个 list view,该list view应该有一个最高层的名字为“Apple”的item,它有两个子item,text分别为“Orange”和“Banana”,我们原创 2015-11-19 09:41:36 · 629 阅读 · 0 评论 -
Ⅰ.2.6.3.3 如何测试 QTableWidgets 中的 Items
在这个部分我们将看一看两个例子。第一个例子展示了如何设置table的rows 和 columns的数字;以及如何使用items填充table——包括使items变成可点击的和可选的;以及如何隐藏rows。第二个例子展示了如何遍历table中的每个item(跳过异常的rows),以及在Squish log中打印item的text和state信息。(这部分代码取自SQUISHROOT/examples原创 2015-11-17 16:56:51 · 698 阅读 · 0 评论 -
Ⅰ.2.5 如何使用Qt Signal Handles
注意:Qt-specific Squish这个部分只应用于Qt版的Squish,因为它关系到Qt的特定功能。使用installSignalHandler函数可以跟踪UI界面(或任何AUT QObject)widgets发出的Qt signals。应该在AUT启动之后调用installSignalHandler函数,传递参数:一个已经存在的AUT对象的名字、一个信号签名和一个handle原创 2015-11-17 08:58:54 · 885 阅读 · 0 评论 -
Ⅰ.12 如何在脚本中与文件和环境交互
除了Squish提供的特定测试功能,测试脚本也可以使用脚本语言自身提供的原生的功能(包括标准库)。这节饿哦们将会展示如何使用原生的功能从一个外部文件中读数据,将数据写入一个外部文件中,检查一个外部文件是否存在,删除一个外部文件。另外,我们将会理解如何比较两个外部文件,以及如何读取脚本运行期间设置的环境变量。Python-specificPython例子没有战士任何 import 语句,但当原创 2015-11-24 14:57:46 · 558 阅读 · 0 评论 -
Ⅰ.17 如何创建和使用Verification Points
verification points是自动化测试中一个核心特性。为创建一个verification point,我们必须首先运行AUT这样它可以运行到我们想验证的状态。这是通过使用verification points实现的——这些verification points验证对象属性值、截屏或者AUT其他的可测的方面是否是我们期望的值。使用Squish API可以用纯代码创建verificat原创 2015-12-04 14:58:21 · 895 阅读 · 0 评论 -
Ⅰ.7 如何从一个测试脚本中测试多个AUT,使用ApplicationContext
通常,为每个测试套件指定单个被测试的应用程序。然后通过每个测试案例执行和访问这个AUT。所有的教程展示了单个测试套件方法或单个AUT方法,但是事实上,有可能开始多应用程序以及访问,以及在单个测试套件内测试多个应用程序。 这使得测试不同应用程序的交互或者同一个应用程序的多个实例的交互。例如, 能测试多个应用程序对于测试client/server系统是有必要的。无论何时开启一个AUT将会创建一个对原创 2015-11-21 22:23:55 · 1392 阅读 · 0 评论 -
Ⅰ.10 如何创建测试失败和出错时的自动化截屏
为了能更容易的追踪测试失败和出错的原因,可以告诉Squish做一个截屏,无论测试如何失败或者出错。然后我们可以查看失败或者出错时完整的桌面截图。当谈到无人监管的自动化测试期间调试测试失败和出错时这个特别有用。为了机会这个特性,有必要设置全局设置对象,logScreenshotOnFail 和 logScreenshotOnError 属性设为true(或者True 或者1,依据使用的脚本语原创 2015-11-23 14:47:39 · 1126 阅读 · 0 评论 -
Ⅰ.8 如何实现原生浏览器对话框、ActiveX以及更多项的自动化
Squish主要是设计用来支持自动化的操作网页的DOM,DHTML和HTML元素。但是为了完整的测试一个网页应用程序,通常有必要使对其他类型组件的操作自动化,也包括对话框——这个部分展示了用于执行这种测试的技术。Ⅰ.8 .1 使原生浏览器对话框自动化(登录,验证,等等)许多网页应用程序需要一个登录,该登陆使用了浏览器的原生身份验证对话框,或者作为开启进程的一部分接受验证。Squish让原创 2015-11-23 10:49:15 · 1207 阅读 · 0 评论 -
Ⅰ.9 如何创建查询用户输入的半自动化测试
Squish测试中最普通的用例就是完全自动化——Squish用于记录一个测试(或者我们手动写一个测试),然后回放该测试,以及报告结果。但是在一些情况下我们可能想创建一个半自动化测试,该测试需要测试员提供一些输入。例如,当测试一台硬件设备上的一些软件时,我们可能想询问用户设备的状态是否以预期的方式改变了。例如,想象我们想为一些与打印机相关的软件写测试。测试运用该软件,其中一个结果应是打印机打印一原创 2015-11-23 14:30:23 · 713 阅读 · 0 评论 -
Ⅰ.2.7 如何测试Qt Application中的非Qt Widgets
支持Qt的Squish被设计用来支持Qt应用程序的Qt widgets自动化测试。然而,在一些平台,Qt 应用程序是使用Qt 和本地的widgets混合编译出来的,例如,在Windows上一个Qt应用程序除了使用Qt widgets还可能使用本地Windows对话框和嵌入的ActiveX widgets。幸运的是,Squish支持记录和回放键盘和鼠标对本地Windows 控件的操作。另外,使用原创 2015-11-19 11:24:17 · 648 阅读 · 0 评论 -
Ⅰ.2. 如何使用Qt API
Squish最强大的特性之一就是它在脚本中访问Qt API(以及AUT的API)的能力。这给了测试工程师很大的灵活性从而让他们在AUT中可以测试任何东西。使用Squish的Qt API有可能查找和查询到对象,调用方法,以及访问的属性和枚举类型。而且,Squish 4 自动识别Qt 的QObject和QWidget属性和slots。这意味着编译自定义的封装类型几乎是没必要的,因为应用程序开发者可原创 2015-11-13 13:50:30 · 1869 阅读 · 0 评论 -
Ⅰ.2.6.3 如何测试Item Views、Item Widgets 和 Models 中的Items (Qt 4)
这个部分我们将会理解如何迭代每个item,这些item存在于Qt的item widgets中(如,QListWidget,QTableWidget,和 QTreeWidget)、Qt的item views中(如,QListView,QTableView,和 QTreeView)。以及理解如何获取每个item的text、检查他的checked状态、是否被选取了。事实上,对于Q*View类我们访问基础原创 2015-11-17 15:29:58 · 1810 阅读 · 0 评论 -
如何在Windows上安装Django
该教程主要针对使用django的初学者。使用于Windows 7 和 8,对于其他版本,步骤将会更简单。1.安装PythonDjango是一款Python网页框架,因此需要安装Python。(1)Python下载地址:https://python.org/download/,下载一个最新的安装包,安装包名字类似python-3.5.0.exe 或者python-2.7.10原创 2015-10-16 17:05:08 · 1023 阅读 · 0 评论 -
Ⅰ.16 如何编辑和调试测试脚本
除了记录和编辑测试脚本的工具,Squish也为调试测试脚本和检查AUT内部对象提供了支持。调试器不仅用于查找和修复测试脚本中的bug,而且还有助于检查一个运行中的AUT时使用断点功能。Ⅰ.16.1 如何使用脚本调试器Squish IDE的脚本调试器允许我们在脚本中设置断点。这有助于我插入verification points,或者从一个断点前记录,将在后面讨论。一旦测试脚本在断点处停下原创 2015-11-25 11:18:36 · 1033 阅读 · 0 评论 -
Ⅰ.2.3 如何访问Qt枚举型
在C++中,有可能生命一些枚举型——这些名字代表了一些数字,使之富有意义和目的。例如,程序员会写label->setAlignment(Qt::AlignLeft);而不会写label->setAlignment(1);。因为前者更容易理解。(术语enumeration的缩写是enum,该教程中这两个我们都用)Qt定义了许多枚举类型,许多Qt的函数和方法使用枚举类型作为参数。就像使用枚举类型能原创 2015-11-17 08:56:06 · 4327 阅读 · 0 评论 -
Ⅰ.20 如何创建和访问应用程序的绑定
这一部分讨论Squish的一个先进并且强大的特性——如何创建提供应用程序绑定的包装套。自动动态绑定:从Squish4.0开始,已经加强了对Squish绑定的支持。对于Java和基于Qt的应用程序,Squish现在可以动态的创建包装套,它可以自动的为所有的标准库对象提供绑定,这些库对象供AUT使用,也为AUT自己的自定义类提供绑定。用Java的时候,甚至不是自动动态绑定的类可以使用Java的原创 2015-12-16 10:54:55 · 1101 阅读 · 0 评论 -
Ⅰ.18.3 如何在AUT中使用测试数据
到目前为止这个部分只讨论了在测试脚本中使用测试数据来创建数据驱动的测试。但是实践中出现了另外两个用例。一个用例是AUT读取测试数据文件。例如,假设我们正在使用addressbook AUT,想让它在测试脚本的开始加载一个名为customers.adr的文件,这样它就有了一个已知数据集来操作。这很容易实现,只需要将数据文件存储在测试案例所在的路径下即可,或者它的testdata路径——或者在测试套件原创 2016-01-05 15:53:11 · 1317 阅读 · 1 评论