Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
35 changes: 23 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions cmd/httprunner/convert_k6.go
Original file line number Diff line number Diff line change
@@ -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
Expand Down
10 changes: 5 additions & 5 deletions cmd/httprunner/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -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=...)
Expand Down
6 changes: 3 additions & 3 deletions converter/k6/generator.go → src/converter/k6/generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import (
"os"
"testing"

"github.com/deicon/httprunner/http"
"github.com/deicon/httprunner/src/http"
)

func writeToFile(filename, content string) error {
Expand Down
2 changes: 1 addition & 1 deletion parser/parser.go → src/parser/parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package parser

import (
"bufio"
"github.com/deicon/httprunner/http"
"github.com/deicon/httprunner/src/http"

"os"
"strings"
Expand Down
2 changes: 1 addition & 1 deletion parser/parser_test.go → src/parser/parser_test.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package parser

import (
"github.com/deicon/httprunner/http"
"github.com/deicon/httprunner/src/http"
"os"
"reflect"
"strings"
Expand Down
4 changes: 2 additions & 2 deletions reporting/file_reporter.go → src/reporting/file_reporter.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
10 changes: 5 additions & 5 deletions reporting/formatters.go → src/reporting/formatters.go
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package console

import (
"github.com/deicon/httprunner/reporting/types"
"github.com/deicon/httprunner/src/reporting/types"
"strings"
"testing"
"time"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package csv

import (
"github.com/deicon/httprunner/reporting/types"
"github.com/deicon/httprunner/src/reporting/types"
"strings"
"testing"
"time"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package html

import (
"github.com/deicon/httprunner/reporting/types"
"github.com/deicon/httprunner/src/reporting/types"
"strings"
"testing"
"time"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package json

import (
"encoding/json"
"github.com/deicon/httprunner/reporting/types"
"github.com/deicon/httprunner/src/reporting/types"
"testing"
"time"
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
2 changes: 1 addition & 1 deletion reporting/types/types.go → src/reporting/types/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
12 changes: 6 additions & 6 deletions runner/runner.go → src/runner/runner.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
6 changes: 3 additions & 3 deletions runner/runner_test.go → src/runner/runner_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package template
import (
"testing"

"github.com/deicon/httprunner/http"
"github.com/deicon/httprunner/src/http"
)

func TestConvertNameToFunctionName(t *testing.T) {
Expand Down
File renamed without changes.
File renamed without changes.
6 changes: 3 additions & 3 deletions template/template.go → src/template/template.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
)

Expand Down
File renamed without changes.
2 changes: 1 addition & 1 deletion testapi/demo.http
Original file line number Diff line number Diff line change
Expand Up @@ -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
Loading