Ⅰ.18.1 如何存储和定位共享脚本和共享数据

来源:互联网 发布:淘宝震动棒买家秀图片 编辑:程序博客网 时间:2024/05/16 09:47

每个测试案例包含一个默认的测试脚本文件test.py(Python)(对于JavaScript叫test.js,Perl是test.pl, Ruby是test.rb,Tcl是test.tcl),依赖于test suite设置的脚本语言。

当创建test suites,通常这些测试案例需要一些通用的功能或者共用的数据。Squish使得创建单独的脚本文件成为可能,这些脚本文件包含共用的功能,并且可以根据需要用于所有的测试案例。Squish也使得创建和导入测试数据成为可能,这些测试数据可以被一个test suite中的任意一个测试案例分享。对于测试数据,Squish提供两个选择:一个特定测试案例的测试数据,和可以被一个test suite中的任意一个测试案例分享的测试数据。对于测试脚本,Squish提供了三种选择:一个特定测试案例的测试脚本(除了test.*文件),可以被一个test suite中的任意一个测试案例分享的测试脚本,以及从Squish 4.1开始可以被任意test suite中任意测试脚本共享的全局测试脚本。(全局脚本是一个先进的特性,不推荐新手使用。)

为了方便解释,假设我们有一个test suite在一个叫myapp_suite的文件夹中。进一步假设在这个test suite中有两个测试案例在文件夹 myapp_suite/tst_case1 和 myapp_suite/tst_case2中。如果我们使用Python脚本语言,第一个测试案例的文件名是myapp_suite/tst_case1/test.py,对于其他的脚本语言对应的测试案例的名字显而易见。

做出以上假设后,如果我们想为第一个测试案例存储一个特定测试案例的数据,必须存储在myapp_suite/tst_case1/testdata文件夹下,例如myapp_suite/tst_case1/testdata/case1_data.csv。如果我们想存储一些这两个测试案例共享的测试数据(以及其他的接下来将创建的测试案例),必须存储在myapp_suite/shared/testdata文件下。这些细节对于命令行使用者很有用,但是如果你使用Squish IDE,没有必要记住这些目录结构,因为Squish 可以创建和导入测试数据并且将它们存储在合适的位置,并且在脚本中只使用文件名(不带路径)来访问测试数据。

忽略测试数据是否是特定测试案例的或是否是整个test suite共享的,我们总是使用相同的技术来访问数据:调用testData.dataset函数,将测试数据的文件名(不包含路径)作为参数,该函数获取一个array或者tuple的引用(依赖具体的脚本的语言)用以访问数据(使用testData函数)。(通过给出一个带路径的文件名,也可以在任何地方访问测试数据,但是我们推荐将测试数据存储在相关的test suite或者测试案例中。)

如果我们想有一个或更多附加的脚本来整洁的划分功能,或者为了简化我们的test.*测试脚本,我们可以创建附加的脚本文件。在之前的假设下,如果我们有一个额外的特定测试案例的脚本我们必须将它放在与test.* 相同的路径下,例如,myapp_suite/tst_case1/extra.py。如果我们有额外的可以被test suite的所有测试案例访问的功能,必须将附加的脚本放在test suite的共享脚本文件夹中,如,myapp_suite/shared/scripts/common.py。从Squish 4.1开始,如果我们想有一个可以被任意一个test suite中的任意一个测试案例访问的功能,我们可以添加一个全局测试脚本到Global Scripts视图中。(Global Scripts视图一般在Squish窗口的右边)

忽略测试脚本是否是特定测试案例的,或者是否是被整个test suite共享的,或者是否是对于所有test suite是全局的,我们常常使用相同的技术来访问脚本的功能:我们调用source函数,将脚本的名字(包含路径)作为参数。通常我们通过getfile函数获取名字,该函数第一个参数是‘scripts’、第二个参数是脚本的名字(不带路径)——这个方法对特定测试案例的脚本和被test suite中任意测试案例共享的脚本测起作用,同样对全局共享脚本起作用。注意到在Ruby中,我们使用require函数代替source。

为了创建一个可以被一个test suite中任意测试案例共享的脚本,在Squish IDE的Test Suites窗口中的Test Suite Resources模块中,点击New Test Script File工具条按钮。将会创建一个新的空的共享脚本叫做script_1.py(或script_1.js,对于其他的语言,以此类推)。可以重命名这个脚本,或者立即输入一个新的名字,或者以后通过点击它弹出上下文菜单使用Rename选项实现。(下面截屏中重命名的共享脚本名叫common.py,因为它包含公用功能。)


The Squish IDE with the New Test Script File toolbutton tooltip visible

一旦共享脚本重命名,点击(或双击,依据平台和设置而定)以在Editor视图中展示它。可以编辑脚本添加一些必要的共享功能。

也可以(尽管不常见)添加只用于一个特定测试案例的共享脚本。操作方法是,在Test Suite窗口内Test Case Resources 模块中点击 New Test Script File工具条按钮。当然了我们可以往测试套件(和测试案例)中添加任意多个共享脚本文件。

如果你想创建一个全局共享脚本,即一个可以被任意测试套件中的任意测试案例访问的脚本,那么就打开或者点击Global Scripts视图窗口,并在此窗口中添加测试脚本。


