groovy JsonSlurper随机数、随机字母数字和日期断言

groovy JsonSlurper随机数、随机字母数字和日期断言,groovy,ready-api,jsonslurper,Groovy,Ready Api,Jsonslurper,我对服务测试和Groovy非常陌生。以下是我的回应 { encodedDiscountId=1275479, encodedGuid=gOHSkGzQEee4-AJiXJP2jg, expirationDate=2017-08-17 17:00:00 } 我需要以下断言的帮助: 我需要断言折扣值是否都是7位长的随机数字 我需要断言我得到的是大写和小写字母数字,带“-” 我需要声明expirationDate应该是系统日期后的30天 我尝试了脚本断言,并不断得到这个错误

我对服务测试和Groovy非常陌生。以下是我的回应

{
    encodedDiscountId=1275479, 
    encodedGuid=gOHSkGzQEee4-AJiXJP2jg,
    expirationDate=2017-08-17 17:00:00
}
我需要以下断言的帮助:

  • 我需要断言折扣值是否都是7位长的随机数字
  • 我需要断言我得到的是大写和小写字母数字,带“-”
  • 我需要声明expirationDate应该是系统日期后的30天
  • 我尝试了脚本断言,并不断得到这个错误

    import groovy.json.JsonSlurper
    
    def response = messageExchange.response.responseContent
    def slurper = new JsonSlurper()
    def json = slurper.parseText(response)
    assert json.encodedDiscountId.size() == 7
    assert json.encodedDiscountId.matches("[0-9]")
    
    错误:

    assert json.encodedDiscountId.matches("[0-9]") | | | | 1043947 false [encodedDiscountId:1043947, encodedGuid:l0wWcG2KEee4-AJiXJP2jg, expirationDate:2017-08-18 17:00:00]
    

    正则表达式仅适用于字符类中0-9之间的单个字符。您需要断言整个字符串是数字,类似于
    /^[0-9]+$

    ^
    匹配行首,
    $
    匹配行尾,
    [0-9]+
    表示至少1个数字。由于它看起来像是
    encodeddisontid
    始终是7位数字,因此您可以将其作为
    ^[0-9]{7}$
    包含在正则表达式中


    由于正则表达式中有一个
    $
    ,如果您使用双引号,则需要将其转义为
    \$
    “^[0-9]+\$”
    )或使用斜杠字符串(
    /^[0-9]+$/
    )或单引号(
    '^[0-9]+$”
    )。

    请将您的代码、输出和错误作为文本而不是图像发布。感谢@doelleri,
    断言json.encodeddisontid.matches(“^[0-9]{7}$”)
    并不断获取此错误
    启动失败:Script27.groovy:9:美元符号后的非法字符串正文字符;解决方案:在第9行第38列转义字面美元符号“\$5”或将值表达式“${5}”括起来。assert json.encodeddisontid.matches(“^[0-9]{7}$”)^org.codehaus.groovy.syntax.SyntaxException:美元符号后的非法字符串体字符;解决方案:要么转义一个字面美元符号“\$5”,要么将值表达式“${5}”括在第9行第38列。
    @peter您需要使用斜杠字符串或单引号,以防止Groovy认为
    $
    是将变量插入GString,或者像错误所说的那样,用
    \$
    转义它。谢谢@doelleri,单引号有效。我的第一个断言通过了耶!