jmeter 与 json
作者:互联网
1、添加一个 http信息头管理:
Add new value for Name = “Content-Type” and value = “application/json” (without quotes).
2、增加一个http sample :
使用body data进行json格式数据请求
3、json响应内容截取:
a、增加一个 BSF POSTPROCESSOR选择js语言,script内容如下:
// Turn the JSON into an object called 'SearchResponse' eval('var SearchResponse = ' + prev.getResponseDataAsString()); // Create a variable called haveBoots_# containing the number of matching URLs // For Each Result // Create a variable called haveBoots and assign it the URL vars.put("haveBoots_#", SearchResponse.responseData.results.length); for (var counter = 1; counter <= SearchResponse.responseData.results.length; counter++) { var x = SearchResponse.responseData.results[counter - 1]; // haveBoots = theUrl vars.put("haveBoots" + counter, x.unescapedUrl); }
b、增加一个 BEANSHELL POSTPROCESSOR
import org.json.JSONArray;
import org.json.JSONObject;
String jsonString = prev.getResponseDataAsString();
JSONArray equipmentParts = new JSONArray(jsonString);
JSONArray parts = new JSONArray();
for(int i=0;i<equipmentParts.length();i++ ){
JSONObject equipmentPart = equipmentParts.getJSONObject(i).getJSONObject("equipmentPart");
JSONObject allAttributes = equipmentPart.getJSONObject("allAttributes");
JSONObject part = new JSONObject();
part.put("partId",allAttributes.getLong("equipmentPartId"));
part.put("partNumber",allAttributes.getString("compositePartName"));
// add more here
parts.put(part);
}
vars.put("jsonResponse", parts.toString());后续直接使用 ${jsonResponse}即可
c、增加一个正则表达提取器
下面再增加一个 foreach控制器,将 books的变量传递到bookname变量中,在http请求中使用${bookname}即可
转https://www.cnblogs.com/yingchen/p/5080453.html
WEB 业务测试中需要关注的问题
汇总起来分为: 1、浏览器自身的一些操作,后退键,刷新键,样式兼容,多浏览器之间的一些操作
2、键盘快捷键的一些支持
3、所有前端校验,必须也在后端代码进行校验,验证后端是否校验可越过前端校验进行
4、模拟用户的操作,可能因为网络问题,多一些内容多次点击或手动中断后,系统如何表现
5、依赖三方的一些内容,如果在三方出现问题时,自身系统如何表现?-健壮性的考虑
6、并发性考虑,多中户同时对一个资源进行操作,是否会虚增资源内容
7、安全性考虑,参数输入js脚本,或者将内容进行编码后提交
8、某些页面需要登录后才可以访问,记录下此url,退出后再次在页面访问.
9、依赖的接口的性能关注
测试中需要查看内容:1、数据库,确认自己的操作与数据库中的内容一致
2、日志,确认操作不会引起空指针或exception
3、查看各种请求及相应内容,关注逻辑细节
接口测试: 接口参数的个数,类型,次序 等
-
输入的实际参数与形式参数的个数是否相同;
-
输入的实际参数与形式参数的属性是否匹配;
-
调用其他模块时所给实际参数的个数是否与被调模块的形参个数相同;
-
调用其他模块时所给实际参数的属性是否与被调模块的形参属性匹配;
-
调用预定义函数时所用参数的个数、属性和次序是否正确;
-
是否存在与当前入口点无关的参数引用;
-
是否修改了只读型参数;
1.浏览器的后退按钮
提交表单一条已经成功提交的记录,back后再提交,看系统会如何处理。检查多次使用back健的情况在有back的地方,back,回到原来的页面,再back,重复几次,看是否会报错。
2.通过修改URL中的参数,向服务器发起请求,看看会有什么样的结果
利用一些工具,如http watch,可以记录和捕获向服务器发起的URL请求,然后修改其中的参数向服务器发起请求.该功能点可以和安全测试结合起来.
3.对表单多次提交
对提交按钮快速多次点击提交,看看会不会在数据库中形成多条记录.网速或响应快时,这点容易被遗漏,但用户的网络可能慢,很容易多次点击提交.如果前端做了处理,试试捕获在提交时生成的URL,绕过页面,再次对服务器发起请求,会有什么结果
4、多浏览器下进行相同操作,对于共享资源的消耗是否会出现错误
5、使用fiddler跨过了前端校验后,后端是否也做了一致的校验
简单使用beanshell的内容,进行测试内容的判断
这里通过断言内容,修改if的条件,达到发送警报邮件的功能
beanshell 代码如下: SampleResult 等效于 prev
log.error(vars.get("ReqStatus"));
int count=Integer.parseInt(vars.get("errorcount").trim());
vars.put("result", SampleResult.getResponseDataAsString());
if (SampleResult.getResponseDataAsString().indexOf("sessionId")!= -1)
{
String code =SampleResult.getResponseCode();
String msg = SampleResult.getResponseMessage();
String data = SampleResult.getResponseDataAsString();
log.error("------return code "+ code);
vars.put("responsecode", code);
vars.put("responsedata",data);
vars.put("responsemsg",msg);
count = count + 1;
vars.put("errorcount", count.toString());
if((count%1)==0)
{
vars.put("sendmail","yes");
}
else{
vars.put("sendmail","no");
}
SampleResult.setSuccessful(true);
}
else
{
String code =SampleResult.getResponseCode();
String msg = SampleResult.getResponseMessage();
String data = SampleResult.getResponseDataAsString();
log.error("------return code "+ code);
vars.put("responsecode", code);
vars.put("responsedata",data);
vars.put("responsemsg",msg);
SampleResult.setSuccessful(true);
}
设置系统的变量如下:
附件顺便加上beanshell的用法汇总:
http://www.cnblogs.com/xxyBlogs/p/5966194.html
标签:code,SampleResult,vars,json,参数,put,jmeter,String 来源: https://www.cnblogs.com/a00ium/p/10360177.html