Golang HTTP client testing framework

flute

Mentioned in Awesome Go GoDoc Build Status codecov Go Report Card GitHub last commit GitHub tag License

Golang HTTP client testing framework

Presentation

https://speakerdeck.com/szksh/flute-golang-http-client-testing-framework

Overview

flute is the Golang HTTP client testing framework. The goal is

  • Test request parameters such as the request path, headers and body
  • Mock the HTTP server

flute.Transport implements http.RoundTripper.

flute uses testify's assert internally. You can test the http request parameters with assert.

For example, the following test failure message means the request header is unexpected value.

=== RUN   TestClient_CreateUser
--- FAIL: TestClient_CreateUser (0.00s)
    tester.go:168:
                Error Trace:    tester.go:168
                                                        tester.go:32
                                                        transport.go:25
                                                        client.go:250
                                                        client.go:174
                                                        client.go:641
                                                        client.go:509
                                                        create_user.go:45
                                                        create_user_test.go:56
                Error:          Not equal:
                                expected: []string{"token XXXXX"}
                                actual  : []string{"token "}

                                Diff:
                                --- Expected
                                +++ Actual
                                @@ -1,3 +1,3 @@
                                 ([]string) (len=1) {
                                - (string) (len=11) "token XXXXX"
                                + (string) (len=6) "token "
                                 }
                Test:           TestClient_CreateUser
                Messages:       the request header "Authorization" should match
                                service: http://example.com
                                request name: create a user

Please see the example.

Example

Please see examples.

License

MIT

