5.7 KiB
5.7 KiB
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": "错误信息"
}
注意事项
-
DLL 文件位置
- 确保
dll/es.dll文件存在于项目根目录 - 如果提示找不到 DLL,检查路径是否正确
- 确保
-
JSON 参数格式
- 在命令行中使用时,JSON 参数需要用单引号包裹
- Windows CMD 可能需要转义引号,建议使用 PowerShell
-
错误处理
- 所有方法都返回
(string, error) - 使用时检查 error 是否为 nil
- 所有方法都返回
-
资源释放
- 使用
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 字符串正确释放
- 资源正确释放