1.什么是关联?
关联是为了获取每次运行脚本的唯一数据值和通过嵌套查询生成的数据。关联提供了避免产生重复数据错误的数值以及优化代码(以避免嵌套查询)。关联是正常回放含有动态数据如Session IDs,Database Primary Keys和差不多所有的HTTP安全机制脚本的根本。关联的目的就是吧脚本中某些hard-coded数据转变成从服务器传过来的动态的,每次执行都不一样的数据。
2.参数(化)和关联的区别
参数(化)相当于代码编写中的变量。是某个变量向服务器输入不同的值,用来模拟真实的用户。运行脚本时,不同的数据集被发送给服务器。只能对某个具体的变量值进行参数化。参数化的对象在回放过程中即时没有被参数化也不会报错,只是像服务器输入了相同的值。但是关联的对象在回放过程中如果没有做关联,回放过程中就会报错。关联是对系统的动态数据(每次运行脚本都会变化的值,是从服务器传过来的)进行。简单的说,每一次执行时都会变动的值,就有可能需要做关联。
3.动态关联和手工关联的区别
动态关联是我们为关联设置规则,可以是具体的应用程序服务,这里的数据由所创建的规则替代。在手工关联中,我们想要关联的数值被扫描并且编写关联函数完成关联。VuGen内建自动关联引擎(auto-correlation engine),可以自动找出需要关联的值,并可以利用关联函数自动建立关联。
手动关联需要自行查找关联的对象,然后自行插入关联函数。
4.如何发现哪里需要关联?
两种方式:首先回放扫描不同的值然后看哪些值需要关联。其次,我们可以录制2个脚本然后作比较。我们可以查看不同的文件决定需要关联的数据。在我实践的某个项目中,为每个用户提供一个唯一的ID,一个不确定的数字,是自动生成的,有序且值唯一。我需要关联这个ID值以防止在运行脚本是出现错误。我用的是扫描的方式关联。
5.在哪里设置自动关联选项?
网页自动关联可以在recording options -->correlation tab栏设置。这里可以为全部脚本设置关联并选择是在线问题信息还是离线actions,我们也可为这些关联定义规则。数据库的自动关联可以用输出窗口、关联扫描、找关联查询项并选择要关联的查询值。如果知道需要关联的具体值,只需要为这些值创建关联并指定这些值是如何创建的。
6.在网页录制脚本中,什么函数能捕获动态数据?
Web_reg_save_param函数可以将动态数据信息保存到一个参数中。
Web_reg_save_param函数语法:
int web_reg_save_param (const char *mpszParamName, <List of Attributes>, LAST);
以下表格列出了可获取到的属性.注意属性值字符串没有大小写区分(例如:Search=all)
7.HTML页面中的动态数据可能存在于:
每次获取相关网页都变化的URL
在form提交过程中录制的字段(有时是隐藏的)
JavaScritpt cookies
第1种情况:
录制时,假设点击 “buy me now!”文字的超链接,VuGen录制的URL是:http://host//cgi-bin/purchase.cgi?date=170397&ID=1234因为date "170397"和ID "1234"是在录制过程中自动生成的,每一次新的浏览会话重新生成新的date和ID。当运行脚本时,“Buy me now!”链接的URL不再是录制时的URL而是一个新的了。因此,Web服务器不能重新获得URL。
第2种情况
考虑一种情形:提交一个用户填写了他的姓名和帐号ID的form。当这个form提交时,一个唯一的序列号和该用户的数据同时也一起提交给了服务器。这个序列号是HTML代码中一个隐藏字段的值,被VuGen录制到了脚本中。因为这个序列号在每次浏览会话中都会变,所以Vuser不能成功回放录制的脚本。
8.如果右界不一致,指定一个右边界是不够的,需要指定可选右边界。因为它不一致---例如有时是”@”有时是“&”。这种情况下,指定&为可选择的右边界。