Owner
Comments
  • Recommend changing project name

    Recommend changing project name

    Hi, this is a pretty cool testing framework you created and I think the Go community would like it.

    However, I highly recommend that you change the project name to something else. The word "fagott" strongly resembles the slang word "faggot" which is a very negative connotation in the English language. I would hate for Gophers to ignore your project because of this innocent mistake.

    I'm sure you have other awesome names around. πŸ˜ƒ

  • chore(deps): update module github.com/suzuki-shunsuke/go-dataeq to v2 - autoclosed

    chore(deps): update module github.com/suzuki-shunsuke/go-dataeq to v2 - autoclosed

    WhiteSource Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | github.com/suzuki-shunsuke/go-dataeq | require | major | v1.0.1 -> v2.0.0 |


    Release Notes

    suzuki-shunsuke/go-dataeq

    v2.0.0

    Compare Source

    Milestone

    Breaking Change

    #​45 remove ConvertByte and change signature of Convert

    AS IS

    Convert(x interface{}) (interface{}, error)
    

    TO BE

    Convert(x, dst interface{}) error
    

    Configuration

    πŸ“… Schedule: At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    β™» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    πŸ”• Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, click this checkbox.

    This PR has been generated by WhiteSource Renovate. View repository job log here.

  • chore(deps): update golangci/golangci-lint docker tag to v1.29.0

    chore(deps): update golangci/golangci-lint docker tag to v1.29.0

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | golangci/golangci-lint | docker | minor | v1.28.3-alpine -> v1.29.0-alpine |


    Renovate configuration

    :date: Schedule: At any time (no schedule defined).

    :vertical_traffic_light: Automerge: Enabled.

    :recycle: Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    :no_bell: Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by WhiteSource Renovate. View repository job log here.

  • chore(deps): update golang docker tag to v1.14.6

    chore(deps): update golang docker tag to v1.14.6

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | golang | docker | patch | 1.14.5 -> 1.14.6 |


    Renovate configuration

    :date: Schedule: At any time (no schedule defined).

    :vertical_traffic_light: Automerge: Enabled.

    :recycle: Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    :no_bell: Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by WhiteSource Renovate. View repository job log here.

  • chore(deps): update golang docker tag to v1.14.5

    chore(deps): update golang docker tag to v1.14.5

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | golang | docker | patch | 1.14.4 -> 1.14.5 |


    Renovate configuration

    :date: Schedule: At any time (no schedule defined).

    :vertical_traffic_light: Automerge: Enabled.

    :recycle: Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    :no_bell: Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by WhiteSource Renovate. View repository job log here.

  • chore(deps): update module suzuki-shunsuke/go-dataeq to v1.0.1

    chore(deps): update module suzuki-shunsuke/go-dataeq to v1.0.1

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | github.com/suzuki-shunsuke/go-dataeq | require | patch | v1.0.0 -> v1.0.1 |


    Release Notes

    suzuki-shunsuke/go-dataeq

    v1.0.1

    Compare Source

    Change log

    #​20 docs: update GoDoc


    Renovate configuration

    :date: Schedule: At any time (no schedule defined).

    :vertical_traffic_light: Automerge: Enabled.

    :recycle: Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    :no_bell: Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by WhiteSource Renovate. View repository job log here.

  • chore(deps): update golangci/golangci-lint docker tag to v1.28.3

    chore(deps): update golangci/golangci-lint docker tag to v1.28.3

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | golangci/golangci-lint | docker | minor | v1.27.0-alpine -> v1.28.3-alpine |


    Renovate configuration

    :date: Schedule: At any time (no schedule defined).

    :vertical_traffic_light: Automerge: Enabled.

    :recycle: Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    :no_bell: Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by WhiteSource Renovate. View repository job log here.

  • refactor: change pointer to struct

    refactor: change pointer to struct

    BREAKING CHNAGE: change the signature of structs

    • Ensure the transport isn't changed

    Migration

    • Route.Matcher: *Matcher -> Matcher
    • Route.Tester: *Tester -> Tester
    • Route.Response: *Response -> Response
    • Tester.Test: func(*testing.T, *http.Request, *Service, *Route) -> func(*testing.T, *http.Request, Service, Route)
    • &Transport -> Transport

    Benchmark

    Before

    https://cloud.drone.io/suzuki-shunsuke/flute/188/1/5

    Benchmark_isMatchService-48           	14590218	        81.6 ns/op	       0 B/op	       0 allocs/op
    --
    9 | Benchmark_isMatch/if_mathcer_is_nil,_the_request_matches_the_matcher-48         	339309528	         3.52 ns/op	       0 B/op	       0 allocs/op
    10 | Benchmark_isMatch/path_doesn't_match-48                                         	139038411	         8.29 ns/op	       0 B/op	       0 allocs/op
    11 | Benchmark_isMatch/method_doesn't_match-48                                       	107690738	        10.9 ns/op	       0 B/op	       0 allocs/op
    12 | Benchmark_isMatch/body_string_doesn't_match-48                                  	 4060524	       285 ns/op	     512 B/op	       1 allocs/op
    13 | Benchmark_isMatch/body_json_doesn't_match-48                                    	 1000000	      1131 ns/op	     865 B/op	       7 allocs/op
    14 | Benchmark_isMatch/body_json_string_doesn't_match-48                             	  863486	      1491 ns/op	     905 B/op	       9 allocs/op
    15 | Benchmark_isMatch/header_doesn't_match-48                                       	 2101183	       565 ns/op	      96 B/op	       4 allocs/op
    16 | Benchmark_isMatch/header_isn't_equal-48                                         	 6447096	       185 ns/op	       0 B/op	       0 allocs/op
    17 | Benchmark_isMatch/query_doesn't_match-48                                        	 1000000	      1148 ns/op	     512 B/op	       7 allocs/op
    18 | Benchmark_isMatch/query_isn't_equal-48                                          	 1273093	       976 ns/op	     432 B/op	       4 allocs/op
    19 | Benchmark_isMatch/match_function_doesn't_match-48                               	127509306	         9.47 ns/op	       0 B/op	       0 allocs/op
    20 | Benchmark_isMatchPartOfQuery/query_value_doesn't_match-48                       	 1000000	      1110 ns/op	     512 B/op	       7 allocs/op
    21 | Benchmark_isMatchPartOfQuery/query_isn't_found-48                               	 6947854	       171 ns/op	      48 B/op	       1 allocs/op
    22 | Benchmark_isMatchPartOfQuery/query_matches-48                                   	 1020055	      1160 ns/op	     512 B/op	       7 allocs/op
    23 | Benchmark_isMatchPartOfHeader/header_value_doesn't_match-48                     	 2085816	       569 ns/op	      96 B/op	       4 allocs/op
    24 | Benchmark_isMatchPartOfHeader/header_isn't_found-48                             	23195233	        52.0 ns/op	       0 B/op	       0 allocs/op
    25 | Benchmark_isMatchPartOfHeader/header_matches-48                                 	 1913611	       612 ns/op	      96 B/op	       4 allocs/op
    26 | Benchmark_isMatchBodyString/request_body_is_nil-48                              	291755187	         4.13 ns/op	       0 B/op	       0 allocs/op
    27 | Benchmark_isMatchBodyString/request_body_matches-48                             	 4568509	       291 ns/op	     512 B/op	       1 allocs/op
    28 | Benchmark_isMatchBodyString/request_body_doesn't_match-48                       	 3803454	       285 ns/op	     512 B/op	       1 allocs/op
    29 | Benchmark_isMatchBodyJSONString/request_body_is_nil-48                          	285607687	         4.12 ns/op	       0 B/op	       0 allocs/op
    30 | Benchmark_isMatchBodyJSONString/request_body_json_matches-48                    	  909519	      1402 ns/op	     929 B/op	       9 allocs/op
    31 | Benchmark_isMatchBodyJSONString/request_body_json_doesn't_match-48              	  859863	      1422 ns/op	     929 B/op	       9 allocs/op
    32 | Benchmark_isMatchBodyJSON/request_body_is_nil-48                                	291765010	         4.11 ns/op	       0 B/op	       0 allocs/op
    33 | Benchmark_isMatchBodyJSON/request_body_json_matches-48                          	 1000000	      1032 ns/op	     865 B/op	       7 allocs/op
    34 | Benchmark_isMatchBodyJSON/request_body_json_doesn't_match-48                    	 1000000	      1094 ns/op	     865 B/op	       7 allocs/op
    35 | Benchmark_createHTTPResponse/body_json_isn't_nil-48                             	  771142	      1608 ns/op	     467 B/op	      11 allocs/op
    36 | Benchmark_createHTTPResponse/failed_to_marshal_json-48                          	  717844	      1804 ns/op	     544 B/op	       7 allocs/op
    37 | Benchmark_createHTTPResponse/body_string_isn't_nil-48                           	 3136261	       377 ns/op	     193 B/op	       3 allocs/op
    38 | Benchmark_createHTTPResponse/nil_request_body-48                                	 3440731	       351 ns/op	     193 B/op	       3 allocs/op
    39 | Benchmark_createHTTPResponse/resp.Response-48                                   	 3296454	       383 ns/op	     192 B/op	       3 allocs/op
    40 | BenchmarkTransport_RoundTrip-48                                                 	  711099	      1794 ns/op	    1254 B/op	      15 allocs/op
    

    After

    https://cloud.drone.io/suzuki-shunsuke/flute/196/1/5

    Benchmark_isMatchService-48         	16077306	        75.4 ns/op	       0 B/op	       0 allocs/op | 4s
    -- | --
    9 | Benchmark_isMatch/path_doesn't_match-48         	46152350	        25.9 ns/op	       0 B/op	       0 allocs/op | 6s
    10 | Benchmark_isMatch/method_doesn't_match-48       	35202667	        34.0 ns/op	       0 B/op	       0 allocs/op | 7s
    11 | Benchmark_isMatch/body_string_doesn't_match-48  	 4100803	       306 ns/op	     512 B/op	       1 allocs/op | 8s
    12 | Benchmark_isMatch/body_json_doesn't_match-48    	 1000000	      1098 ns/op	     865 B/op	       7 allocs/op | 9s
    13 | Benchmark_isMatch/body_json_string_doesn't_match-48         	  822428	      1452 ns/op	     905 B/op	       9 allocs/op | 11s
    14 | Benchmark_isMatch/header_doesn't_match-48                   	 1977729	       608 ns/op	      96 B/op	       4 allocs/op | 13s
    15 | Benchmark_isMatch/header_isn't_equal-48                     	 4586121	       262 ns/op	       0 B/op	       0 allocs/op | 14s
    16 | Benchmark_isMatch/query_doesn't_match-48                    	  945764	      1115 ns/op	     512 B/op	       7 allocs/op | 15s
    17 | Benchmark_isMatch/query_isn't_equal-48                      	 1269537	       940 ns/op	     432 B/op	       4 allocs/op | 17s
    18 | Benchmark_isMatch/match_function_doesn't_match-48           	14641996	        81.9 ns/op	       0 B/op	       0 allocs/op | 18s
    19 | Benchmark_matchPartOfQuery/query_value_doesn't_match-48     	 1000000	      1004 ns/op	     512 B/op	       7 allocs/op | 19s
    20 | Benchmark_matchPartOfQuery/query_isn't_found-48             	 8235597	       148 ns/op	      48 B/op	       1 allocs/op | 21s
    21 | Benchmark_matchPartOfQuery/query_matches-48                 	 1000000	      1067 ns/op	     512 B/op	       7 allocs/op | 22s
    22 | Benchmark_matchPartOfHeader/header_value_doesn't_match-48   	 2214632	       544 ns/op	      96 B/op	       4 allocs/op | 24s
    23 | Benchmark_matchPartOfHeader/header_isn't_found-48           	21893889	        55.3 ns/op	       0 B/op	       0 allocs/op | 25s
    24 | Benchmark_matchPartOfHeader/header_matches-48               	 2038860	       584 ns/op	      96 B/op	       4 allocs/op | 27s
    25 | Benchmark_matchBodyString/request_body_is_nil-48            	83614329	        14.4 ns/op	       0 B/op	       0 allocs/op | 28s
    26 | Benchmark_matchBodyString/request_body_matches-48           	 4412060	       275 ns/op	     512 B/op	       1 allocs/op | 29s
    27 | Benchmark_matchBodyString/request_body_doesn't_match-48     	 4413315	       273 ns/op	     512 B/op	       1 allocs/op | 31s
    28 | Benchmark_matchBodyJSONString/request_body_is_nil-48        	83645400	        14.3 ns/op	       0 B/op	       0 allocs/op | 32s
    29 | Benchmark_matchBodyJSONString/request_body_json_matches-48  	  859090	      1339 ns/op	     929 B/op	       9 allocs/op | 33s
    30 | Benchmark_matchBodyJSONString/request_body_json_doesn't_match-48         	  885817	      1386 ns/op	     929 B/op	       9 allocs/op | 35s
    31 | Benchmark_matchBodyJSON/request_body_is_nil-48                           	83624607	        14.4 ns/op	       0 B/op	       0 allocs/op | 36s
    32 | Benchmark_matchBodyJSON/request_body_json_matches-48                     	 1000000	      1030 ns/op	     865 B/op	       7 allocs/op | 37s
    33 | Benchmark_matchBodyJSON/request_body_json_doesn't_match-48               	 1000000	      1030 ns/op	     865 B/op	       7 allocs/op | 38s
    34 | Benchmark_createHTTPResponse/body_json_isn't_nil-48                      	  775274	      1564 ns/op	     467 B/op	      11 allocs/op | 39s
    35 | Benchmark_createHTTPResponse/failed_to_marshal_json-48                   	  706454	      1704 ns/op	     544 B/op	       7 allocs/op | 40s
    36 | Benchmark_createHTTPResponse/body_string_isn't_nil-48                    	 3339332	       359 ns/op	     193 B/op	       3 allocs/op | 42s
    37 | Benchmark_createHTTPResponse/nil_request_body-48                         	 3556734	       341 ns/op	     193 B/op	       3 allocs/op | 43s
    38 | Benchmark_createHTTPResponse/resp.Response-48                            	 3410667	       352 ns/op	     193 B/op	       3 allocs/op | 45s
    39 | BenchmarkTransport_RoundTrip-48                                          	  788850	      1514 ns/op	    1062 B/op	      11 allocs/op
    
  • chore(deps): update module stretchr/testify to v1.6.1

    chore(deps): update module stretchr/testify to v1.6.1

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | github.com/stretchr/testify | require | patch | v1.6.0 -> v1.6.1 |


    Release Notes

    stretchr/testify

    v1.6.1

    Compare Source

    A breaking change was accidentally released in v1.6.0 which breaks the API for the HTTPBodyContains and HTTPBodyNotContains, this release reverts that change.


    Renovate configuration

    :date: Schedule: At any time (no schedule defined).

    :vertical_traffic_light: Automerge: Disabled by config. Please merge this manually once you are satisfied.

    :recycle: Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    :no_bell: Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by WhiteSource Renovate. View repository job log here.

  • chore(deps): update golang docker tag to v1.14.4

    chore(deps): update golang docker tag to v1.14.4

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | golang | docker | patch | 1.14.3 -> 1.14.4 |


    Renovate configuration

    :date: Schedule: At any time (no schedule defined).

    :vertical_traffic_light: Automerge: Disabled by config. Please merge this manually once you are satisfied.

    :recycle: Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    :no_bell: Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by WhiteSource Renovate. View repository job log here.

  • chore(deps): update module stretchr/testify to v1.6.0

    chore(deps): update module stretchr/testify to v1.6.0

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | github.com/stretchr/testify | require | minor | v1.5.1 -> v1.6.0 |


    Release Notes

    stretchr/testify

    v1.6.0

    Compare Source

    Latest release of testify. This includes many fixes and enhancements. Please view the v1.6.0 milestone for a list of changes.


    Renovate configuration

    :date: Schedule: At any time (no schedule defined).

    :vertical_traffic_light: Automerge: Disabled by config. Please merge this manually once you are satisfied.

    :recycle: Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    :no_bell: Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by WhiteSource Renovate. View repository job log here.

  • chore(deps): update module go to 1.19

    chore(deps): update module go to 1.19

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | go (source) | golang | minor | 1.14 -> 1.19 |


    Release Notes

    golang/go

    v1.19.3

    v1.19.2

    v1.19.1

    v1.19.0

    v1.18.8

    v1.18.7

    v1.18.6

    v1.18.5

    v1.18.4

    v1.18.3

    v1.18.2

    v1.18.1

    v1.18.0

    v1.17.12

    v1.17.11

    v1.17.10

    v1.17.9

    v1.17.8

    v1.17.7

    v1.17.6

    v1.17.5

    v1.17.4

    v1.17.3

    v1.17.2

    v1.17.1

    v1.17.0

    v1.16.15

    v1.16.14

    v1.16.13

    v1.16.12

    v1.16.11

    v1.16.10

    v1.16.9

    v1.16.8

    v1.16.7

    v1.16.6

    v1.16.5

    v1.16.4

    v1.16.3

    v1.16.2

    v1.16.1

    v1.15.15

    v1.15.14

    v1.15.13

    v1.15.12

    v1.15.11

    v1.15.10

    v1.15.9

    v1.15.8

    v1.15.7

    v1.15.6

    v1.15.5

    v1.15.4

    v1.15.3

    v1.15.2

    v1.15.1


    Configuration

    πŸ“… Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    β™» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    πŸ”• Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

  • chore(deps): update module github.com/stretchr/testify to v1.8.1

    chore(deps): update module github.com/stretchr/testify to v1.8.1

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | github.com/stretchr/testify | require | minor | v1.7.0 -> v1.8.1 |


    Release Notes

    stretchr/testify

    v1.8.1

    Compare Source

    v1.8.0

    Compare Source

    v1.7.5

    Compare Source

    v1.7.4

    Compare Source

    v1.7.3

    Compare Source

    v1.7.2

    Compare Source

    v1.7.1

    Compare Source


    Configuration

    πŸ“… Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    β™» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    πŸ”• Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

  • chore(deps): update golang docker tag to v1.19.3

    chore(deps): update golang docker tag to v1.19.3

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | golang | docker | minor | 1.17.6 -> 1.19.3 |


    Configuration

    πŸ“… Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    β™» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    πŸ”• Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

  • chore(deps): update golangci/golangci-lint docker tag to v1.50.1

    chore(deps): update golangci/golangci-lint docker tag to v1.50.1

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | golangci/golangci-lint | docker | minor | v1.30.0-alpine -> v1.50.1-alpine |


    Configuration

    πŸ“… Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    β™» Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

    πŸ”• Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

