daShangDao_centerBook/es/DLL测试说明.md
2026-02-28 14:27:33 +08:00

5.7 KiB
Raw Permalink Blame History

es.dll 测试说明

测试文件说明

项目中有三种测试方式:

1. 单元测试文件 (es_dll_test.go)

使用 Go 标准的测试框架,包含完整的单元测试。

2. 命令行测试工具 (test_dll.go)

交互式命令行工具,可以手动测试各种功能。

3. 演示测试

自动化的完整演示流程。


方法一:运行单元测试

运行所有测试

cd es
go test -v

运行单个测试

cd es
go test -v -run TestListAllIndices
go test -v -run TestCreateDocument
go test -v -run TestCompleteWorkflow

查看测试覆盖率

go test -cover

方法二:使用命令行测试工具

基本语法

# 在项目根目录运行
go run test_es_dll.go <命令> [参数...]

查看帮助

go run test_es_dll.go

常用命令示例

1. 查询所有索引

go run test_dll.go list

2. 获取所有索引详细信息

go run test_dll.go info

3. 创建索引

go run test_dll.go create my_index '{"properties":{"title":{"type":"text"},"author":{"type":"keyword"}}}'

4. 查看索引详情

go run test_dll.go detail my_index

5. 创建文档

go run test_dll.go add my_index doc1 '{"title":"测试文档","author":"张三","content":"这是测试内容"}'

6. 获取文档

go run test_dll.go get my_index doc1

7. 更新文档

go run test_dll.go update my_index doc1 '{"doc":{"title":"更新后的标题"}}'

8. 搜索文档

# 搜索所有文档
go run test_dll.go search my_index '{"query":{"match_all":{}}}'

# 搜索特定内容
go run test_dll.go search my_index '{"query":{"match":{"title":"测试"}}}'

# 带分页的搜索
go run test_dll.go search my_index '{"query":{"match_all":{}},"from":0,"size":10}'

9. 获取文档数量

go run test_dll.go count my_index

10. 删除文档

go run test_dll.go del_doc my_index doc1

11. 删除索引

go run test_dll.go delete my_index

12. 运行完整演示

go run test_dll.go test

方法三:在代码中使用

示例代码

package main

import (
    "centerBook/es"
    "encoding/json"
    "fmt"
    "log"
)

func main() {
    // 1. 初始化DLL
    dll, err := es.InitEsDLL()
    if err != nil {
        log.Fatalf("初始化失败: %v", err)
    }
    defer dll.Close()

    // 2. 查询所有索引
    result, err := dll.ListAllIndices()
    if err != nil {
        log.Fatalf("查询失败: %v", err)
    }

    // 3. 解析JSON结果
    var data map[string]interface{}
    json.Unmarshal([]byte(result), &data)
    fmt.Printf("所有索引: %v\n", data)

    // 4. 创建索引
    mapping := `{
        "properties": {
            "title": {"type": "text"},
            "author": {"type": "keyword"}
        }
    }`
    result, _ = dll.CreateIndex("my_index", mapping)
    fmt.Printf("创建索引结果: %s\n", result)

    // 5. 添加文档
    doc := `{"title": "Go语言编程", "author": "张三"}`
    result, _ = dll.CreateDocument("my_index", "doc1", doc)
    fmt.Printf("添加文档结果: %s\n", result)

    // 6. 搜索文档
    query := `{"query": {"match": {"title": "Go"}}}`
    result, _ = dll.SearchDocuments("my_index", query)
    fmt.Printf("搜索结果: %s\n", result)

    // 7. 清理
    dll.DeleteDocument("my_index", "doc1")
    dll.DeleteIndex("my_index")
}

DLL 接口说明

所有方法返回的格式都是 JSON 字符串:

成功响应格式

{
    "success": true,
    "message": "",
    "data": {...}
}

错误响应格式

{
    "success": false,
    "message": "错误信息"
}

注意事项

  1. DLL 文件位置

    • 确保 dll/es.dll 文件存在于项目根目录
    • 如果提示找不到 DLL检查路径是否正确
  2. JSON 参数格式

    • 在命令行中使用时JSON 参数需要用单引号包裹
    • Windows CMD 可能需要转义引号,建议使用 PowerShell
  3. 错误处理

    • 所有方法都返回 (string, error)
    • 使用时检查 error 是否为 nil
  4. 资源释放

    • 使用 defer dll.Close() 确保 DLL 资源被释放
    • C 字符串指针会自动释放

快速测试流程

完整测试流程(推荐新手)

# 1. 运行自动演示(最简单)
cd es
go run test_dll.go test

# 2. 手动测试各个功能
# 查看现有索引
go run test_dll.go list

# 创建测试索引
go run test_dll.go create test '{"properties":{"title":{"type":"text"}}}'

# 添加文档
go run test_dll.go add test doc1 '{"title":"Hello World"}'

# 查询文档
go run test_dll.go get test doc1

# 搜索
go run test_dll.go search test '{"query":{"match_all":{}}}'

# 删除文档
go run test_dll.go del_doc test doc1

# 删除索引
go run test_dll.go delete test

运行单元测试(推荐验证功能)

cd es

# 运行所有测试
go test -v

# 运行完整工作流测试
go test -v -run TestCompleteWorkflow

常见问题

Q: 提示找不到 DLL

A: 检查 dll/es.dll 文件是否存在,路径是否正确

Q: JSON 格式错误

A: 确保 JSON 字符串格式正确,使用在线工具验证

Q: 命令行中 JSON 参数太复杂

A: 将 JSON 保存到文件,然后读取:

# Linux/Mac
go run test_dll.go search test "$(cat query.json)"

# Windows PowerShell
go run test_dll.go search test (Get-Content query.json -Raw)

测试检查清单

  • DLL 能正常加载
  • 能查询所有索引
  • 能创建索引
  • 能创建文档
  • 能获取文档
  • 能更新文档
  • 能搜索文档
  • 能删除文档
  • 能删除索引
  • C 字符串正确释放
  • 资源正确释放