auto.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package auto
  2. import (
  3. "bufio"
  4. "database/sql"
  5. "fmt"
  6. "strings"
  7. "xgAutoTest/internal/config"
  8. "xgAutoTest/internal/dbBase"
  9. "xgAutoTest/internal/utils"
  10. )
  11. func AutoRun() {
  12. db := dbBase.GetDb()
  13. //defer db.Close()
  14. config := config.ConfigInfo{}
  15. config.GetConfigInfo("./file/test.txt")
  16. for _, Part := range config.CommandSql.Part {
  17. //fmt.Println("[sql] Part: ", Part)
  18. //[].part 键值
  19. partMap := config.ParseGroupCase(Part)
  20. //fmt.Println("[sql] partMap: ", partMap)
  21. //[].partMap[测试步骤],sql运行
  22. partTestStepScanner := bufio.NewScanner(strings.NewReader(partMap["测试步骤"]))
  23. for partTestStepScanner.Scan() {
  24. partLine := partTestStepScanner.Text()
  25. switch {
  26. case strings.HasPrefix(partLine, "--"):
  27. strings.TrimSpace(strings.TrimPrefix(partLine, "--"))
  28. //fmt.Printf("带有--key: %s\n", key)
  29. case strings.Contains(partLine, ";"):
  30. //fmt.Printf("不带有--sql: %s\n", partLine)
  31. sql := strings.TrimSpace(partLine[:strings.Index(partLine, ";")+1])
  32. //fmt.Printf("sql TrimSpace: %s\n", sql)
  33. isQueryOrInsert(db, sql)
  34. }
  35. }
  36. if err := partTestStepScanner.Err(); err != nil {
  37. fmt.Println("partTestStepScanner.Error reading input:", err)
  38. }
  39. }
  40. }
  41. func isQueryOrInsert(db *sql.DB, sql string) {
  42. switch {
  43. //执行查询语句
  44. case strings.HasPrefix(sql, "select"):
  45. {
  46. fmt.Printf("\nsql is select: %s\n", sql)
  47. dbBase.QueryString(db, sql)
  48. }
  49. //执行大对象插入语句
  50. case isBlob(sql):
  51. {
  52. fmt.Printf("\nsql is 大对象插入: %s\n", sql)
  53. }
  54. //其他语句调用exec函数
  55. default:
  56. {
  57. //不是大对象插入语句的处理
  58. fmt.Printf("\nsql is 不是大对象插入语句的处理: %s\n", sql)
  59. dbBase.ExecString(db, sql)
  60. }
  61. }
  62. }
  63. func isBlob(sql string) bool {
  64. utils.ContainsKeyword(sql, "values")
  65. questionMarksCount := utils.IsInsertBlob(sql)
  66. switch {
  67. case questionMarksCount > 0:
  68. {
  69. return true
  70. }
  71. default:
  72. return false
  73. }
  74. }