{"id":34160380,"url":"https://github.com/lengzhao/testtools","last_synced_at":"2026-03-09T21:04:52.257Z","repository":{"id":61623427,"uuid":"533188479","full_name":"lengzhao/testtools","owner":"lengzhao","description":"test tool of grpc. mock server/ mock client","archived":false,"fork":false,"pushed_at":"2025-06-13T14:29:23.000Z","size":51,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-18T02:59:55.819Z","etag":null,"topics":["grpc","mock"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lengzhao.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-09-06T06:21:45.000Z","updated_at":"2025-06-13T14:33:09.000Z","dependencies_parsed_at":"2022-10-19T19:45:50.846Z","dependency_job_id":null,"html_url":"https://github.com/lengzhao/testtools","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/lengzhao/testtools","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lengzhao%2Ftesttools","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lengzhao%2Ftesttools/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lengzhao%2Ftesttools/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lengzhao%2Ftesttools/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lengzhao","download_url":"https://codeload.github.com/lengzhao/testtools/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lengzhao%2Ftesttools/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30312147,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-09T20:05:46.299Z","status":"ssl_error","status_checked_at":"2026-03-09T19:57:04.425Z","response_time":61,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["grpc","mock"],"created_at":"2025-12-15T08:27:06.814Z","updated_at":"2026-03-09T21:04:52.251Z","avatar_url":"https://github.com/lengzhao.png","language":"Go","readme":"# testtools\n\neasy test\n\n## grpc client\n\n1. 可以简单的通过json文件，就能够测试grpc服务的功能\n2. 可以通过proto文件，自动生成测试模版（不含数据的json文件），补充少量数据就能够成为测试用例\n\n### 如何用\n\n1. 安装：go install github.com/lengzhao/testtools/cmd/grpc_testtool@latest\n2. 查看帮助：grpc_testtool -h\n   1. 如果命令失败，请确认是否将\\$GOPATH/bin添加到\\$PATH里面\n\n    ```bash\n    $grpc_testtool -h\n    Usage of grpc_testtool:\n    -addr string\n            the grpc server address (default \"localhost:50051\")\n    -gen string\n            testcase path, new testcase with null value\n    -import string\n            import path of proto, split with ',' (default \"./protos\")\n    -proto string\n            proto path (default \"./protos\")\n    -testcase string\n            testcase path(include json files) (default \"./testcase\")\n    ```\n\n3. 将proto文件放到文件夹protos里面\n4. 生成测试模板：grpc_testtool -gen ./testcase\n   1. 它将自动根据不同的service创建不同的子文件夹\n   2. 然后根据不同的method，创建不同的json文件\n   3. 每个文件对应一个接口的测试参数\n   4. 文件夹的名字和文件的名字都可以修改\n5. 填充测试用例的数据\n\n    ```json\n    {\n    \"name\": \"helloworld.Greeter.SayHello\",\n    \"service\": \"helloworld.Greeter\",\n    \"method\": \"helloworld.Greeter.SayHello\",\n    \"headers\": [],\n    \"error_code\": 0,\n    \"error\": \"\",\n    \"request\": {\n        \"name\": \"aa\"\n    },\n    \"response\": {\n        \"message\": \"Hello aa\"\n    }\n    }\n    ```\n\n   1. 样例数据如上\n   2. name可以根据自己的需要修改，尽量不重复，方便确认执行的是哪个用例\n   3. 自己可以添加其他字段，如description，描述用例的测试场景\n   4. 如果有需要指定grpc header，使用[]string，每一项对应一个header\n      1. 每个header用\":\"分隔为key和value\n   5. request是请求需要的传的数据\n   6. response是希望得到的数据，它将跟实际得到的数据进行比较\n      1. 它要求完全匹配，否则失败\n      2. 如果接受任何的响应，则设置为\"response\": \"*\"\n   7. 如果是测试异常场景，则设置error和error_code\n      1. 如果只是希望失败，但不限制具体的错误信息，则设置为error_code为非零值，\"error\": \"*\"\n   8. 可以添加/复制/修改测试用例\n\n6. 启动grpc服务，如greetee_server，假设其端口为5555\n7. 执行测试：grpc_testtool -addr 127.0.0.1:5555 -testcase ./testcase -import ./protos -proto ./protos\n\n## grpc server\n\n1. 可以简单的通过json文件，就能够模拟简单的grpc服务\n2. 可以通过proto文件，自动生成测试模版（不含数据的json文件），补充少量数据就能够成为模拟数据\n\n### 如何使用\n\n1. 安装：go install github.com/lengzhao/testtools/cmd/dynamic_grpc_server@latest\n2. 查看帮助：dynamic_grpc_server -h\n   1. 如果命令失败，请确认是否将\\$GOPATH/bin添加到\\$PATH里面\n\n    ```bash\n    % dynamic_grpc_server -h\n    Usage of dynamic_grpc_server:\n    -gen string\n            testcase path, new testcase with null value\n    -import string\n            import path of proto, split with ',' (default \"./protos\")\n    -port int\n            The server port (default 50051)\n    -proto string\n            proto path (default \"./protos\")\n    -testcase string\n            testcase path(include json files) (default \"./testcase\")\n    ```\n\n3. 将proto文件放到文件夹protos里面\n4. 生成模拟数据的模板：dynamic_grpc_server -gen ./testcase\n   1. 它将自动根据不同的service创建不同的子文件夹\n   2. 然后根据不同的method，创建不同的json文件\n   3. 每个文件对应一个接口的模拟参数\n   4. 文件夹的名字和文件的名字都可以修改\n   5. 可以自己复制多个文件，填充不同数据，模拟不同场景\n5. 填充测试用例的数据\n\n    ```json\n    {\n    \"name\": \"helloworld.Greeter.SayHello\",\n    \"service\": \"helloworld.Greeter\",\n    \"method\": \"helloworld.Greeter.SayHello\",\n    \"headers\": [],\n    \"error_code\": 0,\n    \"error\": \"\",\n    \"request\": {\n        \"name\": \"aa\"\n    },\n    \"response\": {\n        \"message\": \"Hello aa\"\n    }\n    }\n    ```\n\n   1. 样例数据如上\n   2. name可以根据自己的需要修改，尽量不重复，方便确认执行的是哪个用例\n   3. 自己可以添加其他字段，如description，描述用例的模拟场景\n   4. request是要匹配的请求数据\n      1. 可以设置默认的，匹配任何数据，设置为\"request\": \"*\"\n      2. 如果没有设置默认数据，又没有匹配的request，则返回失败\n   5. response是希望得到的数据，它将是client要收到的数据\n   6. 如果要返回异常，则设置error_code和error\n   7. 可以添加/复制/修改测试用例\n\n6. 启动grpc服务：dynamic_grpc_server\n\n## http2grpc\n\n它接收http请求，并转换成grpc到endponit\n\n1. 安装：go install github.com/lengzhao/testtools/cmd/http2grpc@latest\n2. 查看帮助：http2grpc -h\n\n    ```bash\n    % ./http2grpc -h\n    Usage of ./http2grpc:\n    -addr string\n            listen address (default \":8080\")\n    -endponit string\n            the grpc server address(endpoint) (default \"localhost:50051\")\n    -gen string\n            testcase path, new testcase with null value\n    -import string\n            import path of proto, split with ',' (default \"./protos\")\n    -pre string\n            the prefix of url path (default \"/ov/\")\n    -proto string\n            proto path (default \"./protos\")\n    ```\n\n### 如何使用\n\n1. 先启动一个grpc服务，如上面的dynamic_grpc_server，可以直接在cmd/dynamic_grpc_server文件夹下执行`go run main.go`\n2. 使用相同的proto文件运行http2grpc，可以在cmd/http2grpc文件夹下执行`go run main.go`\n3. 发送请求\n\n```bash\n% curl -X POST http://localhost:8080/ov/helloworld.Greeter/SayHello -H \"Content-Type: application/json\" -d '{\"name\": \"aa\"}'\n## 希望得到如下结果\n{\n  \"message\": \"hello aa\"\n}\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flengzhao%2Ftesttools","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flengzhao%2Ftesttools","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flengzhao%2Ftesttools/lists"}