1、第五章 数据关联5.1 OA系统数据关联 正确的测试执行中正确的测试执行中,一个服务器请,一个服务器请求常常使用前一个请求返回值。确保准求常常使用前一个请求返回值。确保准确的相关性会导致性能更好的测试。关确的相关性会导致性能更好的测试。关联的作用就是可以通过它获取到服务器联的作用就是可以通过它获取到服务器返回的内容,在后边的请求中可以使用返回的内容,在后边的请求中可以使用服务器返回的内容。服务器返回的内容。5.1.1 数据关联 一一个对个对 Web Web 服务器的请求可以包含来自前一个请求的响应数据。我们服务器的请求可以包含来自前一个请求的响应数据。我们对此类型关联所使用的术语是数据相关。另
2、一个常用的同义术语是动态数对此类型关联所使用的术语是数据相关。另一个常用的同义术语是动态数据据。与应用程序的交互是彼此相关的。特别是,一个对 Web 服务器的请求常常包含从前一个请求的响应中的,返回到 Web 浏览器中的数据。例如,考虑下面与基于Web 的应用程序的交互:l工资单职员输入应用程序的 URL,这会发送一个登录提示。当职员成功登录时,Web 服务器向职员的 web 浏览器返回一个会话 ID 以及表示登录成功的页面。l职员在返回来的打开雇员数据库搜索页的页面上单击链接。职员不知道的是,Web 浏览器发送了包含会话 ID 的请求。根据会话 ID,Web 服务器知道请求来自于某个已经登录
3、的人,所以返回雇员数据库搜索表格。现在职员执行一个或多个姓名搜索操作,来定位具体的雇员。在其它信息中,Web 服务器返回一张照片和一个唯一的 ID。(根据应用程序的设计,雇员 ID 可以是可见的或是隐藏的。)l职员单击一个返回当前雇员工资记录的链接。伴随该请求,Web 浏览器发送会话 ID(以便 Web 服务器可以知道请求来自于已经登录的某人)及雇员 ID(以便 Web 服务器可以定位并返回正确信息)。在此实例中,请求 2 依赖于请求 1,且请求 3 依赖于请求 1 和 2。为帮助测试工程师更方便的处理数据关联,RPT会以不同的颜色数据显示表达不同的含义,推荐开发工程师做相应的处理或者提示数据
4、已处于某状态。这样脚本开发工程师看到不同的颜色数据,可以快速的进行相应的处理或者获取数据的状态。在在RPT中的一个概念中的一个概念“引用引用”,“引用引用”是测试中的一个值是测试中的一个值(通常在响应中),它可以由测试中后来的值(通常在请求(通常在响应中),它可以由测试中后来的值(通常在请求中)所使用。当测试生成器在录制过程中会自动根据一定的中)所使用。当测试生成器在录制过程中会自动根据一定的规则检测动态数据,发现请求中存在应该用前一个值来替代规则检测动态数据,发现请求中存在应该用前一个值来替代请求值时,它会指定更早的值作为引用并将后来的请求值与请求值时,它会指定更早的值作为引用并将后来的请求
5、值与引用关联起来。这称为自动数据关联。但也可以手动地关联引用关联起来。这称为自动数据关联。但也可以手动地关联测试中的任意两个值或解开现有的关联。可以在参数设置中测试中的任意两个值或解开现有的关联。可以在参数设置中修改或禁止自动数据关联:单击修改或禁止自动数据关联:单击“窗口窗口”-“首选项首选项”,展,展开测试,并单击开测试,并单击“测试生成测试生成”,不勾选,不勾选“启用自动数据关联启用自动数据关联”即可取消自动关联。即可取消自动关联。测试编辑器使用了彩色编码并提供了导航帮助,便于脚本开发工程师能够理解不同的颜色代表的含义。要查看性能测试中的彩色编码的图例,点击“窗口”-“首选项”-“测试”
6、-“性能测试编辑器”-“颜色和字体”选项卡。5.1.2 使用关联使用关联指定测试值作为引用,或者指定测试数据的一个范围作为字段引用,就可以在测试脚本中的另一处使用引用或字段引用数据。引用(通常位于响应数据中)包含了想要在后来的测试(通常是请求)中使用的值。可以用引用来替代请求值(称为数据关联)。还可以用引用作为对测试中 if 或 then 条件的输入,或者定制的测试所调用的 Java 代码。引用指向测试中的具体值,而字段引用指向测试数据的一个范围。可以将字段引用作为if 或 then 条件的输入参数,或者用来定制代码。下面以OA系统中的图书归还功能演示一下RPT关联功能的使用。1.首先创建一个
7、性能测试项目。2.给性能测试项目命名“ReBook”,点击“完成”3.选择测试性质“HTTP”测试,点击“下一步”。4.测试名称命名“ReBook”,点击“完成”。5.选择录制客户端“Microsoft Internet Explorer”,选择“下一步”。6.显示录制前注意事项。8.进行登录。9.选择“图书归还”。7.输入OA系统首页http:/localhost:8080/oa/开始录制10.选择一本图书点击“归还”按钮。11.提交归还的图书数据。12.脚本录制完成,经过调整脚本目录如下:13.要进行分析在归还借阅图书时,提交归还图书请求所提交的参数。用户在归还图书时,选择一本图书,点击“
8、归还”。用户此步的操作对应的脚本请求是“ReturnBook”,选中提交数据的子请求,可以看到请求中携带的参数是“ids=1”,基本可以得出结论,归还图书是根据ids字段标识图书。14.需要进一步分析图书的IDS字段是在哪个请求中返回的。已借阅的图书数据是用户点击了“图书归还”时返回的,所以找到“图书归还”请求来创建引用。脚本中返回所有已借阅的图书的数据请求时“OpenReturnPage”。选择它的子请求,可以看到响应中返回的数据中有“ids”内容。15.找到图书ids字段对应的值,“Value=1”即是ids的值。16.左键双击“1”,然后右键选中“1”,选择右键菜单中的“创建引用”,如下
9、图所示:17.给此引用命名一个名词,要求是唯一的,尚未使用的。如果不能确定,可以点击“检查”按钮来检查此名称是否唯一。如下图所示:18.点确定按钮后,引用创建成功,后边归还图书时可以使用此引用来标识需要归还的图书。引用创建成功后,“1”的数据变成了浅蓝色。19.找到后边所有使用了此引用的数据,把硬编码数据全部改成引用。这样脚本就会自动的使用返回的未归还的图书数据进行归还,就不会重现还是归还的图书是已归还的状态。整个脚本中有两处使用了此图书数据,“ReturnBook”、“Submit”请求使用了IDS数据,需要改为引用。20.左键双击“ids=1”中的“1”,选中后,选择右键菜单中的“替换”-
10、“引用:BookIDS”,将脚本中硬编码的“IDS=1”改为引用“BookIDS”。21.把两处数据全部改成引用以后,回放脚本。可以看到回放多次都可以正确的归还图书。因为归还的图书数据已经是从服务器的返回中获取的,所以不会重复的归还同一本书情况出现。5.1.3 数据关联的调整自动的数据关联有时候需要手动调整,并且复杂的手动关联有时候自动的数据关联有时候需要手动调整,并且复杂的手动关联有时候需要对所测的应用程序的实现方式的详细了解需要对所测的应用程序的实现方式的详细了解。当执行一个测试时,可能会注意到,服务器不是在期望的负载之下运转,或者数据库没有按期望进行更新。不完全或不正确的数据关联很可能是
11、导致这些问题的原因。这里是一个帮助尽早地识别数据关联问题的推荐过程:1.单独地执行测试(如果按进度表中运行),将执行历史日志级别设置为“所有”。如果将测试作为单个测试运行,这就是默认的。2.在测试完成执行之后,打开执行历史。3.核对每次对服务器的调用是否都返回了期望的值。当然,测试生成器的数据关联算法是基于应用程序设计者的最佳实践的。因为这些实践在不断地进化,所以这些类型的自动数据关联很可能会出现以下的错误:一.不充分的关联:应该被关联的测试值没有被关联。三个可能的原因是:1.两个应该被关联的参数具有不同的名称。2.一个值应该与前一个值相关联,而前一个值未出现在期望的位置。3.一个参数或值应该
12、与前一个参数或值相关联,而前一个参数或值未出现在测 试中,因为它也是计算值。二.过度关联:把没有关系的测试值关联起来了。三.不正确的关联:应该关联的测试值被错误地关联起来了。四.不充分的关联:参数有不同的名称或出现在未预料的位置。类似地,数据关联将一个由服务器返回的响应值和后继的请求值关联起来。自动关联算法搜索常见的位置 URL 和 Post 数据 以寻找相关候选。但其他返回参数的方案也是可能的。例如考虑请求 http:/?id=12345。应该与该请求关联的服务器响应是一个名称或实体对href name=id entity=12345,而不是id=12345。参数 id 需要与 name=i
13、d 相关联,而值 12345 与 entity=12345相关联。要在这些情况下手动关联:1.利用测试搜索或浏览,定位到需要相关的两个参数。2.到第一个出现在测试中的参数处。按创建引用或者字段引用所阐述的,将参数放入引用中。(在某些情况下,该参数可能已经在引用中,所以该步骤不是必要的。)3.到另一个参数处,将第二个参数与前面的引用相关。不充分的关联:一个参数未命名 参数或值很可能需要与一个先前的在测试中未命名的参数或值相关。在此种情况下,为了正确地关联,需要了解参数或值在什么地方怎样计算的,然后利用一个定制的代码程序块处理参数值的计算。例如,考虑 URI http:/?login_stamp=
14、12345_Dec_12_04,在此处将登录 ID 和当天的日期串联成 login_timestamp。在这种情况下,就需要能够串联登录 ID 和日期的定制代码。举另一个例子,假设服务器将登录 ID 和日期分离着返回(href customer_id=12345 Date=Dec_12_04)。在此情况下,可以将这些参数放入单独的引用中并在后来的请求中利用客户 ID 和日期分别替代它们。过度关联过度关联:自动数据关联基于模式匹配:参数或参数值与后来的具有准确的或相似名称的参数或参数值相关联。但有时具有准确或相似名称的参数实际上并没有关系。最好的情况是,这些不必要的关联或者是无害的,或者给测试添
15、加了一点不适当的负担(关联会带来回放上的开销)。最坏的情况是,应用程序不期望这些关联并在回放时失败。要去掉多余的数据关联:1.在测试编辑器中,利用搜索或浏览(关联的值显示为红色),定位到应该不相关的值上。2.右键单击该值并选择“除去替换”。另一种方法如下:I.在测试编辑器中,单击包含不恰当关联请求的页面。II.在测试数据表格中任意位置单击右键并选择“显示应用”。III.单击显示不恰当关联的表格行(红色字)并单击表格下面的“除去替换”按钮。不正确的关联:不正确的关联:需要数据关联的参数会在整个测试中出现许多次。例如,最初在用户登录时出现的会话 ID 参数可能会在后来每次的请求中出现。测试中参数的
16、多个实例很可能不一样,关联算法会选择错误的实例。性能测试生成参数包含参数性能测试生成参数包含参数 为执为执 行优化自动数据相关性行优化自动数据相关性:准确性:每个参数的出现都与最 近的前一个参数的 出现相关联。这是默认的。效率:每个参数的出现都与单一 的前一个出现的参数相关联。不不正确的实例相关性很少具有准确性设置,但它们仍然是可能的。要手动纠正正确的实例相关性很少具有准确性设置,但它们仍然是可能的。要手动纠正该问题:该问题:n 在测试编辑器中,利用搜索,浏览或页面的测试数据表格,定位不正确关联的值。n 右键单击该值或表格行,并单击“除去替换”。n 再次右键单击该值,选择“从以下位置替换”,并选择正确的参数。