前一阵和开发的同事一起測试某个系统的性能。此系统是发送Ajax请求到后台,再调用第三方的某项服务。

第三方服务的性能由不得我们控制。因此开发者做了一下改进。超时则直接返回。

于是在loadrunner这边,结果就好看的多了。当时我并没在意,后来一琢磨。这岂不是说loadrunner不检查Ajax内容就通过了?为了验证这个论断,做了个简单的演示样例。

首先是写个前端的html,发送Ajax到后台。再写个servlet处理请求,返回不同的内容。

然后用loadrunner录制脚本并回放,以验证对Ajax内容的检查状况。

新建一个web项目,加入一个html文件和一个servlet

html内容例如以下:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>用户注冊</title>
</head>
<body>
<script language="JavaScript">
var flag;
function createXHR(){
if (window.XMLHttpRequest){
return new XMLHttpRequest();
}else{
return new ActiveXObject("Microsoft.XMLHTTP");
}
} function checkUser(username){
if(!username==""){
var xhr=createXHR();
xhr.onreadystatechange = function(){
if (xhr.readyState == 4){
if (xhr.status == 200){
var text = xhr.responseText;// 接收返回内容
if (text == "Existed"){
flag = false;
document.getElementById("msg").innerHTML = "用户名反复。无法注冊!";
}else{
flag = true;
document.getElementById("msg").innerHTML = "恭喜。此用户名能够注冊。";
}
}
}
};
//发送用户名到servlet
xhr.open("POST","CheckName?username="+username,true);
xhr.send(null);
document.getElementById("msg").innerHTML = "正在验证……";
}else flag=false;
}
</script> <form action="CheckName" method="post" onsubmit="return flag">
用户名:<input type="text" name="username" onblur="checkUser(this.value)"><span id="msg"></span><br>
密  码:<input type="password" name="password"><br>
<input type="submit" value="注冊">
</form>
</body>
</html>

这是一个简单的模拟注冊的页面,ajax发送输入的用户名到后台。

servlet处理代码例如以下:

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String username = request.getParameter("username");
PrintWriter out=response.getWriter();
if(username.equals("zhangsan")){
out.print("Existed");
}else{
out.print("Registered Successfully");
} }

当输入的用户是zhangsan时,ajax返回username已存在的标志。除此之外返回能够注冊的提示。(为了模拟网络延时,停顿500毫秒)

loadrunner录制的脚本例如以下:

Action()
{
web_reg_find("Text=用户注冊",LAST); web_url("aaa",
"URL=http://192.168.1.102:8080/aaa/",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTML",
LAST); //web_reg_find("Text=Existed",LAST); web_custom_request("CheckName",
"URL=http://192.168.1.102:8080/aaa/CheckName?username=zhangsan",
"Method=POST",
"Resource=0",
"Referer=http://192.168.1.102:8080/aaa/",
"Snapshot=t2.inf",
"Mode=HTML",
"EncType=",
LAST); //web_reg_find("Text=Registered Successfully",LAST); web_custom_request("CheckName_2",
"URL=http://192.168.1.102:8080/aaa/CheckName?username=lisi",
"Method=POST",
"Resource=0",
"Referer=http://192.168.1.102:8080/aaa/",
"Snapshot=t3.inf",
"Mode=HTML",
"EncType=",
LAST); web_submit_data("CheckName_3",
"Action=http://192.168.1.102:8080/aaa/CheckName",
"Method=POST",
"Referer=http://192.168.1.102:8080/aaa/",
"Snapshot=t4.inf",
"Mode=HTML",
ITEMDATA,
"Name=username", "Value=lisi", ENDITEM,
"Name=password", "Value=123456", ENDITEM,
LAST); return 0;
}

凝视中的两行是手工加的,加上后就能够对Ajax返回的内容进行检測了。

