提交 190632c8 编写于 作者: aaronchen2k2k's avatar aaronchen2k2k

i118

上级 4b9935da
......@@ -7,6 +7,8 @@ gen 根据定义文件生成数据。
-o -out 指定输出文件
-f format 指定输出格式,支持text、json、xml和sql语句几种格式
-t -table 输出格式为table时,用于指定insert语句的表名
--verbose 增加此参数,显示详细调试信息。
为了方便在任意目录中执行%s命令,建议将其加入环境变量中,具体方法参照以下地址。
https://www.ztesting.net/book/ztf-doc/add-to-path-46.html
\ No newline at end of file
{
"code": 1,
"name": "禅道自动化测试框架产品",
"cases": [
{
"id": 100,
"title": "测试用例01",
"steps": [
{
"id": 1000,
"title": "步骤01"
}
]
},
{
"id": 200,
"title": "登录失败账号锁定策略",
"steps": [
{
"id": 2000,
"title": "连续输入3次错误的密码"
},
{
"id": 2010,
"title": "第4次尝试登录",
"expect": "系统提示账号被锁定",
"isCheckPoint": true
},
{
"id": 2100,
"title": "不连续输入3次错误的密码",
"isGroup": true,
"steps": [
{
"id": 2101,
"title": "输入2次错误的密码",
"isGroup": false
},
{
"id": 2102,
"title": "输入1次正确的密码",
"isGroup": false
},
{
"id": 2103,
"title": "再输入1次错误的密码",
"isGroup": false
},
{
"id": 2104,
"title": "再输入1次正确的密码",
"expect": "登录成功,账号未被锁定",
"isCheckPoint": true
}
]
}
]
}
]
}
\ No newline at end of file
{
"code": 1
}
\ No newline at end of file
{
"code": 1,
"zentaoSettings": {
"modules": [
{
"Id": 100,
"Code": "admin",
"Name": "Admin",
"IsDefault": false
},
{
"Id": 200,
"Code": "client",
"Name": "Client",
"IsDefault": false
},
{
"Id": 300,
"Code": "interface",
"Name": "Interface",
"IsDefault": false
},
{
"Id": 400,
"Code": "site",
"Name": "Site",
"IsDefault": false
},
{
"Id": 500,
"Code": "api",
"Name": "API",
"IsDefault": true
},
{
"Id": 600,
"Code": "testing",
"Name": "Testing",
"IsDefault": false
}
],
"categories": [
{
"Id": 100,
"Code": "admin",
"Name": "Admin",
"IsDefault": false
},
{
"Id": 200,
"Code": "client",
"Name": "Client",
"IsDefault": false
},
{
"Id": 300,
"Code": "interface",
"Name": "Interface",
"IsDefault": false
},
{
"Id": 400,
"Code": "site",
"Name": "Site",
"IsDefault": false
},
{
"Id": 500,
"Code": "api",
"Name": "API",
"IsDefault": false
},
{
"Id": 600,
"Code": "testing",
"Name": "Testing",
"IsDefault": false
}
],
"versions": [
{
"Id": 100,
"Code": "admin",
"Name": "Admin",
"IsDefault": false
},
{
"Id": 200,
"Code": "client",
"Name": "Client",
"IsDefault": false
},
{
"Id": 300,
"Code": "interface",
"Name": "Interface",
"IsDefault": false
},
{
"Id": 400,
"Code": "site",
"Name": "Site",
"IsDefault": false
},
{
"Id": 500,
"Code": "api",
"Name": "API",
"IsDefault": false
},
{
"Id": 600,
"Code": "testing",
"Name": "Testing",
"IsDefault": false
}
],
"priorities": [
{
"Id": 100,
"Code": "admin",
"Name": "Admin",
"IsDefault": false
},
{
"Id": 200,
"Code": "client",
"Name": "Client",
"IsDefault": false
},
{
"Id": 300,
"Code": "interface",
"Name": "Interface",
"IsDefault": false
},
{
"Id": 400,
"Code": "site",
"Name": "Site",
"IsDefault": false
},
{
"Id": 500,
"Code": "api",
"Name": "API",
"IsDefault": false
},
{
"Id": 600,
"Code": "testing",
"Name": "Testing",
"IsDefault": false
}
]
}
}
\ No newline at end of file
......@@ -21,6 +21,64 @@
{
"id": "current_config",
"translation": "Current config:"
},
{
"id": "success_to_read",
"translation": "success to read file %s"
},
{
"id": "fail_to_read_file",
"translation": "Fail to read file %s."
},
{
"id": "fail_to_parse_file",
"translation": "Fail to parse the content of file %s."
},
{
"id": "fail_to_parse_ranges",
"translation": "%s is not ResRanges format, try to parse as ResInsts."
},
{
"id": "generate_records",
"translation": "Generate %d records, spend %d secs"
},
{
"id": "save_testdata",
"translation": "Test data saved to %s"
},
{
"id": "fail_to_connect_sqlite",
"translation": "fail to open SQLite %s, error: %s"
},
{
"id": "fail_to_exec_query",
"translation": "fail to exec query %s "
},
{
"id": "fail_to_parse_row",
"translation": "fail to parse sqlite3 row %s"
},
{
"id": "fail_to_update_row",
"translation": "fail to insert/update row: "
},
{
"id": "fail_to_save_excel",
"translation": "fail to save excel: "
},
{
"id": "fail_to_create_table",
"translation": "fail to create table: "
},
{
"id": "fail_to_insert_data",
"translation": "fail to insert data: "
},
{
"id": "file_change_time",
"translation": "file change time is "
}
]
}
\ No newline at end of file
......@@ -16,6 +16,56 @@
{
"id": "current_config",
"translation": "当前配置:"
},
{
"id": "success_to_read",
"translation": "读取文件%s成功。"
},
{
"id": "fail_to_read_file",
"translation": "读取文件%s失败。"
},
{
"id": "fail_to_parse_file",
"translation": "解析文件%s失败。"
},
{
"id": "fail_to_parse_ranges",
"translation": "%s不是ResRanges格式,尝试解析为ResInsts对象。"
},
{
"id": "generate_records",
"translation": "生成%d个记录,耗时%d秒。"
},
{
"id": "save_testdata",
"translation": "成功保存生成的数据到%s。"
},
{
"id": "fail_to_connect_sqlite",
"translation": "打开SQLite数据库%s失败,错误:%s。"
},
{
"id": "fail_to_exec_query",
"translation": "SQLite查询失败,语句:%s,错误:%s。"
},
{
"id": "fail_to_parse_row",
"translation": "SQLite行解析失败,错误%s。"
},
{
"id": "fail_to_save_excel",
"translation": "保存Excel失败,错误:%s。"
},
{
"id": "fail_to_create_table",
"translation": "创建表%s失败,错误:%s。"
},
{
"id": "file_change_time",
"translation": "文件修改时间为%s。"
}
]
}
\ No newline at end of file
@echo off
setlocal enabledelayedexpansion
goto start
[case]
%s
[esac]
:start
%s
#!/usr/bin/env lua
--[[
[case]
%s
[esac]
]]
%s
\ No newline at end of file
#!/usr/bin/env perl
=pod
[case]
%s
[esac]
=cut
%s
\ No newline at end of file
#!/usr/bin/env php
<?php
/*
[case]
%s
[esac]
*/
%s
?>
#!/usr/bin/env python
'''
[case]
%s
[esac]
'''
%s
#!/usr/bin/env ruby
=begin
[case]
%s
[esac]
=end
%s
#!/usr/bin/env bash
:<<!
[case]
%s
[esac]
!
%s
#!/usr/bin/env tclsh
set case {
[case]
%s
[esac]
}
%s
......@@ -7,6 +7,7 @@ import (
"github.com/easysoft/zendata/src/gen"
"github.com/easysoft/zendata/src/model"
constant "github.com/easysoft/zendata/src/utils/const"
i118Utils "github.com/easysoft/zendata/src/utils/i118"
logUtils "github.com/easysoft/zendata/src/utils/log"
stringUtils "github.com/easysoft/zendata/src/utils/string"
"github.com/easysoft/zendata/src/utils/vari"
......@@ -29,8 +30,7 @@ func Generate(defFile string, total int, fieldsToExportStr string, out string, f
WriteToFile(out, content)
entTime := time.Now().Unix()
logUtils.Screen(fmt.Sprintf("Genereate %d records, spend %d secs",
len(rows), entTime - startTime ))
logUtils.Screen(i118Utils.I118Prt.Sprintf("generate_records", len(rows), entTime - startTime ))
}
func Print(rows [][]string, format string, table string, colTypes []bool, fields []string) string {
......
package action
import (
"fmt"
fileUtils "github.com/easysoft/zendata/src/utils/file"
i118Utils "github.com/easysoft/zendata/src/utils/i118"
logUtils "github.com/easysoft/zendata/src/utils/log"
)
func WriteToFile(path string, content string) {
fileUtils.WriteFile(path, content)
logUtils.Screen(fmt.Sprintf("Test data saved to %s", path))
logUtils.Screen(i118Utils.I118Prt.Sprintf("save_testdata", path))
}
......@@ -5,6 +5,7 @@ import (
"fmt"
"github.com/360EntSecGroup-Skylar/excelize/v2"
constant "github.com/easysoft/zendata/src/utils/const"
i118Utils "github.com/easysoft/zendata/src/utils/i118"
logUtils "github.com/easysoft/zendata/src/utils/log"
numbUtils "github.com/easysoft/zendata/src/utils/numb"
_ "github.com/mattn/go-sqlite3"
......@@ -19,14 +20,14 @@ func Upgrade() {
db, err := sql.Open(constant.SqliteDriver, constant.SqliteSource)
defer db.Close()
if err != nil {
logUtils.Screen("fail to open " + constant.SqliteSource + ": " + err.Error())
logUtils.Screen(i118Utils.I118Prt.Sprintf("fail_to_connect_sqlite", constant.SqliteSource, err.Error()))
return
}
sql := "SELECT id, name, state, zipCode, cityCode FROM city"
rows, err := db.Query(sql)
if err != nil {
logUtils.Screen("fail to exec query " + sql + ": " + err.Error())
logUtils.Screen(i118Utils.I118Prt.Sprintf("fail_to_exec_query", sql, err.Error()))
return
}
......@@ -49,7 +50,7 @@ func Upgrade() {
err = rows.Scan(&id, &name, &state, &zipCode, &cityCode)
if err != nil {
logUtils.Screen("fail to get sqlite3 row: " + err.Error())
logUtils.Screen(i118Utils.I118Prt.Sprintf("fail_to_parse_row", err.Error()))
return
}
......@@ -76,13 +77,13 @@ func Upgrade() {
for _, sql := range sqls {
_, err := db.Exec(sql)
if err != nil {
logUtils.Screen("fail to update row: " + err.Error())
logUtils.Screen(i118Utils.I118Prt.Sprintf("fail_to_exec_query", sql, err.Error()))
}
}
//err = excel.SaveAs(constant.ExcelFile)
err = excel.SaveAs("export.excel")
if err != nil {
logUtils.Screen("fail to save excel: " + err.Error())
logUtils.Screen(i118Utils.I118Prt.Sprintf("fail_to_save_excel", err.Error()))
}
}
......
......@@ -2,6 +2,7 @@ package gen
import (
"github.com/easysoft/zendata/src/model"
i118Utils "github.com/easysoft/zendata/src/utils/i118"
logUtils "github.com/easysoft/zendata/src/utils/log"
"gopkg.in/yaml.v2"
"io/ioutil"
......@@ -12,13 +13,13 @@ func LoadRootDef(file string) model.DefData {
yamlContent, err := ioutil.ReadFile(file)
if err != nil {
logUtils.Screen("fail to read " + file)
logUtils.Screen(i118Utils.I118Prt.Sprintf("fail_to_read_file", file))
return def
}
err = yaml.Unmarshal(yamlContent, &def)
if err != nil {
logUtils.Screen("fail to parse " + file)
logUtils.Screen(i118Utils.I118Prt.Sprintf("fail_to_read_file", file))
return def
}
......
......@@ -6,6 +6,7 @@ import (
"github.com/360EntSecGroup-Skylar/excelize/v2"
"github.com/easysoft/zendata/src/model"
constant "github.com/easysoft/zendata/src/utils/const"
i118Utils "github.com/easysoft/zendata/src/utils/i118"
logUtils "github.com/easysoft/zendata/src/utils/log"
"log"
"os"
......@@ -55,7 +56,7 @@ func GenerateFieldValuesFromExcel(path string, field *model.DefField) (map[strin
func ConvertExcelToSQLiteIfNeeded(dbName string, path string) {
excel, err := excelize.OpenFile(path)
if err != nil {
logUtils.Screen("fail to read file: " + err.Error())
logUtils.Screen(i118Utils.I118Prt.Sprintf("fail_to_read_file", path))
return
}
......@@ -124,12 +125,12 @@ func ConvertExcelToSQLiteIfNeeded(dbName string, path string) {
_, err = db.Exec(dropSql)
_, err = db.Exec(ddl)
if err != nil {
logUtils.Screen("fail to create table: " + err.Error())
logUtils.Screen(i118Utils.I118Prt.Sprintf("fail_to_create_table", tableName, err.Error()))
return
} else {
_, err = db.Exec(insertSql)
if err != nil {
logUtils.Screen("fail to insert data: " + err.Error())
logUtils.Screen(i118Utils.I118Prt.Sprintf("fail_to_exec_query", insertSql, err.Error()))
return
}
}
......@@ -143,7 +144,7 @@ func ReadDataFromSQLite(field model.DefField, dbName string, tableName string) (
db, err := sql.Open(constant.SqliteDriver, constant.SqliteSource)
defer db.Close()
if err != nil {
logUtils.Screen("fail to open " + constant.SqliteSource + ": " + err.Error())
logUtils.Screen(i118Utils.I118Prt.Sprintf("fail_to_connect_sqlite", constant.SqliteSource, err.Error()))
return list, ""
}
......@@ -157,7 +158,7 @@ func ReadDataFromSQLite(field model.DefField, dbName string, tableName string) (
sqlStr := fmt.Sprintf("SELECT %s FROM %s WHERE %s", selectCol, from, where)
rows, err := db.Query(sqlStr)
if err != nil {
logUtils.Screen("fail to exec query " + err.Error())
logUtils.Screen(i118Utils.I118Prt.Sprintf("fail_to_exec_query", sqlStr, err.Error()))
return list, ""
}
......@@ -179,7 +180,7 @@ func ReadDataFromSQLite(field model.DefField, dbName string, tableName string) (
for rows.Next() {
err = rows.Scan(values...)
if err != nil {
logUtils.Screen("fail to get sqlite3 row: " + err.Error())
logUtils.Screen(i118Utils.I118Prt.Sprintf("fail_to_parse_row", err.Error()))
return list, ""
}
......@@ -209,14 +210,14 @@ func isExcelChanged(path string) bool {
db, err := sql.Open(constant.SqliteDriver, constant.SqliteSource)
defer db.Close()
if err != nil {
logUtils.Screen("fail to open " + constant.SqliteSource + ": " + err.Error())
logUtils.Screen(i118Utils.I118Prt.Sprintf("fail_to_connect_sqlite", constant.SqliteSource, err.Error()))
return true
}
sqlStr := "SELECT id, name, changeTime FROM " + constant.SqliteTrackTable
rows, err := db.Query(sqlStr)
if err != nil {
logUtils.Screen("fail to exec query " + sqlStr + ": " + err.Error())
logUtils.Screen(i118Utils.I118Prt.Sprintf("fail_to_exec_query", sqlStr, err.Error()))
return true
}
......@@ -232,7 +233,7 @@ func isExcelChanged(path string) bool {
err = rows.Scan(&id, &name, &changeTime)
if err != nil {
logUtils.Screen("fail to get sqlite3 row: " + err.Error())
logUtils.Screen(i118Utils.I118Prt.Sprintf("fail_to_parse_row", err.Error()))
changed = true
break
}
......@@ -255,7 +256,7 @@ func isExcelChanged(path string) bool {
_, err = db.Exec(sqlStr)
if err != nil {
logUtils.Screen("fail to insert/update data: " + sqlStr + " " + err.Error())
logUtils.Screen(i118Utils.I118Prt.Sprintf("fail_to_exec_query", sqlStr, err.Error()))
}
}
......@@ -279,7 +280,7 @@ func getFileModTime(path string) time.Time {
fileChangeTime := fi.ModTime()
timeStr := fileChangeTime.Format("2006-01-02 15:04:05")
logUtils.Screen("file change time is " + timeStr)
logUtils.Screen(i118Utils.I118Prt.Sprintf("file_change_time", timeStr))
return fileChangeTime
}
\ No newline at end of file
......@@ -4,6 +4,7 @@ import (
"github.com/easysoft/zendata/src/model"
constant "github.com/easysoft/zendata/src/utils/const"
fileUtils "github.com/easysoft/zendata/src/utils/file"
i118Utils "github.com/easysoft/zendata/src/utils/i118"
logUtils "github.com/easysoft/zendata/src/utils/log"
stringUtils "github.com/easysoft/zendata/src/utils/string"
"github.com/easysoft/zendata/src/utils/vari"
......@@ -105,13 +106,13 @@ func getResForYaml(resFile string) (map[string][]string, string) {
yamlContent, err := ioutil.ReadFile(resFile)
if err != nil {
logUtils.Screen("fail to read " + resFile)
logUtils.Screen(i118Utils.I118Prt.Sprintf("fail_to_read_file", resFile))
return valueMap, ""
}
err = yaml.Unmarshal(yamlContent, &ranges)
if err != nil || ranges.Ranges == nil || len(ranges.Ranges) == 0 { // instances
logUtils.Screen("not ResRanges " + resFile + ", try to parse as ResInsts")
if vari.Verbose { logUtils.Screen(i118Utils.I118Prt.Sprintf("fail_to_parse_ranges", resFile)) }
insts := model.ResInsts{}
err = yaml.Unmarshal(yamlContent, &insts)
......
......@@ -3,6 +3,7 @@ package gen
import (
"github.com/easysoft/zendata/src/model"
constant "github.com/easysoft/zendata/src/utils/const"
i118Utils "github.com/easysoft/zendata/src/utils/i118"
logUtils "github.com/easysoft/zendata/src/utils/log"
"github.com/easysoft/zendata/src/utils/vari"
"io/ioutil"
......@@ -24,20 +25,20 @@ func GenerateFieldValuesFromText(field *model.DefField, fieldValue *model.FieldV
relaPath := vari.InputDir + file
content, err := ioutil.ReadFile(relaPath)
if err != nil {
logUtils.Screen("fail to read " + relaPath + ", try to use global config")
logUtils.Screen(i118Utils.I118Prt.Sprintf("fail_to_read_file", relaPath))
relaPath = "def" + string(os.PathSeparator) + file
content, err = ioutil.ReadFile(relaPath)
if err != nil {
logUtils.Screen("fail to read " + relaPath + ", will return")
logUtils.Screen(i118Utils.I118Prt.Sprintf("fail_to_read_file", relaPath))
fieldValue.Values = append(fieldValue.Values, "N/A")
return
} else {
logUtils.Screen("success to read " + relaPath)
logUtils.Screen(i118Utils.I118Prt.Sprintf("success_to_read", relaPath))
}
} else {
logUtils.Screen("success to read " + relaPath)
logUtils.Screen(i118Utils.I118Prt.Sprintf("success_to_read", relaPath))
}
str := string(content)
str = strings.Replace(str, "\\r\\n", "\\n", -1)
......
......@@ -5,6 +5,7 @@ import (
"github.com/easysoft/zendata/src/action"
configUtils "github.com/easysoft/zendata/src/utils/config"
logUtils "github.com/easysoft/zendata/src/utils/log"
"github.com/easysoft/zendata/src/utils/vari"
"github.com/fatih/color"
"os"
"os/signal"
......@@ -52,6 +53,9 @@ func main() {
flagSet.StringVar(&format, "f", "", "")
flagSet.StringVar(&format, "format", "", "")
flagSet.BoolVar(&vari.Verbose, "v", false, "")
flagSet.BoolVar(&vari.Verbose, "verbose", false, "")
flagSet.BoolVar(&help, "h", false, "")
flagSet.BoolVar(&help, "help", false, "")
......
rm -rf zdata
mkdir zdata
mkdir zdata/log
cp -r conf zdata/
cp -r runtime zdata/
cp -r demo zdata/
/Users/aaron/go/bin/go-bindata -o=res/res.go -pkg=res res/ res/doc
CGO_ENABLED=0 GOOS=windows GOARCH=386 go build -o zdata/zdata-x86.exe src/zdata.go
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o zdata/zdata-amd64.exe src/zdata.go
GO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o zdata/zdata-linux src/zdata.go
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o zdata/zdata-mac src/zdata.go
cd zdata
cp zdata-x86.exe zdata.exe
zip -r zdata-win-x86-2.2.zip zdata.exe conf demo
rm zdata.exe
cp zdata-amd64.exe zdata.exe
zip -r zdata-win-amd64-2.2.zip zdata.exe conf demo
rm zdata.exe
cp zdata-linux zdata
tar -zcvf zdata-linux-2.2.tar.gz zdata conf demo
rm zdata
cp zdata-mac zdata
zip -r zdata-mac-2.2.zip zdata conf demo
rm zdata
cd ..
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册