Import Squish Resource 对话框

如果你想导入一个已经存在的脚本到一个测试套件(测试案例)的共享脚本的文件夹下,点击File->Import Test Resource。然后会弹出Import Squish Resource 对话框,输入脚本文件的名字来导入(或者使用Browse按钮选择)。然后设置Import As 组合框为‘Script’。如果想让测试套件中的所有测试案例(而不仅仅是当前展示的测试案例)共享一个脚本,就勾选Test Suite 单选按钮中的'Copy the file into the Test Suite for all Test Cases to share'。(因为通常在所有的测试案例之间共享脚本更方便,所以推荐点击这个单选按钮。)现在点击Finish按钮,导入的脚本在Squish中就可用了。

对于命令行使用者:

—— 不适用Squish IDE 也可以创建共享脚本。首先,在控制台,将路径改为测试套件的路径。然后创建一个新的子路径名为shared,已经存在了就不用创建。将当前路径改为shared,然后创建一个新的子路径为scripts,如果存在就不用创建。现在使用编辑器或者IDE来创建这个共享脚本并将它保存到测试套件的shared/scripts路径下。如果该脚本已经存在了,只需要将它拷贝到这个目录下即可。如果想添加一个全局共享脚本,只需要创建或者拷贝脚本到你想使用的路径下(或其中一个路径下)。

如何在测试套件之间共享脚本:

——有这样的情况:一些共享功能可能不仅在一个测试套件中有用、而且在大多数或者所有的测试套件中也有用。Squish使得所有测试套件访问全局共享脚本成为可能。通过创建一个或更多路径(放在任何位置都可以)来存放共享脚本,然后告诉Squish这个路径,或者通过Global Scripts视图窗口注册(通过该窗口可以将它们添加到paths.ini文件中),或者设置SQUISH_SCRIPT_DIR环境变量为一个或更多路径。例如,在Unix环境下,使用bash shell,导出 SQUISH_SCRIPT_DIR=$HOME/tests/shared_scripts.

一旦创建好了一个共享脚本,任何特定测试案例的脚本都可以使用它。注意,虽然共享脚本不总是使用特定语言导入机制导入的,毕竟,不是所有的语言都有这个机制,例如,JavaScript就没有。相反的Squish API提供了必要的函数。

定位一个共享脚本文件(或共享数据文件)的标准的方法是使用findFile函数。第一个参数是文件类型,它指定共享脚本应是‘scripts’。第二个参数是脚本的文件名(不带路径)。这个函数将会搜索所有的Squish使用的标准位置,并返回一个包含全路径的文件名。

一旦我们得到了共享脚本的全路径,将将它包括到测试案例的脚本中。通过使用source函数评价共享脚本即可实现——这将意味着就像共享脚本的文本在当前测试案例中source函数的位置运行一样。完成之后,共享脚本中创建的所有对象——尤其是类和函数——在测试案例的脚本中变得可用。

下面有一个例子,例子中我们共享一个脚本文件叫address_utility.py (或address_utility.js等,根据使用的脚本语言而定),因此我们可以访问其中的任一个函数——在这个例子中,insertDummyNamesAndAddress函数——添加一些名字和地址到addressbook AUT中以备测试用。

def main():    ...    source(findFile("scripts", "address_utility.py"))    insertDummyNamesAndAddresses()    ...
这里我们导入address_utility.py(或者相似的)脚本,该脚本中定义了一个insertDummyNamesAndAddresses函数,后面要用到这个函数。

对于脚本语言如Python支持导入,可以使用语言的标准导入机制。然而Squish的方法反而更方便,因为在大多数情况下,我们的共享脚本只与我们的测试相关。一般地,对于共享脚本最好使用Squish的source函数,但是对于导入标准模块最好使用特定语言的机制(如Python的import 和Perl的use)。在Ruby中,使用标准的require函数代替Squish的source函数。

正如我们制定一个测试案例脚本,我们也可以指定特定测试案例的数据文件。这种文件存储在测试案例的testdata路径下。然而,在一些情况下,我们想共享测试数据以使一个或对个测试案例可以访问它。在这种情况先我们将测试数据存储在测试套件中shared/testdata路径下。

可以通过Squish IDE的导入文件功能将测试数据添加进来——Squish可以读取.tsv(以tab间隔开值的格式),.csv(以逗号间隔值的格式),和.xls(微软Excel电子表格式,而非.xlsx格式)。或者我们可以用终端创建路径,然后将测试数据拷贝到该目录下。这些技术用于共享测试数据,是否使用Squish IDE或者手动操作,对于添加共享脚本都是一样的,只要我们使用合适的testdata路径即可(不是scripts路径)。

尽管顶层路径结构必须跟着我们描述的,,那种结构中——即,在testdata路径下——你可以任意的创建子路径以及构造成你期待的样子。

使用findFile函数可以获取测试数据,只有此时第一个参数必须是‘testdata’,第二个参数是你想访问的测试数据文件的名字。实际上我们不需要为测试数据使用findFile函数;相反的我们使用testData.dataset函数,使用Squish的testData API访问数据,下面将会讲到。

0 0