51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 3028|回复: 3
打印 上一主题 下一主题

[原创] 录制脚本,无法得到输入参数的字段(问题已确定,待解决)

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2009-7-22 10:25:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
测试环境:windows XP
测试工具:LR9.1  HTTP/HTML协议
被测试系统:OA系统、基于B/S构架的,前台用Javascript开发,后台是Weblogic+Oracle
录制过程描述: 打开功能设置页面,点击某功能模块,新建一个机构,输入机构编号和名称,提交完毕!

代码说明: 以下是部分的代码段,直接录制后回放将报错,需要设置关联。"Name=javax.faces.ViewState", "Value={WCSParam_Diff3}" 这部分就是关联的值,可能是每次服务器都要发送一个不同的值。

问题:录制完毕脚本后,无法在脚本中找到关于输入机构编号和名称的参数, 在以下代码中web_submit_data函数段并没有输入的参数。录制中我尝试用HTML或URL模式,均找到不到输入机构编号和名称的参数。

// [WCSPARAM WCSParam_Diff1 20 j_id_id1:j_id_id3pc2] Parameter {WCSParam_Diff1} created by Correlation Studio
        web_reg_save_param("WCSParam_Diff1",
                "LB= value=\"",
                "RB=\"",
                "Ord=1",
                "RelFrameId=1",
                "Search=Body",
                "IgnoreRedirections=Yes",
                LAST);
        // [WCSPARAM WCSParam_Diff2 10 !-2834c41d] Parameter {WCSParam_Diff2} created by Correlation Studio
        web_reg_save_param("WCSParam_Diff2",
                "LB= value=\"",
                "RB=\"",
                "Ord=2",
                "RelFrameId=1",
                "Search=Body",
                "IgnoreRedirections=Yes",
                LAST);
        // [WCSPARAM WCSParam_Diff5 4 j_id] Parameter {WCSParam_Diff5} created by Correlation Studio
        web_reg_save_param("WCSParam_Diff5",
                "LB=div id=\"",
                "RB=_id1",
                "Ord=1",
                "RelFrameId=1",
                "Search=Body",
                "IgnoreRedirections=Yes",
                LAST);
        web_submit_data("main.jspx_2",                "Action=http://192.168.1.90:7001/matrix/faces/main.jspx?_adf.ctrl-state={WCSParam_Diff4}",
                "Method=POST",
                "EncType=multipart/form-data",
                "RecContentType=text/html",
                "Referer=http://192.168.1.90:7001/matrix/faces/main.jspx?_adf.ctrl-state={WCSParam_Diff4}",
                "Snapshot=t2.inf",
                "Mode=HTML",
                ITEMDATA,
                "Name=org.apache.myfaces.trinidad.faces.FORM", "Value=pageTemplate:j_id_id3pc2", ENDITEM,
                "Name=javax.faces.ViewState", "Value={WCSParam_Diff3}", ENDITEM,
                "Name=event", "Value=pageTemplate:j_id_id68pc2", ENDITEM,
                "Name=event.pageTemplate:j_id_id68pc2", "Value=<m xmlns=\"http://oracle.com/richClient/comm\"><k v=\"type\"><s>action</s></k></m>", ENDITEM,
                EXTRARES,
                "URL=../afr/ccont_header_start.png", "Referer=http://192.168.1.90:7001/matrix/faces/main.jspx?_adf.ctrl-state={WCSParam_Diff4}", ENDITEM,
                "URL=../afr/ccont_header_bg.png", "Referer=http://192.168.1.90:7001/matrix/faces/main.jspx?_adf.ctrl-state={WCSParam_Diff4}", ENDITEM,
                "URL=../afr/toolbar_sSeparator.png", "Referer=http://192.168.1.90:7001/matrix/faces/main.jspx?_adf.ctrl-state={WCSParam_Diff4}", ENDITEM,
                "URL=../afr/th_bg_s.png", "Referer=http://192.168.1.90:7001/matrix/faces/main.jspx?_adf.ctrl-state={WCSParam_Diff4}", ENDITEM,
                "URL=../afr/ccont_header_end.png", "Referer=http://192.168.1.90:7001/matrix/faces/main.jspx?_adf.ctrl-state={WCSParam_Diff4}", ENDITEM,
                "URL=../afr/column-select.cur", "Referer=http://192.168.1.90:7001/matrix/faces/main.jspx?_adf.ctrl-state={WCSParam_Diff4}", ENDITEM,
                "URL=../resources/imgs/paneltab_border.png", "Referer=http://192.168.1.90:7001/matrix/faces/main.jspx?_adf.ctrl-state={WCSParam_Diff4}", ENDITEM,
                "URL=../afr/overflow_start.png", "Referer=http://192.168.1.90:7001/matrix/faces/main.jspx?_adf.ctrl-state={WCSParam_Diff4}", ENDITEM,
                "URL=../afr/overflow_end.png", "Referer=http://192.168.1.90:7001/matrix/faces/main.jspx?_adf.ctrl-state={WCSParam_Diff4}", ENDITEM,
                "URL=../resources/imgs/paneltab_center_selected.png", "Referer=http://192.168.1.90:7001/matrix/faces/main.jspx?_adf.ctrl-state={WCSParam_Diff4}", ENDITEM,
                "URL=../afr/sort_des_n.png", "Referer=http://192.168.1.90:7001/matrix/faces/main.jspx?_adf.ctrl-state={WCSParam_Diff4}", ENDITEM,
                "URL=../afr/sort_asc_n.png", "Referer=http://192.168.1.90:7001/matrix/faces/main.jspx?_adf.ctrl-state={WCSParam_Diff4}", ENDITEM,
                "URL=../resources/imgs/paneltab_right_selected.png", "Referer=http://192.168.1.90:7001/matrix/faces/main.jspx?_adf.ctrl-state={WCSParam_Diff4}", ENDITEM,
                "URL=../resources/imgs/paneltab_left_selected.png", "Referer=http://192.168.1.90:7001/matrix/faces/main.jspx?_adf.ctrl-state={WCSParam_Diff4}", ENDITEM,
                LAST);问题