A yaml data-driven testing format together with golang testing library

Specimen Yaml-based data-driven testing Specimen is a yaml data format for data-driven testing. This enforces separation between feature being tested

Nov 24, 2022
Client tool for testing HTTP server timeouts

HTTP timeout test client While testing Go HTTP server timeouts I wrote this little tool to help me test. It allows for slowing down header write and b

Sep 21, 2022
siusiu (suite-suite harmonics) a suite used to manage the suite, designed to free penetration testing engineers from learning and using various security tools, reducing the time and effort spent by penetration testing engineers on installing tools, remembering how to use tools.
siusiu (suite-suite harmonics) a suite used to manage the suite, designed to free penetration testing engineers from learning and using various security tools, reducing the time and effort spent by penetration testing engineers on installing tools, remembering how to use tools.

siusiu (suite-suite harmonics) a suite used to manage the suite, designed to free penetration testing engineers from learning and using various security tools, reducing the time and effort spent by penetration testing engineers on installing tools, remembering how to use tools.

Dec 12, 2022
Extremely flexible golang deep comparison, extends the go testing package and tests HTTP APIs
Extremely flexible golang deep comparison, extends the go testing package and tests HTTP APIs

go-testdeep Extremely flexible golang deep comparison, extends the go testing package. Latest news Synopsis Description Installation Functions Availab

