【Spock-Genesis】字符串自动生成——Gen.string

文章目录


前言

本文主要针对字符串如何自动生成展开探索。通过使用Gen.string方式,可以自动生成随机字符串,也可以自动生成大小可控制字符串,同时也支持正则匹配生成某种模式的字符串


一、自定义随机字符串的生成

如果我们不关心字符串的长度或者内容,我们只是想生成一个字符串,那么调用Gen.getString()或更加groovy的方式Gen.string就足够了。

def 'using static factory methods'() {
        expect:
        Gen.string.iterator().next() instanceof String
        println(Gen.string.iterator().next())
        }

运行结果且每次运行结果都会不一样:

%NLY4<1YM@hO^yXPUBy&F{4u)-bNXDt7c:dJi|gL;Yt7RF>v>%Ry8gE#lgyZMaP61x,?ovUF9"Yd!22#}T(b>:]pQj0kA0jtT'\AVy./<kNJ[ec1?uAL;U:jW~1*z(2)2wc*2 7mo.u^>vd\Cq#J/plsP+Q%ZexU.iyoe=5Qc_%Ro0K--c/QfdpCWxZ-~1+pf;N+$M}DWS>BZnzZ"h25O1-oJj6gI_fc}mb!|!ehxQE KaTeX parse error: Undefined control sequence: \3 at position 24: …jU?Gu0-:b[S3Kro\̲3̲H&8[]}ByU@wD/}U:NhPTe+3Pkn0VRH=jBI-SZI/’}n1aY3=Ap3\

二、可控制长度的字符串

如果我们想要限制生成的单词长度,可以使用以下几种方式

设置字符串最大长度Gen.string(num)

def 'create a string by length'() {
        when: 'establishing max string length'
        def shortWord = Gen.string(5).iterator().next()


        then: 'word size should be less equal than max'
        shortWord.size() <= 5
        println(shortWord)
        }

运行结果且长度都不大于5:

a6j’

设置字符串生成长度大小范围

    def 'create a string by length'() {
    
        when: 'establishing min and max word size'
        def largerWord = Gen.string(5,10).iterator().next()

        then: 'word should be larger equal min'

        largerWord.size() >= 5

        and: 'word should be less equal max'
        largerWord.size() <= 10
        println(largerWord)
    }

运行结果且永远大于等于5小于等于10

QI-\3

三、正则匹配生成固定格式的字符串

通过正则匹配可以生成固定格式的字符串,例如访问链接

    def 'generate a string using a regular expression'() {
        expect:
        generatedString ==~ '(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|]\\d'
        println(generatedString)
        where:
        generatedString << Gen.string(~'(https?|ftp|file)://[-A-Z0-9+&@#/%?=~_|!:,.;]*[-A-Z0-9+&@#/%=~_|]\\d').take(10)
    }

运行结果且根据take参数10选择生成10个:

https://|?#+:__=,!;=,:S-&-?;##|!,:%|2/?:J=,P:,80_/3%|=!=#,_=:-:–?!?;??+/3+/!?!#,F_/.%-!1,0:=_|+=_.|;/%%M-!+A-…!-=-!E+#7.|8F=:.?=~~9

http://~/;,=%;!=-?!!+O!!.%:=+%-.=:#?5-?%…#M/+0

ftp://||,|&-#S1/##=%~!%-##+##0

https://#,!,/._:±=,.-+/!;,#=?9!##:#,!=-?&_#3;#!%–;=|/,+|?:,:.1.!+9/-?%;.#?Q#-._6##.H#?.|K!!!1G:O?H.0|/=;|&,!+#…:==2!#-;?;:=#,.M&,|=!_|:|_.=B%?|?|=,%|_8.&/?M±!+4

file://=#-,=,4-6J=-Q.+.:9&==3;#.##/4#-!.-:&|9//:|:|_:._,#|!1|/;2!?W,6;#+_|?#,;3=/,-+=;4/_&+!?::W0?-S,@.,=,–.3.L=#/+=?57,?+.!:+|&&?6UP;!.S,-&-;|#=?-/-==,1?~!+!,?||5?2#5==3

ftp://;.||&?#Y–,A:M&|:!!.T-

上一篇:Cascade rcnn在linux环境下运行的调试记录(pytorch版本)


下一篇:解决白盒、mock、性能、自动化测试脚本中的数据自动生成问题——Spock-Genesis