123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364 |
- package auto
- import (
- "bufio"
- "database/sql"
- "fmt"
- "math/rand"
- "os"
- "strings"
- "time"
- "xgAutoTest/internal/config"
- "xgAutoTest/internal/dbBase"
- "xgAutoTest/internal/global"
- "xgAutoTest/internal/produce"
- "xgAutoTest/internal/utils"
- )
- var imagesList [][]byte
- var tableUpperParts1 []produce.TableUpperPart
- func createLogFile() {
-
-
- err := utils.CreateFolder(global.FileLocal)
- if err != nil {
- global.Logs.Error("创建结果images文件夹失败: ", err)
- } else {
- global.Logs.Printf("创建结果images文件夹成功: %s\n", global.FileLocal)
- }
- err = utils.CreateFolder(fmt.Sprintf(global.FileLocal + "/images/single"))
- if err != nil {
- global.Logs.Error("创建结果single文件夹失败: ", err)
- } else {
- global.Logs.Printf("创建结果single文件夹成功: %s\n", global.FileLocal)
- }
- err = utils.CreateFolder(fmt.Sprintf(global.FileLocal + "/images/merged"))
- if err != nil {
- global.Logs.Error("创建结果merged文件夹失败: ", err)
- } else {
- global.Logs.Printf("创建结果merged文件夹成功: %s\n", global.FileLocal)
- }
- }
- func AutoRun(config config.ConfigInfo) {
-
- createLogFile()
-
- db := dbBase.GetDb()
-
- for _, Part := range config.CommandSql.Part {
- var tableUpperPartTemp produce.TableUpperPart
- tableUpperPartTemp.Left = make([]string, 0)
- tableUpperPartTemp.Right = make([]string, 0)
- tableUpperPartTemp.ImagesList = make([][]byte, 0)
- tableUpperPartTemp.SqlToTextsList = make([]string, 0)
-
- var texts string
-
- partMap := config.ParseGroupCase(Part)
-
- tableUpperPartTemp.Left = append(tableUpperPartTemp.Left, "用例名称")
- tableUpperPartTemp.Right = append(tableUpperPartTemp.Right, partMap["用例名称"])
- tableUpperPartTemp.Left = append(tableUpperPartTemp.Left, "测试要求")
- tableUpperPartTemp.Right = append(tableUpperPartTemp.Right, partMap["测试要求"])
- tableUpperPartTemp.Left = append(tableUpperPartTemp.Left, "测试步骤")
- tableUpperPartTemp.Right = append(tableUpperPartTemp.Right, partMap["测试步骤"])
- tableUpperPartTemp.Left = append(tableUpperPartTemp.Left, "测试程序")
- tableUpperPartTemp.Right = append(tableUpperPartTemp.Right, partMap["测试程序"])
-
- global.Logs.Printf("测试步骤: %s\n", partMap["测试步骤"])
- partTestStepScanner := bufio.NewScanner(strings.NewReader(partMap["测试步骤"]))
- var sql string
- for partTestStepScanner.Scan() {
- partLine := strings.ToLower(strings.TrimSpace(partTestStepScanner.Text()))
- fmt.Printf("解析一行的sql partLine: %s\n", partLine)
- switch {
-
- case strings.HasPrefix(partLine, "--"):
-
- sql = strings.TrimSpace(strings.TrimPrefix(partLine, "--"))
- texts += sql
- texts += "\n"
- texts += "\n"
- sql = ""
-
- case strings.Contains(partLine, ";"):
-
- fmt.Printf("是sql: %s\n", partLine)
- if strings.Contains(partLine, "<#") {
- texts += partLine
- texts += "\n"
- sql = ""
- sqlPart, files := fileInsert(db, partLine)
- retStr := dbBase.ExecFiles(db, sqlPart, files, partLine)
- var im produce.ImageInfo
- imageRet, err := im.Runimage(retStr)
- if err != nil {
- global.Logs.Error(err)
- return
- }
- imagesList = append(imagesList, imageRet)
- tableUpperPartTemp.ImagesList = append(tableUpperPartTemp.ImagesList, imageRet)
- now := time.Now()
- im.SaveImage(fmt.Sprintf("%s/(%s)_%s.png", fmt.Sprintf(global.FileLocal+"/images/single"), sqlPart[:15], now.Format("2006-01-02 15.04.05.00000")))
- break
- }
- if strings.Contains(partLine, "<%") {
- fmt.Println("带有<%key")
- texts += partLine
- texts += "\n"
- sql = ""
- sqlPart, files := fileInsert(db, partLine)
- retStr := dbBase.ExecClob(db, sqlPart, files, partLine)
- fmt.Println("CLOB:", retStr)
- var im produce.ImageInfo
- imageRet, err := im.Runimage(retStr)
- if err != nil {
- global.Logs.Error(err)
- return
- }
- imagesList = append(imagesList, imageRet)
- tableUpperPartTemp.ImagesList = append(tableUpperPartTemp.ImagesList, imageRet)
- now := time.Now()
- im.SaveImage(fmt.Sprintf("%s/(%s)_%s.png", fmt.Sprintf(global.FileLocal+"/images/single"), sqlPart[:15], now.Format("2006-01-02 15.04.05.00000")))
- break
- }
- if strings.Contains(partLine, "drop") {
- sql += strings.TrimSpace(partLine[:strings.Index(partLine, ";")+1])
-
- texts += sql
- texts += "\n"
- isQueryOrInsert(db, sql, &tableUpperPartTemp)
- sql = ""
- break
- }
- if strings.Contains(partLine, "procedure ") {
- endStr := "end;"
- sql += strings.TrimSpace(partLine[:strings.Index(partLine, endStr)+len(endStr)])
- fmt.Println("带有procedure key :", sql)
- texts += sql
- texts += "\n"
- isQueryOrInsert(db, sql, &tableUpperPartTemp)
- sql = ""
- break
- }
- sql += strings.TrimSpace(partLine[:strings.Index(partLine, ";")+1])
-
- texts += sql
- texts += "\n"
- isQueryOrInsert(db, sql, &tableUpperPartTemp)
- sql = ""
- default:
-
- sql += strings.TrimSpace(partLine)
- texts += sql
- texts += "\n"
- sql += "\n"
- }
- }
-
-
- tableUpperPartTemp.SqlToTextsList = append(tableUpperPartTemp.SqlToTextsList, texts)
- tableUpperParts1 = append(tableUpperParts1, tableUpperPartTemp)
-
- if err := partTestStepScanner.Err(); err != nil {
- fmt.Println("partTestStepScanner.Error reading input:", err)
- }
-
-
-
- }
-
-
-
-
- generateWord(tableUpperParts1)
- }
- func executeSQL(partLine string, db *sql.DB, tableUpperPartTemp *produce.TableUpperPart) {
- var texts string
- switch {
-
- case strings.HasPrefix(partLine, "--"):
- sql := strings.TrimSpace(strings.TrimPrefix(partLine, "--"))
- texts += sql
- texts += "\n"
- texts += "\n"
-
-
- case strings.Contains(partLine, ";"):
-
- sql := strings.TrimSpace(partLine[:strings.Index(partLine, ";")+1])
-
- texts += sql
- texts += "\n"
- isQueryOrInsert(db, sql, tableUpperPartTemp)
- }
- }
- func isQueryOrInsert(db *sql.DB, sql string, tableUpperPartTemp *produce.TableUpperPart) {
- switch {
-
- case strings.HasPrefix(sql, "select"):
- {
- ret := dbBase.QueryString(db, sql)
- var im produce.ImageInfo
- imageRet, err := im.Runimage(ret)
- if err != nil {
- global.Logs.Error(err)
- return
- }
- imagesList = append(imagesList, imageRet)
- tableUpperPartTemp.ImagesList = append(tableUpperPartTemp.ImagesList, imageRet)
- now := time.Now()
- im.SaveImage(fmt.Sprintf("%s/select %s_%s.png", fmt.Sprintf(global.FileLocal+"/images/single"), sql[len(sql)-5:], now.Format("2006-01-02 15.04.05.00000")))
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- default:
- {
-
-
- if strings.Contains(sql, "set session") {
- fmt.Println("执行set session")
- }
- ret := dbBase.ExecString(db, sql)
- var im produce.ImageInfo
- imageRet, err := im.Runimage(ret)
- if err != nil {
- global.Logs.Error(err)
- return
- }
- imagesList = append(imagesList, imageRet)
- tableUpperPartTemp.ImagesList = append(tableUpperPartTemp.ImagesList, imageRet)
- now := time.Now()
- if len(sql) < 15 {
- im.SaveImage(fmt.Sprintf("%s/(%s)_%s.png", fmt.Sprintf(global.FileLocal+"/images/single"), sql[5:], now.Format("2006-01-02 15.04.05.00000")))
- break
- }
- im.SaveImage(fmt.Sprintf("%s/(%s)_%s.png", fmt.Sprintf(global.FileLocal+"/images/single"), sql[:15], now.Format("2006-01-02 15.04.05.00000")))
- }
- }
- }
- func fileInsert(db *sql.DB, sql string) (string, []string) {
- questionMarksCount := utils.IsInsertBlob(sql)
- fmt.Println("questionMarksCount", questionMarksCount)
- sqlPart, filePart, err := splitBlobAndClobString(sql)
- if err != nil {
- global.Logs.Error("切分Blob语句错误", err)
- return "", nil
- }
- fmt.Printf("part1: %s\n", sqlPart)
- fmt.Printf("part2: %s\n", filePart)
- files := deleteSymbol(filePart)
- fmt.Println("isBlob")
- return sqlPart, files
- }
- func splitBlobAndClobString(input string) (string, string, error) {
- fmt.Println("splitBlobString: ", input)
- splitIndex := strings.Index(input, "<#")
- if splitIndex == -1 {
- splitIndex = strings.Index(input, "<%")
- if splitIndex == -1 {
- return "", "", fmt.Errorf("delimiter '<#' not found in the input string")
- }
- }
- part1 := strings.TrimSpace(input[:splitIndex])
- part2 := strings.TrimSpace(input[splitIndex:])
- return part1, part2, nil
- }
- func deleteSymbol(input string) []string {
-
- cleanedInput := strings.ReplaceAll(input, "<#", "")
- fmt.Println("cleanedInput: ", cleanedInput)
- cleanedInput2 := strings.ReplaceAll(cleanedInput, "<%", "")
- fmt.Println("cleanedInput2: ", cleanedInput2)
-
- parts := strings.Fields(cleanedInput2)
-
- for _, part := range parts {
- fmt.Println(part)
- }
- return parts
- }
- func generateWord(tableUpperParts1 []produce.TableUpperPart) {
- fmt.Println("调用generateWord()")
- wd := produce.Newword()
- for _, tableUpperPart := range tableUpperParts1 {
-
-
- if tableUpperPart.ImagesList == nil || len(tableUpperPart.ImagesList) == 0 {
- global.Logs.Error("图片缓存为空,退出程序")
- return
- }
- mergedImage, err := produce.MergeImages(tableUpperPart.ImagesList)
- if err != nil {
- panic(err)
- }
- wd.WriterTable(global.FileLocal, tableUpperPart, mergedImage)
-
- timeNow := time.Now().Format("2006-01-02 15.04.05.00000")
-
- randomInt := rand.Intn(100)
- err = os.WriteFile(fmt.Sprintf("%s/merged_image_%s_%d.png", fmt.Sprintf(global.FileLocal+"/images/merged"), timeNow, randomInt), mergedImage, 0644)
- if err != nil {
- panic(err)
- }
- fmt.Println("生成合成图片-------------")
-
- }
-
- wd.SaveWord(global.FileLocal)
- }
|