51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3930|回复: 8
打印 上一主题 下一主题

[原创] LoadRunner录不了<使用JavaScript调用Ajax>的代码, 具体请见文中说明

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2009-11-2 20:02:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用LoadRunner 9.10 测试Asp.net的页面,采用Web(http/html)协议的url方式录制。aspx页面中使用了AjaxPro.net组件。
1.页面中的button调用事件如下:

<script type="text/javascript">
    function Add()
    {
        var a = Default2.AddData(333).value; //AddData为后台cs文件中的方法
        document.getElementById("myText").innerText = a;
}
    </script>
<input type="button" name="btnAdd" value="前台新增(AjaxPro)" onclick="Add()" id="btnAdd" />
<span id="myText"></span>
2. 后台AddData实现代码如下:
[AjaxPro.AjaxMethod]
    public string AddData(int x)
    {
        try
        {
              InsertDataToDataBase();
              return "Success!";
        }
        catch (Exception e)
        {
            return "Fail!"+e.Message;
        }
    }

通过LR的VU录脚本时,点击button产生的c代码如下:

web_custom_request("Default2,App_Web_yncmhfpw.ashx_2",
                "URL=http://localhost/TestLR2/ajaxpro/Default2,App_Web_yncmhfpw.ashx",
                "Method=POST",
                "Resource=0",
                "RecContentType=text/plain",
                "Referer=http://localhost/TestLR2/Default2.aspx",
                "Snapshot=t221.inf",
                "Mode=HTTP",
                "EncType=text/plain; charset=utf-8",
                "Body={\"x\":333}",
                LAST);

录制时成功,且插入数据到数据库中;但回放时能够正常运行,但没有插入记录到数据库中。
根据LR的执行原理可知道,我这里是使用JavaScript调用的服务端方法,LR只记录服务端的请求。可能是这里的web_custom_request
录制时出了问题,但每次录制都是同样的代码。
请各位高手分析一下原因。如果是web_custom_request的问题,请问怎样才能让LR在回放时也能够正常执行?
另外,还有个问题,如果我想使用LR脚本的web_custom_request访问服务端的AddData(int x)方法,web_custom_request应该怎样写?
刚刚接触LR, 请各位高手帮解决一下,最好能提供详细代码。多谢!!!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2009-11-3 09:23:38 | 只看该作者
在前面加上这句话试一试:
web_add_header("x-ajaxpro-method",
                "AddDate");
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2009-11-3 11:42:04 | 只看该作者
yefeng312: 按你的方法加了web_add_header, 执行时发现它报错如下:

null; r.error = {"Message":"This method is either not marked with an AjaxMethod or is not available.","Type":"System.NotSupportedException"};/*

错误提示好像是说服务端方法没有标记为AjaxMethod,但我的确是标记了的,我的服务端代码如下:

[AjaxPro.AjaxMethod]
    public string AddData(int x)
    {
        try
        {
              InsertDataToDataBase();
              return "Success!";
        }
        catch (Exception e)
        {
            return "Fail!"+e.Message;
        }
    }

请再帮看一下是什么原因。  多谢!
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2009-11-3 12:31:59 | 只看该作者
你录制的时候这样设置一下:
Option-Internet Protocol标签下Advanced-Headers-下拉菜单中选择Record headers not in list,然后在下面的复选框中,什么都不要选,意思是所有的头文件都录制。
然后在 录制一下脚本重放一下看看
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2009-11-3 13:53:52 | 只看该作者
重新录了一下, 加上:
web_add_header("x-ajaxpro-method",
                "AddDate");
可以了。 另外还有个问题:

我使用web_custom_request("Default2,App_Web_yncmhfpw.ashx_2",
                "URL=http://localhost/TestLR2/Default2.aspx",
                "Method=POST",
                "Resource=0",
                "RecContentType=text/plain",
                "Referer=http://localhost/TestLR2/Default2.aspx",
                "Snapshot=t221.inf",
                "Mode=HTTP",
                "EncType=text/plain; charset=utf-8",
                "Body={\"xxx\":\"333\"}",
                LAST);

提交了xxx数据。 但我在Asp.net后台页面(*.cs)中的Page_Load方法中通过以下方法获取:

Response.Write("Request.Form[\"xxx\"]:" + (Request.Form["xxx"] != null ? Request.Form["xxx"].ToString() : "") + "\r\n<br>");
            Response.Write("Request.QueryString[\"xxx\"]:" + (Request.QueryString["xxx"] != null ? Request.QueryString["xxx"].ToString() : "") + "\r\n<br>");
            Response.Write("Request[\"xxx\"]:" + (Request["xxx"] != null ? Request["xxx"].ToString() : "") + "\r\n<br>");
            Response.Write("Request.Params[\"xxx\"]:" + (Request.Params["xxx"] != null ? Request.Params["xxx"].ToString() : "") + "\r\n<br>");

为什么获取不到呢?  如果使用Post的, 应该用Request.Form["key"]取; 如果使用Get,则应该使用Request.QueryString["key"]取。这里使用Post, 但不知道为什么一个也取不到。

请帮看一下, 多谢!
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2009-11-3 17:24:00 | 只看该作者
按照我的理解
如果你调试的时候代码可以通过
那就不是代码的原因,不用在这方面多费工夫
现在使用loadrunner收不到数据 ,还是录制的时候有问题。
应该在lr的代码上找原因
我感觉这里应该是缺少什么头文件了
你按照我4楼的解决方法重新录制一下
然后再看看
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2009-11-3 17:47:21 | 只看该作者
不管它怎么实现,你只要知道产生了什么Http请求模拟这个请求就行了,别老从功能的角度考虑
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2009-11-3 18:04:55 | 只看该作者
原帖由 云层 于 2009-11-3 17:47 发表
不管它怎么实现,你只要知道产生了什么Http请求模拟这个请求就行了,别老从功能的角度考虑


云版主一针见血
不要在上层考虑过多
回复 支持 反对

使用道具 举报

该用户从未签到

9#
 楼主| 发表于 2009-11-3 18:52:10 | 只看该作者
多谢各位了。

从Request.InputStream中可以得到。 LR Body参数的值。
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-11-19 01:46 , Processed in 0.077642 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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