File tree 4 files changed +59
-8
lines changed
4 files changed +59
-8
lines changed Original file line number Diff line number Diff line change @@ -16,6 +16,7 @@ This is a API testing tool.
16
16
* Output reference between TestCase
17
17
* Run in server mode, and provide the [ gRPC endpoint] ( pkg/server/server.proto )
18
18
* [ VS Code extension] ( https://github.com/LinuxSuRen/vscode-api-testing ) support
19
+ * [ HTTP API record] ( extensions/collector )
19
20
20
21
## Get started
21
22
Original file line number Diff line number Diff line change
1
+ HTTP API record tool.
2
+
3
+ ## Usage
4
+
5
+ ``` shell
6
+ atest-collector --filter-path /answer/api/v1
7
+ ```
8
+
9
+ It will start a HTTP proxy server, and set the server address to your browser proxy (such as: [ SwitchyOmega] ( https://github.com/FelisCatus/SwitchyOmega ) ).
10
+
11
+ ` atest-collector ` will record all HTTP requests which has prefix ` /answer/api/v1 ` , and
12
+ save it to file ` sample.yaml ` once you close the server.
Original file line number Diff line number Diff line change 6
6
"net/http"
7
7
"os"
8
8
"os/signal"
9
+ "strings"
9
10
"syscall"
10
11
11
12
"github.com/elazarl/goproxy"
@@ -37,19 +38,32 @@ func NewRootCmd() (c *cobra.Command) {
37
38
return
38
39
}
39
40
41
+ type responseFilter struct {
42
+ urlFilter * filter.URLPathFilter
43
+ collects * pkg.Collects
44
+ }
45
+
46
+ func (f * responseFilter ) filter (resp * http.Response , ctx * goproxy.ProxyCtx ) * http.Response {
47
+ contentType := resp .Header .Get ("Content-Type" )
48
+ if ! strings .Contains (contentType , "application/json" ) {
49
+ return resp
50
+ }
51
+
52
+ req := resp .Request
53
+ if f .urlFilter .Filter (req .URL ) {
54
+ f .collects .Add (req .Clone (context .TODO ()))
55
+ }
56
+ return resp
57
+ }
58
+
40
59
func (o * option ) runE (cmd * cobra.Command , args []string ) (err error ) {
41
60
urlFilter := & filter.URLPathFilter {PathPrefix : o .filterPath }
42
61
collects := pkg .NewCollects ()
62
+ responseFilter := & responseFilter {urlFilter : urlFilter , collects : collects }
43
63
44
64
proxy := goproxy .NewProxyHttpServer ()
45
65
proxy .Verbose = true
46
- proxy .OnRequest ().DoFunc (
47
- func (r * http.Request , ctx * goproxy.ProxyCtx ) (* http.Request , * http.Response ) {
48
- if urlFilter .Filter (r .URL ) {
49
- collects .Add (r .Clone (context .TODO ()))
50
- }
51
- return r , nil
52
- })
66
+ proxy .OnResponse ().DoFunc (responseFilter .filter )
53
67
54
68
exporter := pkg .NewSampleExporter ()
55
69
collects .AddEvent (exporter .Add )
Original file line number Diff line number Diff line change 1
1
package cmd
2
2
3
3
import (
4
- "github.com/stretchr/testify/assert"
4
+ "net/http"
5
+ "net/url"
5
6
"testing"
7
+
8
+ "github.com/linuxsuren/api-testing/extensions/collector/pkg"
9
+ "github.com/linuxsuren/api-testing/extensions/collector/pkg/filter"
10
+ "github.com/stretchr/testify/assert"
6
11
)
7
12
8
13
func TestNewRootCmd (t * testing.T ) {
9
14
c := NewRootCmd ()
10
15
assert .NotNil (t , c )
11
16
assert .Equal (t , "atest-collector" , c .Use )
12
17
}
18
+
19
+ func TestResponseFilter (t * testing.T ) {
20
+ resp := & http.Response {
21
+ Header : http.Header {
22
+ "Content-Type" : []string {"application/json; charset=utf-8" },
23
+ },
24
+ Request : & http.Request {
25
+ URL : & url.URL {},
26
+ },
27
+ }
28
+ emptyResp := & http.Response {}
29
+
30
+ filter := & responseFilter {
31
+ urlFilter : & filter.URLPathFilter {},
32
+ collects : pkg .NewCollects (),
33
+ }
34
+ filter .filter (emptyResp , nil )
35
+ filter .filter (resp , nil )
36
+ }
You can’t perform that action at this time.
0 commit comments