Dec 22, 2022
API testing framework inspired by frisby-js
API testing framework inspired by frisby-js

frisby REST API testing framework inspired by frisby-js, written in Go Proposals I'm starting to work on frisby again with the following ideas: Read s

Sep 27, 2022
Minimal and Beautiful Go testing framework
Minimal and Beautiful Go testing framework

Goblin A Mocha like BDD testing framework written in Go that requires no additional dependencies. Requires no extensive documentation nor complicated

Dec 25, 2022
Testing framework for Go. Allows writing self-documenting tests/specifications, and executes them concurrently and safely isolated. [UNMAINTAINED]

GoSpec GoSpec is a BDD-style testing framework for the Go programming language. It allows writing self-documenting tests/specs, and executes them in p

Nov 28, 2022
πŸš€πŸŒ Orbital is a simple end-to-end testing framework for Go

Orbital is a test framework which enables a developer to write end to end tests just like one would writing unit tests. We do this by effectively copying the testing.T API and registering tests to be run periodically on a configured schedule.

Nov 18, 2022
An always-on framework that performs end-to-end functional network testing for reachability, latency, and packet loss

Arachne Arachne is a packet loss detection system and an underperforming path detection system. It provides fast and easy active end-to-end functional

Dec 31, 2022
BDD Testing Framework for Go
BDD Testing Framework for Go

