Gatling的jsonPath默默地将null对象转换为“ null”字符串

时间:2020-08-04 06:13:01

标签: json scala jackson gatling

我目前正在评估gatling 3.3.1的用例,并且需要从服务器检索JSON数据,对其进行处理并将其发送回去。不幸的是,我遇到了一个有趣的路障,响应中包含空值。

我正在使用Jackson的ObjectMapper将值反序列化并序列化为@section Scripts { <script> var startDate; var endDate; var status; var oTable; $(document).ready(function () { BindData(); $('#tblExample tbody').on('click', 'td.details-control', function () { $('#tblExample tbody > tr').addClass('rowInactive'); debugger var tr = $(this).closest('tr'); var row = oTable.row(tr); $(tr).removeClass('rowInactive'); if (row.child.isShown()) { // This row is already open - close it row.child.hide(); tr.removeClass('shown'); $('#tblExample tbody > tr').removeClass('rowInactive'); } else { // Open this row row.child(format(row.data())).show(); tr.addClass('shown'); } var tr = $(this).closest('tr'); var row = oTable.row(tr); //if (row.child.isShown()) { // // This row is already open - close it // row.child.hide(); // tr.removeClass('shown'); //} //else { // // Open this row // row.child(format(row.data())).show(); // tr.addClass('shown'); //} }); }); $('#btnSearch').click(function () { startDate = $('#reportrange').data('daterangepicker').startDate.format("MM-DD-YYYY"); endDate = $('#reportrange').data('daterangepicker').endDate.format("MM-DD-YYYY"); status = $('#searchbystatus').val(); if ($.fn.DataTable.isDataTable("#tblExample")) { $('#tblExample').DataTable().destroy(); } BindData(); }); $(function () { var start = moment().subtract(29, 'days'); var end = moment(); function cb(start, end) { $('#reportrange span').html(start.format('MM-DD-YYYY') + ' To ' + end.format('MM-DD-YYYY')); } $('#reportrange').daterangepicker({ startDate: start, showDropdowns: true, endDate: end, format: 'mmm-DD-YYYY', ranges: { 'Today': [moment(), moment()], 'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')], 'Last 7 Days': [moment().subtract(6, 'days'), moment()], 'Last 30 Days': [moment().subtract(29, 'days'), moment()], 'This Month': [moment().startOf('month'), moment().endOf('month')], 'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')] } }, cb); cb(start, end); }); function format(d) { debugger // `d` is the original data object for the row if (d == undefined) { html = ' <div style="text-align: center;">There is No City in <b>' + d.stateName + '</b> </div > '; } else if (d.companyRegionList == null) html = ' <div style="text-align: center;">There is No City in <b>' + d.stateName + '</b> </div > '; else { var html = '<div class="table-responsive light-thead border-bottom-0">' + '<table id="htmltable" class="table mb-0">' + '<thead><tr">' + '<th>CITY CODE</th>' + '<th>CITY NAME</th>' + '<th>DIRECTOR</th>' + '<th>CONTACT</th>' + '<th>STATUS</th>' + '</tr></thead><tbody>'; for (let i in d.companyRegionList.companyList) { html += '<div><tr><td>' + d.companyRegionList.companyList[i].code + '</td>'; html += '<td>' + d.companyRegionList.companyList[i].companyName + '</td>'; html += '<td>' + d.companyRegionList.companyList[i].companyDirector + '</td>'; html += '<td>' + d.companyRegionList.companyList[i].officePhone + '</td>'; html += '<td>' + d.companyRegionList.companyList[i].companyStatus + '</td></tr>'; } } html += '</tbody</table></div>'; return html; } function BindData() { oTable = $('#tblExample').DataTable({ scrollY: false, //destroy: true, ordering: false, paging: false, searching: false, info: false, "autoWidth": true, "ajax": { "url": "/company/GetData", "type": "Get", "datatype": "json", "dataSrc": "data", "data": { Status: status, startDate: startDate, endDate: endDate } }, columns: [ { data: 'id', visible: false }, { data: 'stateName' }, { data: 'isRegion' }, { data: 'regionDirector' }, { data: 'phoneNumber' }, { data: 'email' }, { "className": 'details-control', "orderable": false, "data": null, "defaultContent": '+' } ], destroy: true }); } </script> }

HashMap[Object,Any]

有一个网站虚拟人可以尝试:https://webhook.site/7130d3d3-ddcc-4c36-8864-c3a6c4c13cf4

网络服务器返回:

scenario("scenario")
  .exec(http("get")
    .get(url)
    .asJson
    .check(jsonPath("$").saveAs("json")))
  .exec(http("post")
    .post(url)
    .asJson
    .body(StringBody("${json}")))

加特林脚本回显:

{
  "name": "frodo",
  "note": null
}

您看到,注释字段变为{ "name": "frodo", "note": "null" } ,而不是正确的"null"。为什么会这样呢?有办法解决吗?难道我做错了什么?我缺少一些杰克逊的选择?

1 个答案:

答案 0 :(得分:2)

这是一个bug,它将在下一版本(3.4.0)中得到修复。 感谢您的举报,但是下次您能在Github上使用我们的bugtracker吗? :)

相关问题