使用Beanshell Postprocessor修改从JSON提取器中提取的数据

时间:2017-04-10 03:59:22

标签: json jmeter

根据回复,我使用JSON提取器提取了以下值,并将名称命名为 data 。但在提取的值中,我无法找到变量名和值的双引号。

{
:   TaxcomputationId=929e1214-cc1a-e711-80c3-000d3ae017ab, 
:   EmployeeId=6524734a-c81a-e711-80c3-000d3ae017ab, 
:   PlanId=609e1214-cc1a-e711-80c3-000d3ae017ab, 
:   AmendmentIndicator=O, 
:   RPEmpId=103622, 
:   Surname=Galvin, 
:   FirstName=Benjaminn, 
:   TFN=433260373, 
:   TerminationDate=16/09/2026, 
:   HomeCountry=null, 
:   HostCountry=null, 
:   StartDateOverseasEmployment=null, 
:   EndDateOverseasEmployment=null, 
:   Assignments=
:   [
:   :   "06\/12\/2006",
:   :   "07\/10\/2010",
:   :   "United States",
:   :   "Australia"
:   ],
:    InboundAssigneeIsNotTemporaryResident=No, 
:   TaxResidencyDuringAssignment=n/a, 
:   DateOfExpiry=24/01/2025, 
:   TaxResidencyAtTP=Non-resident, 
:   ApportionedBasedOnTaxLogic=Yes, 
:   ActualPlanId=1411386-1350, 
:   DOG=/Date(1423094400000)/, 
:   DOV=/Date(1444867200000)/, 
:   DateOfGrant=05/02/2015, 
:   DateOfVest=15/10/2015, 
:   DateOfExercise=22/01/2023, 
:   DateOfSale=31/05/2021, 
:   TaxLogic=Deferred Shares/Performance Rights, 
:   TaxingPoint=Vest, 
:   TaxingDate=15/10/2015, 
:   NoOfESSInterests=52, 
:   FMVAtTPAUD=24.04, 
:   ExercisePriceAUD=0.00, 
:   NoOfSharesWithheldForHypo=1960, 
:   ApportionGrossIncome=Yes, 
:   Comments=, 
:   IncomeNetHypoAUD=-45861.80, 
:   AustralianSourcedIncome=0.00, 
:   ForeignSourcedIncome=-45861.80, 
:   ReportableAmount=0.00, 
:   PercentageOfESSIncomeTaxableInAU=0.00, 
:   IsCalculated=true, 
:   IsLocked=false, 
:   SubmissionStatus=Draft, 
:   IsError=1, 
:   ErrorCells=
:   [
:   :   30,
:   :   32
:   ]
}

从上面的JSON提取器响应中,我需要单独修改TFN值,并需要将此数据作为参数传递给下一个请求。我尝试过使用beanshell编码它不起作用。任何人都可以知道如何改变这些价值。

2 个答案:

答案 0 :(得分:1)

我建议放弃您的JSON路径提取器并完全切换到JSR223 PostProcessorGroovy语言。相关的Groovy代码将:

  • 执行第一个result对象
  • 的提取
  • 改变" TFN"属性值为foo
  • 将最终的JSON存储到data JMeter变量

看起来像:

def json = new groovy.json.JsonSlurper().parse(prev.getResponseData())
def data = json.result.get(0)

data.each {entry ->
    def name = entry.getKey()
    if (name.equals("TFN")) {
        entry.setValue("foo")
    }
}
vars.put("data",new groovy.json.JsonBuilder(data).toPrettyString())

参考文献:

答案 1 :(得分:0)

在jp @ gc中,JSON路径提取器使用$ TFN作为JSONPATH表达式并将其存储在变量中,然后您可以将该变量作为参数传递给下一个请求