Jump to the docs | δΈ­ζ–‡ζ–‡ζ‘£ to learn more. To start rolling your Ginkgo tests now keep reading! If you have a question, comment, bug report, feature reque

Jan 1, 2023
Framework of performance testing

Framework of performance testing fperf is a powerful and flexible framework which allows you to develop your own benchmark tools so much easy. You cre

Nov 30, 2022
Professional lightweight testing mini-framework for Go.
Professional lightweight testing mini-framework for Go.

is Professional lightweight testing mini-framework for Go. Easy to write and read Beautifully simple API with everything you need: is.Equal, is.True,

Dec 28, 2022
Full-featured test framework for Go! Assertions, mocking, input testing, output capturing, and much more! πŸ•
Full-featured test framework for Go! Assertions, mocking, input testing, output capturing, and much more! πŸ•

testza ?? Testza is like pizza for Go - you could life without it, but why should you? Get The Module | Documentation | Contributing | Code of Conduct

Dec 10, 2022
espresso - a framework for testing BigQuery queries

espresso - a framework for testing BigQuery queries Goals Componentization: compose complex queries from smaller, reusable components Test driven deve

Dec 7, 2022
Testy is a Go test running framework designed for Gametime's API testing needs.

template_library import "github.com/gametimesf/template_library" Overview Index Overview Package template_library is a template repository for buildin

Jun 21, 2022
Expressive end-to-end HTTP API testing made easy in Go

baloo Expressive and versatile end-to-end HTTP API testing made easy in Go (golang), built on top of gentleman HTTP client toolkit. Take a look to the

Dec 13, 2022
End-to-end HTTP and REST API testing for Go.

httpexpect Concise, declarative, and easy to use end-to-end HTTP and REST API testing for Go (golang). Basically, httpexpect is a set of chainable bui

Jan 5, 2023
HTTP traffic mocking and testing made easy in Go ΰΌΌΚ˜ΜšΩ„ΝœΚ˜ΜšΰΌ½

gock Versatile HTTP mocking made easy in Go that works with any net/http based stdlib implementation. Heavily inspired by nock. There is also its Pyth

Jan 4, 2023
HTTP load testing tool and library. It's over 9000!
HTTP load testing tool and library. It's over 9000!

Vegeta Vegeta is a versatile HTTP load testing tool built out of a need to drill HTTP services with a constant request rate. It can be used both as a

Jan 7, 2023