本主题介绍如何提示 SOAtest 扫描 web 应用程序。然后可以对访问的页面执行静态分析,如执行静态分析中所述。
章节目录:
扫描测试是执行测试用例时抓取指定 web UI 的测试。若要配置 SOAtest 扫描 web UI,则如下添加扫描测试:
如果选择 FTP 或本地,请填写可用字段,然后才能完成配置。可以跳过以下选项。
在指定 FTP 源时,存在以下选项:
|
如果一个 URL 的用户名和密码都输入为 '*',那么 SOAtest 将首先尝试使用紧靠该 URL 之前、属于相同域的最近的 URL 所使用的相同凭据进行登录。如果该凭据没有用于此 URL,则 SOAtest 将打开域密码对话框,要求您输入正确的凭据。
.urls 文件的格式为:URL 在单独行上指定;如果为 URL 指定凭据,则它必须按照 url 的顺序放在同一行:url、username、password。url、user-name、password 以逗号分隔。如果三个中的任何一项存在逗号,则该项都必须放在一对双引号内。如果任何项包含双引号,则每个双引号必须使用另一个双引号进行转义,并且将所有项放在双引号内。例如, |
http://www.parasoft.com
可能拥有别名 parasoft.com
和 www.parasoft.com
。现在可以在测试套件或单个扫描工具上运行任何可用的测试配置。执行测试时,SOAtest 会快速浏览静态和动态页面,并至少加载它遇到的每个页面的一个实例。
如果选择了推荐的 HTTP 配置选项,并且您的站点包含表格,则 SOAtest 允许您使用表单输入对话框填充表单。如果在 SOAtest 加载您的站点时打开表单输入对话框,则请按照Populating Forms中所述将其完成。
本节介绍如何处理以下特殊的加载问题:
可以通过在允许的/限定的 URL 表中添加限制项和/或允许项来控制 SOAtest 可以加载哪些站点 URL 和忽略哪些站点 URL。
如果 URL 标记为受限制,则 SOAtest 将不会加载在扫描期间遇到的 URL。如果不希望 SOAtest 访问某些目录或文件,您可以将它们标记为受限制 URL。例如,如果您有一个输出页面,则您可能希望将其标记为受限制,以便它不会阻止加载其他页面或导致其他页面无效。SOAtest 在创建路径、使用虚拟用户使用站点等时,避免了受限制的 URL。如果站点有一个 Web 服务器资源,则可以在加载该站点之前指定受限制的 URL(如本节所述)。
如果 URL 标记为允许,则 SOAtest 将加载在扫描期间遇到的 URL。对于启用 URL 字段中指定的 URL,最底层文件夹 URL 模式自动添加为允许的 URL;该 URL 被称为允许的子文件夹 URL。此处使用的 http(s)://...用于允许或限制指定 URL 的 HTTP 和 HTTPS 版本。更多信息,请参阅URL Restriction Examples。
还可以指定其他允许的 URL。这对于配置 SOAtest 来加载相关站点而言十分有用。相关站点是链接到其中一个项目站点的任何站点,但没有与项目站点相同的主机名。例如,您的主要项目来源是 http://www.parasoft.com
,并且该站点链接到 http://forums.parasoft.com
和 http://www2.parasoft.com
,这两个站点都是当前项目的相关站点。如果希望 SOAtest 在当前项目上下文中遇到相关站点时自动加载,则需要将其指明为允许的 URL。
限制项和允许项都是在扫描工具的允许的/限定的 URL 表中指定的。在表中,使用符号 + 来标记允许项,使用符号 - 来表示限制项。允许项/限制项都区分大小写。
可以将限制项和允许项结合起来创建一个复杂的扫描方案。允许项/限制项按顺序处理,从表格顶部的条目开始,到表格底部的条目结束。
若要将条目添加到允许的/限定的 URL 表中:
*
”意味着任何字符组合。它适用于构造允许/限制 URL 表条目的任何组合方式。有关示例,请参阅通配符示例 。与允许的 URL 模式不匹配的 JavaScript 和 CSS 文件将不会在项目树中显示。然而,如果 SOAtest 需要访问这些文件来正确处理 Web 页面,则它将访问这些文件(即使它们不会被添加到该项目中)。 |
若要更改允许的/限定的 URL 表条目的位置,请选择要移动的条目,点击紧挨着允许的/限定的 URL 表的向上和向下箭头按钮,直到条目处于所需位置。
如需删除允许的/限定的 URL 表项,请选择要删除的表项并点击删除。
下面的例子解释了关于 http(s)://... 限制的一些细节:
http(s)://www.google.com/*
http://www.google.com/amazing_page.html
和 https://www.google.com/amazing_page.html
http(s)://
”在 URL 限制中除了在开头外没有意义。例如,不可能有以下的限制:http(s)://www.google.com/*
,并让其匹配 http://www.google.com/amazing_page.html
http(s)://
”区分大小写。因此,不可能有:HTTP(S)://www.google.com/*
,并让其匹配 http://www.google.com/amazing_page.html
http(s)://
”,而不是字符串的其他部分。例如,不可能有以下的限制:http://www.para(s)oft.com/*
,并让其匹配 http://www.parasoft.com/*
或 http://www.paraoft.com/*
下表显示了如何使用通配符来实现不同的目标:
若要匹配这个... | 使用类似这样的条目... |
---|---|
任何协议 | *www.parasoft.com/dir1/dir2/index.html |
HTTP 或 HTTPS 协议 | http(s)://www.parasoft.com/dir1/dir2/index.html |
域中任何页面 | http://www.parasoft.com/* |
最深子目录中的任何页面 | http://www.parasoft.com/dir1/dir2/* |
域中任何协议和页面 | *www.parasoft.com/* |
任何 index.html 的页面名称 | *index.html |
任何与‘dir’一词相关的链接 | *dir* |
任何链接 | * |
*.parasoft.com
将匹配 www.parasoft.com
和 articles.parasoft.com
。
*Parasoft*
将匹配 www.parasoft.com
、www.parasoft.net
、parasoft.com 等。
direc*ry/*
将匹配 directory/dir2
、direcHELLOry/dir2/dir3
和 direc12345fry/images
。
项目扫描和更新期间,每个可能的 URL 都与允许的/限定的 URL 表匹配,以确定是否应该访问 URL。确定 URL 是否应该访问的过程如下:
允许的/限制的 URL 表(如准备 SOAtest 在扫描期间限制和/或允许 URL 中所述)允许控制站点的哪些部分被扫描。例如,它允许在允许扫描的部分站点内将某些 URL 指定为“禁区”。或者,允许在不应被扫描的站点区域内对特定 URL 进行扫描。
URL http://www.dev.parasoft.com/products/dir/page.html
将匹配来自上表的以下 URL:
+ http(s)://www.dev.parasoft.com/* - http(s)://www.dev.parasoft.com/products/* + http(s)://www.*.com/products/dir/* |
最后一个匹配的 URL 是 http(s)://www.*.com/products/dir/*
。因为该 URL 的符号为正(+,表示允许访问该 URL),将允许URL http://www.dev.parasoft.com/products/dir/page.html
。
URL http://www.dev.parasoft.com/products/soap.html
将匹配来自上表的以下 URL:
+ http(s)://www.dev.parasoft.com/* - http(s)://www.dev.parasoft.com/products/* |
最后一个匹配的 URL 是 http(s)://www.dev.parasoft.com/products/*
。因为该 URL 的符号为负(-,表示该 URL 受到限制),将限制 URL http://www.dev.parasoft.com/products/soap.html
。
站点 http://www.dev.parasoft.com
有关于几千种类型的硬件。希望将站点扫描限制为两种类型的硬件:路由器和磁盘。除了站点的旧部分,还希望处理站点的所有其他部分。
若要对 URL http://www.dev.parasoft.com/index.html
进行扫描,请在开始 URL 字段输入该 URL。
将自动添加允许的 URL 到允许的/限定的 URL 表中:
+ http(s)://www.dev.parasoft.com/* |
若只扫描 hardware
目录中的两个文件夹 Routers
和 Disks
,则需要将以下条目按照下面的顺序添加到表中:
- http(s)://www.dev.parasoft.com/newdir/hardware/* + http(s)://www.dev.parasoft.com/newdir/hardware/Routers/* + http(s)://www.dev.parasoft.com/newdir/hardware/Disks/* |
若要限制对旧目录的扫描,则需要添加以下条目。
- http(s)://www.dev.parasoft.com/olddir/* |
这就是完成操作后表格的样子。
当选中限制扫描到开始 URL 的最底层子文件夹 Http 扫描选项时,SOAtest 将自动启用 URL,为最底层子文件夹创建一个允许访问的 URL,并将其添加到允许的/限定的 URL 表中第一行。如果清除了该选项,SOAtest 将自动将默认允许的子文件夹 URL 添加到允许的/限定的 URL 表中第一行。当第一次重定向指向具有相同完全限定域名的 URL 时,SOAtest 也会这样做。
例如:
启用 URL | 子目录限制 |
---|---|
http://www.parasoft.com/dir1/dir2/ | + http(s)://www.parasoft.com/dir1/dir2/* |
http://www.parasoft.com/dir1/dir2 | + http(s)://www.parasoft.com/dir1/* |
http://www.parasoft.com/dir1/page.html | + http(s)://www.parasoft.com/dir1/* |
http://www.parasoft.com/dir1/page.html?count=1 | + http(s)://www.parasoft.com/dir1/* |
如果特定的开始 URL 为重定向,则 SOAtest 将加载其重定向和任何连续的后续重定向。此外,SOAtest 将自动为每个重定向添加一个允许的子文件夹 URL。重定向的所有添加条目都将被添加到允许的/限定的 URL 表的顶部。
如果希望 SOAtest 遵循没有添加为允许 URL 的重定向,则选择遵循表格中未指定为限定的重定向选项。当选中此选项时,如果 SOAtest 在扫描期间发现重定向,并且该重定向未在允许的/限定的 URL 表中指定,那么它将被加载。SOAtest 将为重定向到允许的/限定的 URL 表添加一个允许的子文件夹 URL。
加载包含 JavaScript 的站点之前,请验证是否启用加载 JavaScript 选项。(该选项默认启用。)当启用该选项时,SOAtest 将执行 JavaScript 并加载相关链接。
若要验证该选项是否启用:
如果希望自定义 SOAtest 如何模拟 JavaScript 事件(如打开和关闭其他窗口、运行计时器等),可以通过在选项卡中更改 JavaScript 选项实现这一点。使用以下表来确定选择哪些选项。
目的... | 使用这些设置... |
---|---|
使用默认参数提示 SOAtest 触发每个处理程序一次。 | 在模拟 JavaScript 事件框中选择一次。 |
在加载站点(以便发现新链接)时提示 SOAtest 创建多种类型的事件。 | 在模拟 JavaScript 事件框中选择多次。 |
防止 SOAtest 模拟 JavaScript 事件。 | 在模拟 JavaScript 事件框中选择从不。 |
每次在 SOAtest 扫描站点时遇到 JavaScript Alert、Confirm 和 Prompt 消息时,它都会将消息打印到结果区域(在右侧 GUI 面板),并执行默认操作。SOAtest 默认打印以下消息并执行下面的操作:
JavaScript 消息 | SOAtest 消息 | 默认的 SOAtest 操作 |
---|---|---|
JavaScript Alert | JavaScript Alert: “消息” | 点击确认按钮 |
JavaScript Prompt | JavaScript Prompt: “消息” | 点击取消按钮 |
JavaScript Confirm | JavaScript Confirm: “消息” | 点击取消按钮 |
如果希望 SOAtest 以不同方式处理这些信息,您可以使用脚本定义自定义行为。详情请参阅使用脚本挂钩自定义扫描。
如果选择了手动填充活动的输入 HTTP 配置面板复选框(默认启用),则 SOAtest 会在每次检测要求用户输入的表单打开一个表单输入对话框。如果希望 SOAtest 分析表单提交后返回的页面,则需要告诉 SOAtest 如何填充表单不同的输入元素(文本字段、复选框、单选框等)。可以通过在加载过程中在这些对话框中指定固定输入来实现这一点。
不需要为每个表单添加测试输入。我们推荐您只添加需要访问站点所有主要区域的输入;可以根据需求跳过对话框。而且,如果 SOAtest 可以在不需要提交特定表单输入时访问所有站点区域,则不需要在加载过程中输入任何表单输入。
如果不想添加任何表格的输入信息,请点击第一个对话框中的忽略所有。
如果要为部分或所有表格添加输入,请利用下表确定针对每个打开的对话框应采取的操作。
目的... | 操作... |
---|---|
标记输入提交。 | 在表单测试名称字段中输入新名称。 |
输入当前表的信息。 |
添加输入后,SOAtest 会重新打开相同的表单对话框,以便可以输入其他的信息。 |
指明您不希望输入当前表单的任何其他信息。 | 点击忽略。 |
指明您不希望输入当前表单或任何该表单的其他实例的任何其他信息。 | 点击忽略表单。 |
指明您不希望在该站点中输入表单的任何其他信息。 | 点击忽略所有。 |
浏览到与当前表单相关联的页面。 | 点击查看。 |
如果您的站点使用表单,并且您希望 SOAtest 加载并测试这些表单提交后返回的页面,则需要告诉 SOAtest 如何填充表单不同的输入元素(文本字段、复选框、单选按钮等)。要测试的页面实例越多,则需要填充表单的信息就越多。
填充表单有两种方法:
若要添加或更改 SOAtest 打开的表单输入面板中的固定输入:
pre123post
中提取值 123
,则可以在左侧文本字段中输入 pre
,在右侧文本中输入 post
。如果 SOAtest 访问了需要身份验证的页面,则将打开一个密码对话框,需要您输入有效用户名和密码。
在合适的字段中输入有效的用户名和密码,请指定是否希望 SOAtest 在该项目文件中保存密保,然后点击 OK。
使用允许的/限定的 URL 表决定了应该扫描网页的哪个部分。在自动 web 项目扫描期间,每个潜在 URL 都与允许的/限定的 URL 表匹配,以确定是否应该访问 URL。确定 URL 是否应该访问的过程如下: 1.在允许的/限定的 URL 表中找到最后一个匹配的 URL。 该机制允许控件决定要扫描网页的哪个部分。例如,它允许在允许扫描的部分站点内将某些 URL 指定为“禁区”。或者,它允许在不应该扫描的部分网站内扫描其他 URL。 注意:允许的/限定的 URL 表条目区分大小写。 |
可以,通配符星号(*)可以在 URL 中的任何位置使用,以匹配 0 个或更多字符。星号(*)适用于构造允许的/限定的 URL 表条目的任何组合方式。 使用星号(*)的例子:
|
允许域 URL 告诉 SOAtest 加载域中所有页面。例如,如果您的站点为 将加载扫描期间域中任何链接,如 当输入启用 URL 时,允许域 URL 将自动添加到允许的/限定的 URL 表中。 |
您将需要将条目添加到允许的/限定的 URL 表中来控制该内容是否扫描。如果您的 web 站点有几千种类型硬件的信息,则您可能希望限制扫描该站点两种类型的硬件:路由器和硬盘。除了旧的站点部分,还希望处理站点的所有其他部分。 例如:
添加上述 URL 之后,允许的/限定的 URL 表应包含以下内容:
更多详情,请参阅准备 SOAtest 在扫描期间限制和/或允许 URL。 |
若要允许在扫描站点期间加载其他网站,则需要将外部站点添加到允许的/限定的 URL 表中。可以添加一个星号(*)作为允许的 URL 以允许要加载的所有站点。 |
当您启用 URL 时,SOAtest 将自动将允许域限制(如 使用 如何希望将扫描限制为站点的非加密版本或加密版本,则可以将删除星号,或者使用‘ |
根据允许的/限定的 URL 表检查重定向,以确定是否遵循它们。 |
URL 自动添加到允许的/限定的 URL 表有两种情况:
|
如果特定的开始 URL 为重定向,则 SOAtest 将加载其重定向和任何连续的后续重定向。此外,SOAtest 将自动为每个重定向添加一个允许的 URL。这些允许的 URL 将添加到允许的/限定的 URL 表中。 |
如果您的站点包含注销页面,它可能导致 SOAtest 停止扫描。如果 SOAtest 遇到这种类型的页面,SOAtest 将注销该用户。由于用户不存在,这将造成其他页面不可访问。可以通过限制注销页面的加载来防止扫描期间发生这种情况。 可以将用于包含注销事件的页面的 URL 限制添加到允许的/限定的 URL 表中。例如,如果注销页面是 |
每次 SOAtest 检测要求用户输入的表单时都会打开一个表单输入对话框。 详情请参阅对表单进行填充。 |
在扫描期间,SOAtest 会模拟以下技术的执行:
注意,上表主要关注支持扫描的技术。它与支持静态分析的技术有所不同。 |
可以通过在 SOAtest 项目中发生与“挂钩”相关联的事件时执行自定义脚本,进而自定义 SOAtest 的扫描行为。
自定义挂钩可用于记录或修改扫描工具执行过程中特定点(例如,打开警报对话框时、提示用户作出响应时、提示用户输入密码时等)所传递的值。
例如,其中一个 SOAtest 的挂钩是“Alert”挂钩。在 SOAtest 的扫描工具遇到 JavaScript Alert 的任何时候都会调用该挂钩。如果希望 SOAtest 记录这个警告信息并在 SOAtest 消息窗口中报告它,则可以通过创建脚本实现这一点。该脚本定义该挂钩,然后说明了在 SOAtest 遇到该挂钩时希望它如何表现。调用此脚本后,在每次 SOAtest 遇到 JavaScript Alert 时,它都将访问它,并且执行特定操作(记录和报告警示信息)。
挂钩在脚本中使用自定义方法定义和自定义。同一个文件可以定义多个挂钩。如果向一个挂钩添加多个方法,则在调用该挂钩时将执行该挂钩定义的所有方法。
您可以以在 SOAtest中创建、应用和调用其他脚本相同的方式创建、应用和调用脚本:在启动时(只针对 JavaScript 和 Jython 脚本),通过创建和应用扩展工具,通过向特定路径节点添加脚本来定义挂钩。您可以在不同的时间调用挂钩以引出所需的功能。例如,如果要在所有 SOAtest 项目和站点中使用某个脚本的挂钩功能,可以将定义和使用该挂钩的 JavaScript 或 Jython 脚本添加到 <INSTALL>/plugins/com.parasoft.ptest.libs.web_<VERSION>/root/startup
目录中。只要程序调用挂钩,就会执行相关的用户自定义方法。将会一直执行该方法,直到调用该挂钩上的 clear()。
有关常用挂钩选项的完整说明,请参阅 SOAtest Extensibility API。前往 Parasoft > 帮助或帮助 > 帮助内容(取决于您的安装程序),查找标题为“Parasoft SOAtest Extensibility API”的手册。
SOAtest 允许在脚本中定义和操作以下特定挂钩:
当 SOAtest 遇到 JavaScript alert() 方法时,其默认的行为是点击 OK 按钮,然后打印 JavaScript Alert: “消息”
到 SOAtest 控制台视图中。可以通过 Alert 挂钩更改此行为。
在 SOAtest 遇到 JavaSrcipt Alert 时,默认调用 Alert 挂钩。通过将方法添加到该挂钩,可以确定在 SOAtest 遇到 JavaScript Alert 时会如何表现。调用 Alert 挂钩时,SOAtest 将打印消息 JavaScript Alert: “消息”
到脚本中指定的位置汇总,或者到 SOAtest 控制台视图中(如果没有指定替换位置)。
该挂钩通常用来将警告信息结果打印到特定的 SOAtest 消息窗口。例如,如果您想让 SOAtest 在名为“Alert Messages”的 SOAtest 消息窗口中报告所有警告消息,您可以创建以下 Jython 脚本并将其添加到 <INSTALL>/plugins/com.parasoft.ptest.libs.web_<VERSION>/root/startup
目录中:
from com.parasoft.api import Application def myAlertHook(msg): # Print the alert message to SOAtest Messages Application.showMessage(" JavaScript Alert: %s" % str(msg)) # Add the contents of the alert message to a Result Window named # "Alert Messages". This ResultWindow can later be used # as part of a test suite in a regression test, to make sure the # contents of the window, which contains the alert message, # are what you expect them to be. Application.report("Alert Messages", str(msg)) # Add your method to the Alert Hook Application.getHook("Alert").set(myAlertHook) |
传递到方法 myAlertHook 的参数将是警告消息。它是一个字符串,是警告包含的消息。
也可以在用户(SOAtest)提交某个无效的表单值时使用 Alert 挂钩对它进行验证,应用程序会打开一个警告框,警告输入的数据无效。若要实现该测试,则首先创建并调用一个脚本(就像上面这个),改脚本将警告消息记录到 SOAtest 消息窗口中。然后,实现测试套件,该套件检查使用以下测试用例检查消息窗口的内容:
#Script to return text of result window named "Alert Messages" from soaptest.api import * def return(): return SOAPUtil.getResultWindowText("Alert Messages") #Script to clear text of result window named "Alert Messages" from soaptest.api import * def clear(): SOAPUtil.clearResultWindow("Alert Messages") |
当 SOAtest 遇到 JavaScript confirm() 方法时,其默认的行为是点击取消按钮,返回 false
,然后打印 JavaScript Confirm: “消息”
到 SOAtest 控制台视图中。当 SOAtest 遇到 JavaScript prompt() 方法时,其默认的行为是点击取消按钮,返回 null
,然后打印 JavaScript Prompt: “消息”
到控制台视图中。可以通过使用脚本更改这些行为来定义并自定义 Confirm 挂钩或 Prompt 挂钩(具体使用的挂钩取决于要更改哪个 JavaScript 方法的返回值)。
确认
通过自定义 Confirm 挂钩,可以确定在 SOAtest 遇到 confirm() 方法时会如何表现。
例如,在 SOAtest 遇到 confirm() 方法执行以下步骤的任何时候,提示它返回一个自定义(非默认)响应的一个方法:
首先,创建 Jython 文件(命名为 startup.py),它定义只接受一个参数的方法。该参数的值与 JavaScript 中传递给 confirm() 方法的值相同。根据您所需的逻辑,确定希望 confirm() 返回“true”还是“false”,然后从定义的方法返回该值。若要让 SOAtest 使用您刚刚定义的方法,则通过以下方法将其添加到 Confirm 挂钩,其中传递给 set
的参数是您定义的方法的名称。在这个例子中,定义的方法命名为 myConfirmHook。
from com.parasoft.api import Application # msg will have the same value that gets passed to confirm() def myConfirmHook(msg): if msg == "Yes or no?": return 1 return 0 Application.getHook("Confirm").set(myConfirmHook) |
然后,将此文件添加到 <INSTALL>/plugins/com.parasoft.ptest.libs.web_<VERSION>/root/startup
目录中。下次启动 SOAtest 时,它将在遇到 confirm() 方法时执行上述脚本。
调用 Confirm 挂钩时,SOAtest 将打印以下消息(取决于确认操作)到脚本中指定的位置或控制台视图中(如果没有指定替换的位置):
根据脚本,SOAtest 点击了“OK”按钮
根据脚本,SOAtest 点击了“CANCEL”按钮
提示
通过自定义 Prompt 挂钩,可以确定在 SOAtest 遇到 prompt() 方法时会如何表现。
Prompt 挂钩和 Confirm 挂钩具有非常相似的工作原理。两者的其中一个区别是,Prompt 接收两个参数,并将其传递给 prompt() JavaScript 方法。另一个区别是,为 Confirm 定义的方法返回布尔值,而为 Prompt 定义的方法必须返回字符串或“null”(Jython 中为“None”)。
可以定义逻辑来确定返回值是否基于传递给 prompt() 方法的参数。调用 prompt() 方法时返回“null”等价于在浏览器打开的提示框中点击 Cancel 按钮。使用与您为 confirm() 添加自定义方法相同的方式将该方法添加到合适的挂钩中,但此时挂钩命名为“Prompt”。下面是一个例子,返回“http://www.parasoft.com”的脚本作为 prompt() 的值:
from com.parasoft.api import Application def myPromptHook(msg, defaultMsg): return "http://www.parasoft.com" Application.getHook("Prompt").set(myPromptHook) |
调用 Prompt 挂钩时,SOAtest 将打印以下消息之一(取决于提示响应)到脚本中指定的位置或控制台视图中(如果没有指定替换的位置):
根据脚本,SOAtest 输入了 "[message- string that the script returns]"
根据脚本,SOAtest 点击了“CANCEL”按钮
返回不同情况下的不同值
可以通过将合适的逻辑添加到为 Confirm 或 Prompt 挂钩定义的方法中,以使 SOAtest 返回不同情况下的不同 confirm() 或 prompt() 值。通过使用要添加到 Confirm 或 Prompt 挂钩的方法的第一个参数文本来确定返回的值。例如,您可能希望 SOAtest 返回提示“输入 URL”的 http://www.parasoft.com
,但返回的却是提示“输入名字”的 John
。该功能可以如下实现:
def myPromptHook(msg, defaultMsg): if msg == "Enter a URL": return "http://www.parasoft.com" elif msg == "Enter your name": return "John" else: return None |
当以下所有条件都满足时,调用 Realm Password 挂钩:
如果在满足上述条件之前定义了自定义 Realm Password 挂钩,则 SOAtest 将在提示您手动输入密码之前会执行自定义挂钩。如果该方法添加了密码(到项目中的站点,或者是到负载测试虚拟用户),则 SOAtest 将使用该密码,并不会在提示您提供密码。如果您或其他 SOAtest 用户以前输入过密码,则将不会执行该挂钩。如果要确保 SOAtest 使用您为钩子定义的密码,则应该在让 SOAtest 从钩子中添加新密码之前清除站点密码。
如果您想根据所处的特定环境(例如,根据您使用的特定路径,或者您想在虚拟用户负载测试中使用不同的用户名/密码)来更改用户名/密码,则此挂钩尤其有用。
下面的示例 Java 文件时 Realm Password 挂钩的一个非常基本的示例实现。无论上下文如何,该脚本都添加相同的密码。
import com.parasoft.api.*; import java.lang.reflect.*; import java.net.*; import soaptest.api.*; public class RealmPasswordHook { static public void returnPassword(String realm, String url, boolean ntlm, Context context) throws MalformedURLException { SOAPUtil.addSitePassword(realm, "user1", "password1", url, ntlm); } public void setHook() throws UserMethodException, NoSuchMethodException { Hook hook = Application.getHook("RealmPassword"); Method userMethod = getClass().getMethod("returnPassword", new Class[] {String.class, String.class, boolean.class, Context.class}); hook.set(userMethod); } } |
以下 Jython 示例文件类似于以前的 Java 文件,不同的是它在访问 Realm Password 挂钩时会清除所有现有密码。
from com.parasoft.api import * from soaptest.api import * def returnPassword(realm, url, ntlm, context): SOAPUtil.addSitePassword(realm, "user1", "password1", url, ntlm) def setHook(): hook = Application.getHook("RealmPassword") hook.set(returnPassword) // Remove all previous passwords to the new one being added above is the one that gets used. SOAPUtil.removeSitePasswords() |
以下示例说的是,在访问该挂钩时,JavaScript 文件删除现有域密码,然后在执行虚拟用户负载测试时,根据当前访问的 URL 提交密码。
// This method uses a different password based on the URL. var Application = Packages.com.parasoft.api.Application function returnPassword(realm, url, ntlm, context) { Packages.soaptest.api.SOAPUtil.removeSitePasswords() // Adds password to a virtual user in load test if (url.indexOf("http://toad.parasoft.com:90" == 0) { Packages.soaptest.api.SOAPUtil.addSessionPassword(realm, "user1", "password1", url, ntlm, context) } else { Packages.soaptest.api.SOAPUtil.addSessionPassword(realm, "user2", "password2", url, ntlm, context) } } function setHook() { var hook = Application.getHook("RealmPassword") hook.set(returnPassword) Packages.soaptest.api.SOAPUtil.removeSitePasswords() } |
|
每次 SOAtest 访问 URL 时,调用 URL Logging 挂钩。它可以用来提示 SOAtest 打印访问的每个 URL。
附加到此挂钩的方法需要有三个或四个参数。第一个参数应该是一个字符串类型,指定访问的 URL。第二个参数应该是使用 URL 提交的任何 POST 数据(它可能是 NULL)。第三个参数是包含其他请求发送的 HTTP 属性的 java.util.Hashtable
(例如,referer
)。第四个参数(可选项),如果添加到方法签名中,则它是 com.parasoft.api.Context
。
此外,需要将 SiteUtil.enableLogging
设置为 true,并将 UrlLogging
传递给 Application.getHook()
例如,如果您想让 SOAtest 将访问的每个 URL 都打印到控制台视图中,可以创建以下 Jython 脚本并将其添加到 <INSTALL>/plugins/com.parasoft.ptest.libs.web_<VERSION>/root/startup
目录中:
from com.parasoft.api import * from webtool.site import SiteUtil count = 1 def setHook(): SiteUtil.enableLogging = 1 hook = Application.getHook("UrlLogging") hook.set(loggingHook) def loggingHook(url, post, props): global count if post: Application.showMessage(str(count) + ". " + url + " [POST=" + post + "]") else: Application.showMessage(str(count) + ". " + url) count = count + 1 setHook() |