diff --git a/data/domain/esp.v1.txt b/data/domain/esp.v1.txt deleted file mode 100644 index 1d17f6759a0f1608ec5e703fb749d2b896290d3e..0000000000000000000000000000000000000000 --- a/data/domain/esp.v1.txt +++ /dev/null @@ -1,8 +0,0 @@ -qq.com -163.com -263.net -aliyun.com -126.com -gmail.com -outlook.com -hotmail.com \ No newline at end of file diff --git a/data/domain/self.v1.txt b/data/domain/self.v1.txt deleted file mode 100644 index 43014def2f72ab8a8202cdbece8273501b198317..0000000000000000000000000000000000000000 --- a/data/domain/self.v1.txt +++ /dev/null @@ -1,2 +0,0 @@ -ngtesting.com -testfarm.net \ No newline at end of file diff --git a/demo/default.yaml b/demo/default.yaml index 92cd630a7e054fc1044a8732a1a75495a40b007d..d4e7145965d36274a55ad2274149bc81ccabea7b 100644 --- a/demo/default.yaml +++ b/demo/default.yaml @@ -140,5 +140,5 @@ fields: fields: - field: field_grandson prefix: int_ - range: 10-20 + range: 10-20:R postfix: diff --git a/demo/test/test.yaml b/demo/test/test.yaml index 2de0464bd529e6fc2b1ac0e9bf8027f4123b5f1c..1bdf70b68de0f8e9280c4a564b88e3cae0cb0576 100644 --- a/demo/test/test.yaml +++ b/demo/test/test.yaml @@ -114,52 +114,72 @@ fields: prefix: "[" postfix: "]\t" - - field: test20 - from: base.domain.domain.name.v1.yaml - use: number_with_esp - prefix: "" - postfix: "\t" - - field: test21 - from: base.domain.domain.name.v1.yaml - use: number_with_self - prefix: "" - postfix: "\t" - - - field: test22 - from: base.domain.domain.name.v1.yaml - use: letter_with_esp - prefix: "" - postfix: "\t" - - field: test23 - from: base.domain.domain.name.v1.yaml - use: letter_with_self - prefix: "" - postfix: "\t" - - - field: test24 - from: base.domain.domain.name.v1.yaml - use: western_with_esp - prefix: "" - postfix: "\t" - - field: test25 - from: base.domain.domain.name.v1.yaml - use: western_with_self - prefix: "" - postfix: "\t" - - - field: test26 - from: base.domain.domain.name.v1.yaml - use: pinyin_with_esp - prefix: "" - postfix: "\t" - - field: test27 - from: base.domain.domain.name.v1.yaml - use: pinyin_with_self - prefix: "" - postfix: "\t" - - - field: test28 - from: base.domain.domain.name.v1.yaml - use: western_with_custom - prefix: "" - postfix: "\t" +# - field: test20 +# from: base.domain.domain.v1.yaml +# use: one_number_at_common +# prefix: "" +# postfix: "\t" +# - field: test21 +# from: base.domain.domain.v1.yaml +# use: one_number_at_cn +# prefix: "" +# postfix: "\t" +# - field: test22 +# from: base.domain.domain.v1.yaml +# use: one_number_at_new +# prefix: "" +# postfix: "\t" +# +# - field: test23 +# from: base.domain.domain.v1.yaml +# use: one_letter_at_common +# prefix: "" +# postfix: "\t" +# - field: test24 +# from: base.domain.domain.v1.yaml +# use: one_letter_at_cn +# prefix: "" +# postfix: "\t" +# - field: test25 +# from: base.domain.domain.v1.yaml +# use: one_letter_at_new +# prefix: "" +# postfix: "\t" +# +# - field: test26 +# from: base.domain.domain.v1.yaml +# use: numbers_at_common +# prefix: "" +# postfix: "\t" +# - field: test27 +# from: base.domain.domain.v1.yaml +# use: numbers_at_cn +# prefix: "" +# postfix: "\t" +# - field: test28 +# from: base.domain.domain.v1.yaml +# use: numbers_at_new +# prefix: "" +# postfix: "\t" +# +# - field: test29 +# from: base.domain.domain.v1.yaml +# use: mixed_at_common +# prefix: "" +# postfix: "\t" +# - field: test30 +# from: base.domain.domain.v1.yaml +# use: mixed_at_cn +# prefix: "" +# postfix: "\t" +# - field: test31 +# from: base.domain.domain.v1.yaml +# use: mixed_at_new +# prefix: "" +# postfix: "\t" +# +# - field: test32 +# from: base.domain.esp.v1.yaml +# use: esp +# prefix: "" +# postfix: "\t" \ No newline at end of file diff --git a/src/gen/generator.go b/src/gen/generator.go index 8d7f21f19d5cf5c6f8c8913235416b922bf02463..935e979e5e61eae95c6fe5095db0ab692eabe661 100644 --- a/src/gen/generator.go +++ b/src/gen/generator.go @@ -369,6 +369,15 @@ func randomValuesArr(values [][]string) (ret [][]string) { return } +func randomInterfaces(values []interface{}) (ret []interface{}) { + length := len(values) + for i := 0; i < length; i++ { + val := commonUtils.RandNum(length) + ret = append(ret, values[val]) + } + + return +} func randomValues(values []string) (ret []string) { length := len(values) for i := 0; i < length; i++ { diff --git a/src/gen/list.go b/src/gen/list.go index f96bf5896d95add5844ae30e3b53374ac3c71036..f11a9b355cc9e360ea7cb45bba5799621bf897f6 100644 --- a/src/gen/list.go +++ b/src/gen/list.go @@ -149,7 +149,7 @@ func CreateValuesFromLiteral(field *model.DefField, desc string, stepStr string, step, _ := strconv.Atoi(stepStr) total := 0 - if stepStr == "r" { + if field.Path != "" && stepStr == "r" { items = append(items, Placeholder(field.Path)) mp := placeholderMapForRandValues("list", elemArr, "", "", "", "") @@ -175,6 +175,10 @@ func CreateValuesFromLiteral(field *model.DefField, desc string, stepStr string, i += step } + if field.Path == "" && stepStr == "r" { // for ranges and instances, random + items = randomInterfaces(items) + } + return } @@ -186,7 +190,7 @@ func CreateValuesFromInterval(field *model.DefField, desc, stepStr string, repea dataType, step, precision, rand := CheckRangeType(startStr, endStr, stepStr) - if dataType != "string" && rand { + if field.Path != "" && dataType != "string" && rand { items = append(items, Placeholder(field.Path)) mp := placeholderMapForRandValues(dataType, []string{}, startStr, endStr, stepStr, strconv.Itoa(precision)) @@ -218,6 +222,10 @@ func CreateValuesFromInterval(field *model.DefField, desc, stepStr string, repea } } + if field.Path == "" && stepStr == "r" { // for ranges and instances, random + items = randomInterfaces(items) + } + return } diff --git a/src/gen/res.go b/src/gen/res.go index 83ae3bfe4c53f20cbf8d0938b64cc5c1663deebf..6e4dee4a04c077c8b5486afd6bab88dabceb3afe 100644 --- a/src/gen/res.go +++ b/src/gen/res.go @@ -75,7 +75,15 @@ func getResForExcel(resFile, sheet string, field *model.DefField) (map[string][] } func getResForYaml(resFile string) (valueMap map[string][]string, resName string) { + if vari.CacheResFileToMap[resFile] != nil { + valueMap = vari.CacheResFileToMap[resFile] + resName = vari.CacheResFileToName[resFile] + return + } + yamlContent, err := ioutil.ReadFile(resFile) + yamlContent = ReplaceSpecialChars(yamlContent) + if err != nil { logUtils.PrintTo(i118Utils.I118Prt.Sprintf("fail_to_read_file", resFile)) return @@ -102,6 +110,9 @@ func getResForYaml(resFile string) (valueMap map[string][]string, resName string } } + vari.CacheResFileToMap[resFile] = valueMap + vari.CacheResFileToName[resFile] = resName + return } @@ -109,7 +120,10 @@ func getResForInstances(insts model.ResInsts) map[string][]string { groupedValue := map[string][]string{} for _, inst := range insts.Instances { - for _, instField := range inst.Fields { // prepare referred parent instances if needed + + // prepare referred parent instances res if needed, support only 1 level + for _, instField := range inst.Fields { + // set "from" val from parent if needed if instField.From == "" { if insts.From != "" { instField.From = insts.From @@ -123,7 +137,10 @@ func getResForInstances(insts model.ResInsts) map[string][]string { parentRanges, parentInstants := getRootRangeOrInstant(instField) groupedValueParent := map[string][]string{} - if len(parentInstants.Instances) > 0 { // refer to instances + if len(parentRanges.Ranges) > 0 { // refer to ranges + groupedValueParent = getResForRanges(parentRanges) + + } else if len(parentInstants.Instances) > 0 { // refer to instances for _, child := range parentInstants.Instances { field := convertInstantToField(parentInstants, child) @@ -131,12 +148,10 @@ func getResForInstances(insts model.ResInsts) map[string][]string { group := child.Instance groupedValueParent[group] = GenerateForField(&field, false) } - } else if len(parentRanges.Ranges) > 0 { // refer to ranges - groupedValueParent = getResForRanges(parentRanges) } vari.Res[instField.From] = groupedValueParent - } else if instField.Select != "" { // refer to another excel + } else if instField.Select != "" { // refer to excel resFile, resType, sheet := fileUtils.GetResProp(instField.From) values, _ := getResValue(resFile, resType, sheet, &instField) vari.Res[instField.From] = values @@ -176,6 +191,18 @@ func getRootRangeOrInstant(inst model.DefField) (parentRanges model.ResRanges, p return } +func getResForRanges(ranges model.ResRanges) map[string][]string { + groupedValue := map[string][]string{} + + for group, expression := range ranges.Ranges { + field := convertRangesToField(ranges, expression) + + groupedValue[group] = GenerateForField(&field, false) + } + + return groupedValue +} + func convertInstantToField(insts model.ResInsts, inst model.ResInst) (field model.DefField) { field.Field = insts.Field field.From = insts.From @@ -196,20 +223,12 @@ func convertInstantToField(insts model.ResInsts, inst model.ResInst) (field mode return field } -func getResForRanges(ranges model.ResRanges) map[string][]string { - groupedValue := map[string][]string{} - - for group, exp := range ranges.Ranges { - // convert ranges field to standard field - tempField := model.DefField{} - copier.Copy(&tempField, ranges) - tempField.Field = ranges.Field - tempField.Range = exp - - groupedValue[group] = GenerateForField(&tempField, false) - } +func convertRangesToField(ranges model.ResRanges, expression string) (field model.DefField) { + copier.Copy(&field, ranges) + field.Field = ranges.Field + field.Range = expression - return groupedValue + return field } func getResForConfig(configRes model.DefField) map[string][]string { diff --git a/src/utils/vari/var.go b/src/utils/vari/var.go index 4e80b7cf4a1fdc605bc267ed11bf736f519b7c81..efa7c03dbf7385117ccbfa6749facf527b2eaa83 100644 --- a/src/utils/vari/var.go +++ b/src/utils/vari/var.go @@ -37,6 +37,9 @@ var ( RandFieldNameToValuesMap = map[string]map[string]interface{}{} TopFiledMap = map[string]model.DefField{} + CacheResFileToMap = map[string] map[string][]string {} + CacheResFileToName = map[string]string{} + DefaultDir string ConfigDir string ) diff --git a/yaml/base/domain/domain.v1.yaml b/yaml/base/domain/domain.v1.yaml index d7db56b8e3e0911d590d22c193910efc995df153..a4f29a8f2815edc16dc89e2f778755a81fd0b431 100644 --- a/yaml/base/domain/domain.v1.yaml +++ b/yaml/base/domain/domain.v1.yaml @@ -5,14 +5,166 @@ version: 1.0 field: domain instances: - - instance: esp - note: 服务商域名 + - instance: one_number_at_common + note: 单数字域名 fields: - field: part1 - range: [qq.com,163.com,263.net,aliyun.com,126.com,gmail.com,outlook.com,hotmail.com] - - instance: self - note: 自定义域名 + range: 1-9 + rand: true + postfix: "." + - field: part2 + from: base.domain.postfix.v1.yaml + use: all + - instance: one_number_at_cn + note: 单数字CN域名 prefix: fields: - field: part1 - range: [zentao.com,easycorp.cn,ztf.im,zd.im] \ No newline at end of file + range: 1-9 + postfix: "." + - field: part2 + from: base.domain.postfix.v1.yaml + use: cn + - instance: one_number_at_new + note: 单数字新域名 + prefix: + fields: + - field: part1 + range: 1-9 + postfix: "." + - field: part2 + from: base.domain.postfix.v1.yaml + use: new + + - instance: one_letter_at_common + note: 单字母域名 + prefix: + fields: + - field: part1 + range: a-z + postfix: "." + - field: part2 + from: base.domain.postfix.v1.yaml + use: all + - instance: one_letter_at_cn + note: 单字母CN域名 + prefix: + fields: + - field: part1 + range: a-z + postfix: "." + - field: part2 + from: base.domain.postfix.v1.yaml + use: cn + - instance: one_letter_at_new + note: 单字母新域名 + prefix: + fields: + - field: part1 + range: a-z + postfix: "." + - field: part2 + from: base.domain.postfix.v1.yaml + use: new + + - instance: numbers_at_common + note: 纯数字域名 + prefix: + fields: + - field: part1 + range: 0-9 + loop: 5-8 + postfix: "." + - field: part2 + from: base.domain.postfix.v1.yaml + use: all + - instance: numbers_at_cn + note: 纯数字CN域名 + prefix: + fields: + - field: part1 + range: 0-9 + loop: 5-8 + postfix: "." + - field: part2 + from: base.domain.postfix.v1.yaml + use: cn + - instance: numbers_at_new + note: 纯数字新域名 + prefix: + fields: + - field: part1 + range: a-z + loop: 5-8 + postfix: "." + - field: part2 + from: base.domain.postfix.v1.yaml + use: new + + - instance: letters_at_common + note: 纯字母域名 + prefix: + fields: + - field: part1 + range: a-z + loop: 5-8 + postfix: "." + - field: part2 + from: base.domain.postfix.v1.yaml + use: all + - instance: letters_at_cn + note: 纯字母CN域名 + prefix: + fields: + - field: part1 + range: a-z + loop: 5-8 + postfix: "." + - field: part2 + from: base.domain.postfix.v1.yaml + use: cn + - instance: letters_at_new + note: 纯字母新域名 + prefix: + fields: + - field: part1 + range: a-z + loop: 5-8 + postfix: "." + - field: part2 + from: base.domain.postfix.v1.yaml + use: new + + - instance: mixed_at_common + note: 字母和数字域名 + prefix: + fields: + - field: part1 + range: a-z,0-9 + loop: 5-8 + postfix: "." + - field: part2 + from: base.domain.postfix.v1.yaml + use: all + - instance: mixed_at_cn + note: 字母和数字CN域名 + prefix: + fields: + - field: part1 + range: a-z,0-9 + loop: 5-8 + postfix: "." + - field: part2 + from: base.domain.postfix.v1.yaml + use: cn + - instance: mixed_at_new + note: 字母和数字新域名 + prefix: + fields: + - field: part1 + range: a-z,0-9 + loop: 5-8 + postfix: "." + - field: part2 + from: base.domain.postfix.v1.yaml + use: new \ No newline at end of file diff --git a/yaml/base/domain/esp.v1.yaml b/yaml/base/domain/esp.v1.yaml new file mode 100644 index 0000000000000000000000000000000000000000..108761b4038fc3430b5be6c3f2bbdcc98a3d2b56 --- /dev/null +++ b/yaml/base/domain/esp.v1.yaml @@ -0,0 +1,12 @@ +title: 域名 +desc: +author: zentao +version: 1.0 + +field: esp +instances: + - instance: esp + note: 服务商域名 + fields: + - field: part1 + range: [qq.com,163.com,263.net,aliyun.com,126.com,gmail.com,outlook.com,hotmail.com] \ No newline at end of file diff --git a/yaml/base/domain/postfix.v1.yaml b/yaml/base/domain/postfix.v1.yaml index 2118c2e94adbb961b0cce13883f5fca5b0533a21..37f3473a8cd5a783fcff5ecc22fbbf126c2ec48f 100644 --- a/yaml/base/domain/postfix.v1.yaml +++ b/yaml/base/domain/postfix.v1.yaml @@ -6,7 +6,7 @@ version: 1.0 field: domain_postfix note: 域名后缀 ranges: - common: [com,net,org,cn,cc,co,im,io] + common: [com,net,org,cn,cc,co,im,io]:R cn: [cn,org.cn,net.cn,com.cn,gov.cn] new: [app,ai,site,xyz,ltd,ren,wang,vip,top] country: [cn,im,tv,cc,io,la] \ No newline at end of file diff --git a/yaml/base/domain/domain.name.v1.yaml b/yaml/base/email/email.v1.yaml similarity index 100% rename from yaml/base/domain/domain.name.v1.yaml rename to yaml/base/email/email.v1.yaml