验证loadrunner对Ajax内容的校验的更多相关文章

  1. loadrunner测试ajax框架

    loadrunner测试ajax框架的系统时,录制回放都没有报错,但是回放后系统中没有产生数据,解决方法 loadrunnerajax框架测试脚本headerajax [问题描述]用loadrunne ...

  2. BBS(第一天)项目之 注册功能实现通过forms验证与 前端ajax请求触发查询数据库判断用户是否存在的功能实现

    1.BBS项目之注册功能通过forms验证 from django import forms from blog.models import User from django.contrib.auth ...

  3. ajax实现用户名校验的传统和jquery的$.post方式

    第一种:传统的ajax异步请求,后台代码以及效果在最下边 首先我们在eclipse中创建一个注册页面regist.jsp,创建一个form表单,注意,由于我们只是实现用户名校验的效果,下边红色部门是我 ...

  4. LoadRunner测试AJAX

    什么是AJAX? Ajax, shorthand for Asynchronous JavaScript and XML, is a web development technique for cre ...

  5. ajax案例_校验用户名

    目录 ajax案例_校验用户名 代码下载 需求 流程 搭建环境 开发代码 1_jsp 1_servlet 1_service.dao 2_servlet 2_jsp 测试后,功能实现,完结撒花 aja ...

  6. Atitit   发帖机实现(3 )---usrQBN023 js提交ajax内容到后端规范与标准化

    Atitit   发帖机实现(3 )---usrQBN023 js提交ajax内容到后端规范与标准化 大段内容务必要替换转义换行符号1 提交务必使用utf编码,否则解码后的可能缺失,是web serv ...

  7. 如何让搜索引擎抓取AJAX内容? 转

    越来越多的网站,开始采用"单页面结构"(Single-page application). 整个网站只有一张网页,采用 Ajax 技术,根据用户的输入,加载不同的内容. 这种做法的 ...

  8. 【学习笔记】AJAX内容拓展

    题记——近期回顾<javaScript高级程序设计>ajax章节,发现书中对封装一个ajax库并不完美,结合之前看到博客,对ajax库做一点点的优化. 参考博客:如何去封装一个ajax库 ...

  9. 使用Wisdom RESTClient进行自动化测试,如何取消对返回的body内容的校验?对排除的JSON属性字段不做校验?

    使用 Wisdom RESTClient 进行自动化测试 REST API,默认是对返回HTTP状态码和body内容都进行严格匹配和校验. (1). 如果每次触发API返回的body内容是动态变化的, ...

随机推荐

  1. Coursera无法观看课程解决方案

    Coursera无法观看课程解决方案 最近Cousera一直表现不佳,课程视频无法观看.小编结合网上找到的信息,操作一番便解决了问题,视频也可以正常观看了. 首先是win+s找到记事本,并用管理员身份 ...

  2. Leetcode 480.滑动窗口中位数

    滑动窗口中位数 中位数是有序序列最中间的那个数.如果序列的大小是偶数,则没有最中间的数:此时中位数是最中间的两个数的平均数. 例如: [2,3,4],中位数是 3 [2,3],中位数是 (2 + 3) ...

  3. [git 学习篇] --创建git创库

    http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013743256916071d ...

  4. 使用PHPExcel单元格样式添加不上的原因

    按照文档上的样式设置方法设置样式,一直不成功.后来发现是得要在创建了sheet,并选择某一个sheet作为活动sheet后再设置才可以.这里记录一下.

  5. spring AOP详解三

    CGLib采用非常底层的字节码技术,可以为一个类创建子类,并在子类中采用方法拦截的结束拦截所有父类方法的调用,并顺势织入横切逻辑.我们采用CGLib技术可以编写一个可以为任何类创建织入横切逻辑代理对象 ...

  6. python3 保存一个网页为html文件

    我使用的python版本为3.5.2. 最近租房子,恨透了中介,想绕过中介去租.结果发现豆瓣同城里有好多二房东,感觉人都还不错.但是豆瓣这里没有信息检索的功能,只能人工地看房子的地址,非常地不方便.所 ...

  7. Codeforces 903E Swapping Characters

    题目大意 考虑一个未知的长为 $n$($2\le n\le 5000$)由小写英文字母构成的字符串 $s$ .给出 $k$($1\le k\le 2500$,$nk\le 5000$)个字符串 $s_ ...

  8. 搜索引擎快捷导航:一个简单的chrome插件(教程)

    一.如何通过练习来提高学习新框架的最好姿势是:基于现有的业务来学习.即从工作中学习,从实践中学.但是,如果一直只使用新的框架来重写旧的业务,成长也会趋近于0.第一次,使用新框架时收获可能颇丰:第二次, ...

  9. hdu5730 Shell Necklace 【分治fft】

    题目 简述: 有一段长度为n的贝壳,将其划分为若干段,给出划分为每种长度的方案数,问有多少种划分方案 题解 设\(f[i]\)表示长度为\(i\)时的方案数 不难得dp方程: \[f[i] = \su ...

  10. BZOJ 2501: [usaco2010 Oct]Soda Machine 离散+差分

    [usaco2010 Oct]Soda Machine Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 266  Solved: 182[Submit][ ...