[ 本帖最后由 wensy 于 2009-7-24 18:57 编辑 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2009-7-22 19:36:46 | 只看该作者
我查看了一些资料,是由于ViewState引起的,ViewState这种机制是来跟踪服务器状态值的,那么我们需要参数化的数据去哪儿了呢?查了资料,说ViewState的值和所有控件被收集并格式化成一个编码字符串,然后被分配给隐藏窗体字段的值属性。也就是说ViewState的编码:Name=javax.faces.ViewState", "Value={WCSParam_Diff3}" 这个变量所用的编码字符串是服务器状态和控件属性值的集合。那么这个编码字符串被我们关联之后,每次读取都应该是变化的,这里的变化只是从服务器传来的ViewState的值发生了改变,造成了整个编码字符串的改变,而并非是实际控件中的数据改变。
既然控件中的数据没有发生改变,我们就不能够对服务器系统造成压力。在我回放以及测试运行这个场景的时候,发现其实并没有新建的操作产生,(OA系统有验证,不能输入同样的编码和名称,另外数据库也不存在额外的数据),仅仅是按照ViewState的值进行了一次查询,那在我们录制新建操作的时候,我们该如何保证LR新建了不同的操作呢?这一点我也不清楚了。。。

目标:压力测试,实际就是模仿实际情况对业务进行多用户的并发操作,但是从上面的分析判断,并非是产生新建了的操作,所以也没有达到目标。
待解决:希望能够参数化实际窗体字段的属性值,完成对服务器的新建操作,实现压力测试的目的。

Generation Log 中查看到确实有编码和名称的实际值。(红色字段)
****** Request Body For Transaction With Id 140 ******
org.apache.myfaces.trinidad.faces.FORM=j_id_id1:j_id_id3pc2&javax.faces.ViewState=!-2834c41d&j_id_id1:addBGcodeInput=3318&j_id_id1:addBGnameInput=www.sina.com&event=j_id_id1:addBGnameInput&event.j_id_id1:addBGnameInput=<m xmlns=%22http:%2F%2Foracle.com%2FrichClient%2Fcomm%22><k v=%22autoSubmit%22><b>1<%2Fb><%2Fk><k v=%22suppressMessageShow%22><s>true<%2Fs><%2Fk><k v=%22type%22><s>valueChange<%2Fs><%2Fk><%2Fm>&oracle.adf.view.rich.PROCESS=j_id_id1:addBGnameInput
$$$$$$ Request Body For Transaction With Id 140 Ended $$$$$$
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2009-7-22 19:55:02 | 只看该作者
Viewstate是在一个隐藏了的窗体字段中来回传递状态的。当再次传回给服务器时,该如何将不同的窗体字段的属性值传给服务器呢?想参数化一下的两个属性。

从Generation Log 中这两个是新增窗体的属性和值:
addBGcodeInput=3318
addBGnameInput=www.sina.com
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2009-7-24 17:49:04 | 只看该作者
无法得到输入参数的问题找到了,并不是前面我说的Viewstate的问题,请注意如下录制的代码:

web_submit_data("main.jspx_2",                "Action=http://192.168.1.90:7001/matrix/faces/main.jspx?_adf.ctrl-state={WCSParam_Diff4}",
                "Method=POST",
                "EncType=multipart/form-data",                "RecContentType=text/html",
                "Referer=http://192.168.1.90:7001/matrix/faces/main.jspx?_adf.ctrl-state={WCSParam_Diff4}",
                "Snapshot=t2.inf",
                "Mode=HTML",
标红色的代码"EncType=multipart/form-data",就是因为他的存在,所以录制的脚本无法取到输入参数的值。由于在FORM中添加了 ENCTYPE='multipart/form-data' 属性,所以表单中的其他属性比如文本框的值用request.getParameter就无法取到,enctype="multipart/form-data"的意思是使request.getParameter失效。

"EncType=multipart/form-data"的作用在于表单中允许有图片上传,并且以二进制的数据格式来传输所有表单的属性值,request.getParameter是无法得到二进制值的,必须用string。

问题已经搞清,接下来去解决这个问题。
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-5-3 06:39 , Processed in 0.076518 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表