摘要:本文主要向大家介绍了SQLServer数据库之Jmeter接口测试通过SQL查询进行数据校验,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助。
本文主要向大家介绍了SQLServer数据库之Jmeter接口测试通过SQL查询进行数据校验,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助。
在使用Jmeter做查询类接口测试的时候,我们可以通过数据库查询结果与实际接口返回的结果进行数据校验。
接口的返回值:
{
""PageResult"":{
""SummaryData"":{
""SumMonery"":10000,
""SumFee"":900,
""SumIncome"":16000
},
""PageSize"":10,
""CurrentPage"":1,
""Data"":[
{
""Id"":10,
""Fee"":7.65,
""Monery"":8.65,
""UserName"":""测试"",
""Time"":""2017-12-12 09:00:00"",
""PartnerIdentity"":""江西省代理"",
""PartnerType"":1,
""State"":1,
""Income"":7.65
}
],
""TotalItems"":10
}
}
如上就是我们接口正常的返回数据。
我们使用Oracle作为数据库,因此需要加载Oracle安装目录下(C:\app\Administrator\product\11.2.0\dbhome_1\jdbc\lib)的ojdbc6.jar文件复制到Jmeter软件的lib\ext目录下。
在测试计划中导入odbc6.jar到classpath里头
然后新增一个JDBC连接配置
接着编写一个JAVA项目:
import com.alibaba.fastjson.*;import java.util.*;public class JsonDiff{ /** * 对JSON进行排序 * @param jsonStr * @return */ @SuppressWarnings({ ""rawtypes"", ""unchecked"" }) public static List<TreeMap<String,Object>> generateSortedTreeMap(String jsonStr){ //最终接受排序后的数据 List<TreeMap<String,Object>> dataList = new ArrayList<TreeMap<String,Object>>(); //对数据转换成有序的Map List<Map> list = new ArrayList<Map>(); try { list = JSON.parseArray(jsonStr, Map.class); }catch(Exception e) { System.out.println(""+++++++++转换JSON数组失败,尝试转换成JSON对象:""+e.getMessage()); try { Map obj = JSON.parseObject(jsonStr, Map.class); list.add(obj); }catch(Exception e1) { System.out.println(""+++++++++JSON对象转换失败:""+e.getMessage()); } } for(Map map:list) { //获取JSON的键 Set<String> keys = (Set<String>)map.keySet(); List<String> sortKeys = new ArrayList<String>(keys); //对键进行排序 Collections.sort(sortKeys); //使用有序列表来存储 TreeMap<String,Object> tree = new TreeMap<String,Object>(); for(String key:sortKeys) { tree.put(key, map.get(key)); } dataList.add(tree); } return dataList; } /** * 对比两个JSON * @param json1 * @param json2 * @return */ public static boolean compareJSON(String json1,String json2) { List<TreeMap<String,Object>> data1List = generateSortedTreeMap(json1); List<TreeMap<String,Object>> data2List = generateSortedTreeMap(json2); for(TreeMap<String,Object> map:data1List) { if(!data2List.contains(map)) { return false; } } return true; }/* public static void main(String[] args) { //JSON字符串 //String json1 = ""[{\""size\"": 6,\""data\"": \""hello linux\"",\""data1\"":{\""aa\"":1,\""id\"": {\""userid\"": 3333,\""name\"": \""hello world\""}}}},{\""data\"": \""world\"",\""size\"": 7}]""; //String json2 = ""[{\""data\"": \""world\"",\""size\"": 7}, {\""data1\"":{\""aa\"":1,\""id\"": {\""userid\"": 3333,\""name\"": \""hello world\""}},\""data\"": \""hello linux\"",\""size\"": 6}]""; //String json1 = ""[{\""name\"": \""work\"",\""passwd\"": \""123456\"",\""classname\"": [ {\""name\"": \""match\"",\""score\"":78},{\""name\"": [ {\""name\"": \""match\"",\""score\"":78} ]} ],\""teacher\"":[ {\""name\"": \""bob\"",\""classname\"": \""99\"" }]}]""; //String json2 = ""[{\""name\"": \""work\"",\""passwd\"": \""123456\"",\""classname\"": [ {\""score\"":78,\""name\"": \""match\""},{\""name\"": [ {\""name\"": \""match\"",\""score\"":78} ]} ],\""teacher\"":[ {\""name\"": \""bob\"",\""classname\"": \""99\"" }]}]""; //String json1=""{\""size\"": 6,\""data\"": \""hello linux\""}""; //String json2=""{\""data\"": \""hello linux\"",\""size\"": 6}""; //String json1 = ""{\""name\"": \""testuser\"",\""passwd\"": \""123456\"",\""classname\"": [ {\""name\"": \""match\"",\""score\"":78},{\""name\"": [ {\""name\"": \""match\"",\""score\"":78} ]} ],\""teacher\"":[ {\""name\"": \""bob\"",\""classname\"": \""99\"" }]}""; //String json2 = ""{\""passwd\"": \""123456\"",\""name\"": \""testuser\"",\""classname\"": [ {\""name\"": \""match\"",\""score\"":78},{\""name\"": [ {\""name\"": \""match\"",\""score\"":78} ]} ],\""teacher\"":[ {\""name\"": \""bob\"",\""classname\"": \""99\"" }]}""; boolean result = compareJSON(json1, json2); System.out.println(result); }*/}
最后打成一个jar包,也新增到刚才的CLASSPATH下
在HTTP连接下新建一个JDBC PostProcessor
再然后新建一个BeanShell PostProcessor
import com.alibaba.fastjson.*;import java.util.*;import JsonDiff.*;String response_data =prev.getResponseDataAsString(); //获取web响应内容JSONObject obj=JSON.parseObject(response_data);String app_str = obj.get(""Data"").toString().toLowerCase();log.info(""response:""+app_str); List results=vars.getObject(""sqlresult""); //获取sql查询String sql_str=JSONObject.toJSONString(results).toLowerCase(); //list转换为json数据log.info(""SQL查询:""+sql_str);boolean result=JsonDiff.compareJSON(apps_str,sql_str)if(result){ log.info(""数据一致""); }else{ //用预期的JSON串和查询到的结果JSON串进行对比 //如果不一样的情况下,说明数据库的断言失败,可能是程序的问题 String result =prev.getResponseDataAsString(); //拿到实际结果的值,用于存放到返回数据中 prev.setResponseCode(""506""); //我们自定义了一个CODE码,告诉结果显示的CODE是这个 prev.setSuccessful(false); //设置结果为错误 prev.setResponseMessage(""接口断言通过,数据库校验未通过""); //设置一个提示信息,大概是说明原因导致的 //写入结果返回的结果,还有数据库校验未通过,我们的预期数据库的值是,实际的值是,加上这个是为了方便定位问题 prev.setResponseData(result+"",\n数据库校验未通过,\n预期值:""+str+"",\n实际值:""+apps_str); }
如果校验不通过将自动返回一个错误的值,否则返回正常的值
ps:如果需要对返回的结果做替换可以使用
String get_data=response_data.replaceAll(""old"",""new"");
例如:
String data2 = rdata.replaceAll(""\""SummaryData\"":\"""", ""\""SummaryData\"":["");
String response_data = data2.replaceAll(""}\"",\""IsSucess\"""",""}],\""IsSucess\"""");
本文由职坐标整理并发布,希望对同学们学习SQL Server有所帮助,更多内容请关注职坐标数据库SQL Server数据库频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号