diff --git a/AGENTS.md b/AGENTS.md index 513ece9..01c64be 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -3,7 +3,7 @@ ## Project Structure & Modules - `cmd/httprunner`: CLI to execute .http scenarios and produce reports. - `cmd/harparser`: HAR → `.http` extractor tool. -- `parser`, `runner`, `reporting`, `metrics`, `http`, `template`: Core Go packages. +- `src/parser`, `src/runner`, `src/reporting`, `src/metrics`, `src/http`, `src/template`, `src/converter`: Core Go packages. - `tests`: All `.http` test files organized into `e2e/`, `unit/`, and `examples/` subdirectories. - `testapi`, `docker-compose.yml`: Local test services (API + toxiproxy). - `build/`, `results/` or `reports/`: Build artifacts and test outputs. diff --git a/README.md b/README.md index 535b853..55418c3 100644 --- a/README.md +++ b/README.md @@ -52,18 +52,29 @@ Notes: ``` github.com/deicon/httprunner/ -├── main.go # Entry point and CLI argument parsing -├── http/ -│ └── requests.go # HTTP request data structure -├── parser/ -│ ├── parser.go # .http file parsing logic -│ └── parser_test.go # Parser tests -├── runner/ -│ └── runner.go # Request execution and concurrency management -├── docs/ -│ └── specs/ -│ └── requirements.md # Project requirements and specifications -└── requests.http # Sample HTTP requests file +├── cmd/ +│ ├── httprunner/ # Main CLI entry point +│ └── harparser/ # HAR to .http converter +├── src/ +│ ├── http/ +│ │ └── requests.go # HTTP request data structure +│ ├── parser/ +│ │ ├── parser.go # .http file parsing logic +│ │ └── parser_test.go # Parser tests +│ ├── runner/ +│ │ └── runner.go # Request execution and concurrency management +│ ├── reporting/ # Report generation and formatters +│ ├── metrics/ # Metrics collection +│ ├── template/ # Template processing +│ └── converter/ # Format converters (e.g., K6) +├── tests/ +│ ├── e2e/ # End-to-end test scenarios +│ ├── unit/ # Unit test scenarios +│ └── examples/ # Example .http files +├── testapi/ # Test API service +└── docs/ + └── specs/ + └── requirements.md # Project requirements and specifications ``` ## Usage diff --git a/cmd/httprunner/convert_k6.go b/cmd/httprunner/convert_k6.go index 813745a..f96ee82 100644 --- a/cmd/httprunner/convert_k6.go +++ b/cmd/httprunner/convert_k6.go @@ -1,8 +1,8 @@ package main import ( - k6conv "github.com/deicon/httprunner/converter/k6" - chttp "github.com/deicon/httprunner/http" + k6conv "github.com/deicon/httprunner/src/converter/k6" + chttp "github.com/deicon/httprunner/src/http" ) // requireK6Generate is isolated to avoid import when not used diff --git a/cmd/httprunner/main.go b/cmd/httprunner/main.go index 2667cc1..aee754e 100644 --- a/cmd/httprunner/main.go +++ b/cmd/httprunner/main.go @@ -8,11 +8,11 @@ import ( "strings" "time" - "github.com/deicon/httprunner/parser" - "github.com/deicon/httprunner/reporting" - "github.com/deicon/httprunner/reporting/formatters/hierarchical" - "github.com/deicon/httprunner/reporting/types" - "github.com/deicon/httprunner/runner" + "github.com/deicon/httprunner/src/parser" + "github.com/deicon/httprunner/src/reporting" + "github.com/deicon/httprunner/src/reporting/formatters/hierarchical" + "github.com/deicon/httprunner/src/reporting/types" + "github.com/deicon/httprunner/src/runner" ) // version is populated at build time via ldflags (-X main.version=...) diff --git a/converter/k6/generator.go b/src/converter/k6/generator.go similarity index 97% rename from converter/k6/generator.go rename to src/converter/k6/generator.go index 902200b..4789226 100644 --- a/converter/k6/generator.go +++ b/src/converter/k6/generator.go @@ -6,8 +6,8 @@ import ( "sort" "strings" - chttp "github.com/deicon/httprunner/http" - "github.com/deicon/httprunner/template" + chttp "github.com/deicon/httprunner/src/http" + "github.com/deicon/httprunner/src/template" ) // Options controls K6 generation behavior @@ -241,7 +241,7 @@ func jsProp(k string) string { if len(k) > 0 && ((k[0] >= 'a' && k[0] <= 'z') || (k[0] >= 'A' && k[0] <= 'Z') || k[0] == '_') { for i := 1; i < len(k); i++ { c := k[i] - if !((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '_') { + if (c < 'a' || c > 'z') && (c < 'A' || c > 'Z') && (c < '0' || c > '9') && c != '_' { return jsStringSingle(k) } } diff --git a/converter/k6/generator_test.go b/src/converter/k6/generator_test.go similarity index 98% rename from converter/k6/generator_test.go rename to src/converter/k6/generator_test.go index ac066ab..32e947f 100644 --- a/converter/k6/generator_test.go +++ b/src/converter/k6/generator_test.go @@ -6,7 +6,7 @@ import ( "strings" "testing" - "github.com/deicon/httprunner/parser" + "github.com/deicon/httprunner/src/parser" ) func writeTempFile(t *testing.T, dir, name, content string) string { diff --git a/http/requests.go b/src/http/requests.go similarity index 100% rename from http/requests.go rename to src/http/requests.go diff --git a/metrics/metrics.go b/src/metrics/metrics.go similarity index 100% rename from metrics/metrics.go rename to src/metrics/metrics.go diff --git a/metrics/metrics_test.go b/src/metrics/metrics_test.go similarity index 100% rename from metrics/metrics_test.go rename to src/metrics/metrics_test.go diff --git a/parser/extended_parser_test.go b/src/parser/extended_parser_test.go similarity index 98% rename from parser/extended_parser_test.go rename to src/parser/extended_parser_test.go index 3697c5a..f60dbcd 100644 --- a/parser/extended_parser_test.go +++ b/src/parser/extended_parser_test.go @@ -4,7 +4,7 @@ import ( "os" "testing" - "github.com/deicon/httprunner/http" + "github.com/deicon/httprunner/src/http" ) func writeToFile(filename, content string) error { diff --git a/parser/parser.go b/src/parser/parser.go similarity index 99% rename from parser/parser.go rename to src/parser/parser.go index 3799e48..0c78c47 100644 --- a/parser/parser.go +++ b/src/parser/parser.go @@ -2,7 +2,7 @@ package parser import ( "bufio" - "github.com/deicon/httprunner/http" + "github.com/deicon/httprunner/src/http" "os" "strings" diff --git a/parser/parser_test.go b/src/parser/parser_test.go similarity index 98% rename from parser/parser_test.go rename to src/parser/parser_test.go index 34f4ff0..fd42739 100644 --- a/parser/parser_test.go +++ b/src/parser/parser_test.go @@ -1,7 +1,7 @@ package parser import ( - "github.com/deicon/httprunner/http" + "github.com/deicon/httprunner/src/http" "os" "reflect" "strings" diff --git a/reporting/file_reporter.go b/src/reporting/file_reporter.go similarity index 99% rename from reporting/file_reporter.go rename to src/reporting/file_reporter.go index 224750b..273e1ac 100644 --- a/reporting/file_reporter.go +++ b/src/reporting/file_reporter.go @@ -8,8 +8,8 @@ import ( "sort" "time" - "github.com/deicon/httprunner/metrics" - "github.com/deicon/httprunner/reporting/types" + "github.com/deicon/httprunner/src/metrics" + "github.com/deicon/httprunner/src/reporting/types" ) // FileReporter generates reports from streamed result files diff --git a/reporting/file_reporter_test.go b/src/reporting/file_reporter_test.go similarity index 99% rename from reporting/file_reporter_test.go rename to src/reporting/file_reporter_test.go index 91dfb54..6acd7e3 100644 --- a/reporting/file_reporter_test.go +++ b/src/reporting/file_reporter_test.go @@ -8,7 +8,7 @@ import ( "testing" "time" - "github.com/deicon/httprunner/reporting/types" + "github.com/deicon/httprunner/src/reporting/types" ) // writeJSONL writes RequestResult lines to a temp file and returns the path diff --git a/reporting/formatters.go b/src/reporting/formatters.go similarity index 77% rename from reporting/formatters.go rename to src/reporting/formatters.go index 575da39..d27611a 100644 --- a/reporting/formatters.go +++ b/src/reporting/formatters.go @@ -1,11 +1,11 @@ package reporting import ( - "github.com/deicon/httprunner/reporting/formatters/console" - "github.com/deicon/httprunner/reporting/formatters/csv" - "github.com/deicon/httprunner/reporting/formatters/html" - json2 "github.com/deicon/httprunner/reporting/formatters/json" - "github.com/deicon/httprunner/reporting/types" + "github.com/deicon/httprunner/src/reporting/formatters/console" + "github.com/deicon/httprunner/src/reporting/formatters/csv" + "github.com/deicon/httprunner/src/reporting/formatters/html" + json2 "github.com/deicon/httprunner/src/reporting/formatters/json" + "github.com/deicon/httprunner/src/reporting/types" ) // Formatter interface for different report formats diff --git a/reporting/formatters/console/formatter_console.go b/src/reporting/formatters/console/formatter_console.go similarity index 98% rename from reporting/formatters/console/formatter_console.go rename to src/reporting/formatters/console/formatter_console.go index 7746b0f..1fb207a 100644 --- a/reporting/formatters/console/formatter_console.go +++ b/src/reporting/formatters/console/formatter_console.go @@ -5,8 +5,8 @@ import ( "fmt" "strings" - "github.com/deicon/httprunner/metrics" - "github.com/deicon/httprunner/reporting/types" + "github.com/deicon/httprunner/src/metrics" + "github.com/deicon/httprunner/src/reporting/types" ) // ConsoleFormatter formats reports for console output diff --git a/reporting/formatters/console/formatter_console_test.go b/src/reporting/formatters/console/formatter_console_test.go similarity index 89% rename from reporting/formatters/console/formatter_console_test.go rename to src/reporting/formatters/console/formatter_console_test.go index 553c072..a858fe7 100644 --- a/reporting/formatters/console/formatter_console_test.go +++ b/src/reporting/formatters/console/formatter_console_test.go @@ -1,7 +1,7 @@ package console import ( - "github.com/deicon/httprunner/reporting/types" + "github.com/deicon/httprunner/src/reporting/types" "strings" "testing" "time" diff --git a/reporting/formatters/csv/formatter_csv.go b/src/reporting/formatters/csv/formatter_csv.go similarity index 96% rename from reporting/formatters/csv/formatter_csv.go rename to src/reporting/formatters/csv/formatter_csv.go index 1bc9410..c1c7ef6 100644 --- a/reporting/formatters/csv/formatter_csv.go +++ b/src/reporting/formatters/csv/formatter_csv.go @@ -7,7 +7,7 @@ import ( "strings" "time" - "github.com/deicon/httprunner/reporting/types" + "github.com/deicon/httprunner/src/reporting/types" ) // CSVFormatter formats reports as CSV diff --git a/reporting/formatters/csv/formatter_csv_test.go b/src/reporting/formatters/csv/formatter_csv_test.go similarity index 92% rename from reporting/formatters/csv/formatter_csv_test.go rename to src/reporting/formatters/csv/formatter_csv_test.go index b526891..79fd5c2 100644 --- a/reporting/formatters/csv/formatter_csv_test.go +++ b/src/reporting/formatters/csv/formatter_csv_test.go @@ -1,7 +1,7 @@ package csv import ( - "github.com/deicon/httprunner/reporting/types" + "github.com/deicon/httprunner/src/reporting/types" "strings" "testing" "time" diff --git a/reporting/formatters/hierarchical/hierarchical.go b/src/reporting/formatters/hierarchical/hierarchical.go similarity index 99% rename from reporting/formatters/hierarchical/hierarchical.go rename to src/reporting/formatters/hierarchical/hierarchical.go index 50b13e3..6c03d35 100644 --- a/reporting/formatters/hierarchical/hierarchical.go +++ b/src/reporting/formatters/hierarchical/hierarchical.go @@ -9,8 +9,8 @@ import ( "strings" "time" - "github.com/deicon/httprunner/metrics" - "github.com/deicon/httprunner/reporting/types" + "github.com/deicon/httprunner/src/metrics" + "github.com/deicon/httprunner/src/reporting/types" ) // HierarchicalFormatter formats hierarchical reports based on detail level diff --git a/reporting/formatters/hierarchical/templates/hierarchicalHTMLTemplate.html b/src/reporting/formatters/hierarchical/templates/hierarchicalHTMLTemplate.html similarity index 100% rename from reporting/formatters/hierarchical/templates/hierarchicalHTMLTemplate.html rename to src/reporting/formatters/hierarchical/templates/hierarchicalHTMLTemplate.html diff --git a/reporting/formatters/html/formatter_html.go b/src/reporting/formatters/html/formatter_html.go similarity index 96% rename from reporting/formatters/html/formatter_html.go rename to src/reporting/formatters/html/formatter_html.go index e203519..fbc523e 100644 --- a/reporting/formatters/html/formatter_html.go +++ b/src/reporting/formatters/html/formatter_html.go @@ -7,7 +7,7 @@ import ( "strings" "time" - "github.com/deicon/httprunner/reporting/types" + "github.com/deicon/httprunner/src/reporting/types" ) // HTMLFormatter formats reports as HTML diff --git a/reporting/formatters/html/formatter_html_test.go b/src/reporting/formatters/html/formatter_html_test.go similarity index 89% rename from reporting/formatters/html/formatter_html_test.go rename to src/reporting/formatters/html/formatter_html_test.go index ec469dc..e78b9d4 100644 --- a/reporting/formatters/html/formatter_html_test.go +++ b/src/reporting/formatters/html/formatter_html_test.go @@ -1,7 +1,7 @@ package html import ( - "github.com/deicon/httprunner/reporting/types" + "github.com/deicon/httprunner/src/reporting/types" "strings" "testing" "time" diff --git a/reporting/formatters/html/templates/htmlTemplate.html b/src/reporting/formatters/html/templates/htmlTemplate.html similarity index 100% rename from reporting/formatters/html/templates/htmlTemplate.html rename to src/reporting/formatters/html/templates/htmlTemplate.html diff --git a/reporting/formatters/json/formatter_json.go b/src/reporting/formatters/json/formatter_json.go similarity index 97% rename from reporting/formatters/json/formatter_json.go rename to src/reporting/formatters/json/formatter_json.go index ac9697c..cfc2812 100644 --- a/reporting/formatters/json/formatter_json.go +++ b/src/reporting/formatters/json/formatter_json.go @@ -4,7 +4,7 @@ import ( "encoding/json" "time" - "github.com/deicon/httprunner/reporting/types" + "github.com/deicon/httprunner/src/reporting/types" ) // JSONFormatter formats reports as JSON diff --git a/reporting/formatters/json/formatter_json_test.go b/src/reporting/formatters/json/formatter_json_test.go similarity index 89% rename from reporting/formatters/json/formatter_json_test.go rename to src/reporting/formatters/json/formatter_json_test.go index 12c36b3..4980b3d 100644 --- a/reporting/formatters/json/formatter_json_test.go +++ b/src/reporting/formatters/json/formatter_json_test.go @@ -2,7 +2,7 @@ package json import ( "encoding/json" - "github.com/deicon/httprunner/reporting/types" + "github.com/deicon/httprunner/src/reporting/types" "testing" "time" ) diff --git a/reporting/formatters_hierarchical_test.go b/src/reporting/formatters_hierarchical_test.go similarity index 97% rename from reporting/formatters_hierarchical_test.go rename to src/reporting/formatters_hierarchical_test.go index 412e012..7a51181 100644 --- a/reporting/formatters_hierarchical_test.go +++ b/src/reporting/formatters_hierarchical_test.go @@ -6,8 +6,8 @@ import ( "testing" "time" - "github.com/deicon/httprunner/reporting/formatters/hierarchical" - "github.com/deicon/httprunner/reporting/types" + "github.com/deicon/httprunner/src/reporting/formatters/hierarchical" + "github.com/deicon/httprunner/src/reporting/types" ) func sampleHierarchical() *types.HierarchicalReport { diff --git a/reporting/formatters_snapshot_test.go b/src/reporting/formatters_snapshot_test.go similarity index 94% rename from reporting/formatters_snapshot_test.go rename to src/reporting/formatters_snapshot_test.go index 264629a..7714062 100644 --- a/reporting/formatters_snapshot_test.go +++ b/src/reporting/formatters_snapshot_test.go @@ -6,12 +6,12 @@ import ( "testing" "time" - "github.com/deicon/httprunner/metrics" - "github.com/deicon/httprunner/reporting/formatters/console" - "github.com/deicon/httprunner/reporting/formatters/csv" - "github.com/deicon/httprunner/reporting/formatters/html" - jsonfmt "github.com/deicon/httprunner/reporting/formatters/json" - "github.com/deicon/httprunner/reporting/types" + "github.com/deicon/httprunner/src/metrics" + "github.com/deicon/httprunner/src/reporting/formatters/console" + "github.com/deicon/httprunner/src/reporting/formatters/csv" + "github.com/deicon/httprunner/src/reporting/formatters/html" + jsonfmt "github.com/deicon/httprunner/src/reporting/formatters/json" + "github.com/deicon/httprunner/src/reporting/types" ) func sampleReport() *types.Report { diff --git a/reporting/streaming/streaming.go b/src/reporting/streaming/streaming.go similarity index 98% rename from reporting/streaming/streaming.go rename to src/reporting/streaming/streaming.go index 11bb2d8..00a9500 100644 --- a/reporting/streaming/streaming.go +++ b/src/reporting/streaming/streaming.go @@ -10,7 +10,7 @@ import ( "path/filepath" "time" - "github.com/deicon/httprunner/reporting/types" + "github.com/deicon/httprunner/src/reporting/types" ) // StreamingCollector writes results to files as they arrive to reduce memory usage diff --git a/reporting/streaming/streaming_test.go b/src/reporting/streaming/streaming_test.go similarity index 96% rename from reporting/streaming/streaming_test.go rename to src/reporting/streaming/streaming_test.go index bb87933..9df3144 100644 --- a/reporting/streaming/streaming_test.go +++ b/src/reporting/streaming/streaming_test.go @@ -8,7 +8,7 @@ import ( "testing" "time" - "github.com/deicon/httprunner/reporting/types" + "github.com/deicon/httprunner/src/reporting/types" ) func readLines(t *testing.T, path string) []string { diff --git a/reporting/types/types.go b/src/reporting/types/types.go similarity index 98% rename from reporting/types/types.go rename to src/reporting/types/types.go index 11275ef..7e23659 100644 --- a/reporting/types/types.go +++ b/src/reporting/types/types.go @@ -3,7 +3,7 @@ package types import ( "time" - "github.com/deicon/httprunner/metrics" + "github.com/deicon/httprunner/src/metrics" ) // CheckResult represents the result of a single check diff --git a/runner/runner.go b/src/runner/runner.go similarity index 98% rename from runner/runner.go rename to src/runner/runner.go index 4a7fc6a..e670264 100644 --- a/runner/runner.go +++ b/src/runner/runner.go @@ -13,12 +13,12 @@ import ( "sync" "time" - chttp "github.com/deicon/httprunner/http" - "github.com/deicon/httprunner/metrics" - "github.com/deicon/httprunner/reporting" - "github.com/deicon/httprunner/reporting/streaming" - "github.com/deicon/httprunner/reporting/types" - "github.com/deicon/httprunner/template" + chttp "github.com/deicon/httprunner/src/http" + "github.com/deicon/httprunner/src/metrics" + "github.com/deicon/httprunner/src/reporting" + "github.com/deicon/httprunner/src/reporting/streaming" + "github.com/deicon/httprunner/src/reporting/types" + "github.com/deicon/httprunner/src/template" ) // Runner executes HTTP requests diff --git a/runner/runner_test.go b/src/runner/runner_test.go similarity index 98% rename from runner/runner_test.go rename to src/runner/runner_test.go index cc658bd..19083fc 100644 --- a/runner/runner_test.go +++ b/src/runner/runner_test.go @@ -9,9 +9,9 @@ import ( "testing" "time" - chttp "github.com/deicon/httprunner/http" - "github.com/deicon/httprunner/metrics" - tpl "github.com/deicon/httprunner/template" + chttp "github.com/deicon/httprunner/src/http" + "github.com/deicon/httprunner/src/metrics" + tpl "github.com/deicon/httprunner/src/template" ) func scriptOnlyRequest(name string, checks int, fail bool) chttp.Request { diff --git a/template/additional_template_test.go b/src/template/additional_template_test.go similarity index 97% rename from template/additional_template_test.go rename to src/template/additional_template_test.go index 0ed0205..a63e0f3 100644 --- a/template/additional_template_test.go +++ b/src/template/additional_template_test.go @@ -2,8 +2,8 @@ package template import ( "fmt" - chttp "github.com/deicon/httprunner/http" - "github.com/deicon/httprunner/metrics" + chttp "github.com/deicon/httprunner/src/http" + "github.com/deicon/httprunner/src/metrics" "os" "path/filepath" "testing" diff --git a/template/extended_template_test.go b/src/template/extended_template_test.go similarity index 98% rename from template/extended_template_test.go rename to src/template/extended_template_test.go index c565c7f..aa2890a 100644 --- a/template/extended_template_test.go +++ b/src/template/extended_template_test.go @@ -3,7 +3,7 @@ package template import ( "testing" - "github.com/deicon/httprunner/http" + "github.com/deicon/httprunner/src/http" ) func TestConvertNameToFunctionName(t *testing.T) { diff --git a/template/node_runtime.go b/src/template/node_runtime.go similarity index 100% rename from template/node_runtime.go rename to src/template/node_runtime.go diff --git a/template/node_worker.js b/src/template/node_worker.js similarity index 100% rename from template/node_worker.js rename to src/template/node_worker.js diff --git a/template/template.go b/src/template/template.go similarity index 99% rename from template/template.go rename to src/template/template.go index fd07cab..a177498 100644 --- a/template/template.go +++ b/src/template/template.go @@ -14,9 +14,9 @@ import ( "time" "github.com/Masterminds/sprig/v3" - chttp "github.com/deicon/httprunner/http" - "github.com/deicon/httprunner/metrics" - "github.com/deicon/httprunner/reporting/types" + chttp "github.com/deicon/httprunner/src/http" + "github.com/deicon/httprunner/src/metrics" + "github.com/deicon/httprunner/src/reporting/types" "github.com/dop251/goja" ) diff --git a/template/template_test.go b/src/template/template_test.go similarity index 100% rename from template/template_test.go rename to src/template/template_test.go diff --git a/testapi/demo.http b/testapi/demo.http index edf2d08..472f30c 100644 --- a/testapi/demo.http +++ b/testapi/demo.http @@ -12,5 +12,5 @@ Content-Type: application/json %} ### -GET http://localhost:8080/api/pollingjob/{{jobId}} +GET http://localhost:8080/api/pollingjob/{{.jobId}} Content-Type: application/json