diff --git a/boomer.go b/boomer.go index 446d8fda..930aca17 100644 --- a/boomer.go +++ b/boomer.go @@ -7,7 +7,7 @@ import ( "github.com/jinzhu/copier" "github.com/rs/zerolog/log" - funcPlugin "github.com/httprunner/func-plugin" + "github.com/httprunner/funplugin" "github.com/httprunner/hrp/internal/boomer" "github.com/httprunner/hrp/internal/ga" ) @@ -22,8 +22,8 @@ func NewBoomer(spawnCount int, spawnRate float64) *HRPBoomer { type HRPBoomer struct { *boomer.Boomer - plugins []funcPlugin.IPlugin // each task has its own plugin process - pluginsMutex *sync.RWMutex // avoid data race + plugins []funplugin.IPlugin // each task has its own plugin process + pluginsMutex *sync.RWMutex // avoid data race } // Run starts to run load test for one or multiple testcases. diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index f72d1943..043e1123 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -11,7 +11,7 @@ ## v0.6.4 (2022-03-10) - feat: both support gPRC(default) and net/rpc mode in hashicorp plugin, switch with environment `HRP_PLUGIN_TYPE` -- refactor: move submodule `plugin` to separate repo `github.com/httprunner/func-plugin` +- refactor: move submodule `plugin` to separate repo `github.com/httprunner/funplugin` - refactor: replace builtin json library with `json-iterator/go` to improve performance ## v0.6.3 (2022-03-04) diff --git a/examples/__init__.py b/examples/__init__.py new file mode 100644 index 00000000..70cfba53 --- /dev/null +++ b/examples/__init__.py @@ -0,0 +1 @@ +# NOTICE: Generated By HttpRunner. DO NOT EDIT! diff --git a/examples/debugtalk.py b/examples/debugtalk.py new file mode 100644 index 00000000..0ccf6fb7 --- /dev/null +++ b/examples/debugtalk.py @@ -0,0 +1,5 @@ +from plugin.python.plugin import serve + + +if __name__ == '__main__': + serve() diff --git a/examples/har/demo.json b/examples/har/demo.json new file mode 100644 index 00000000..292ad513 --- /dev/null +++ b/examples/har/demo.json @@ -0,0 +1,128 @@ +{ + "config": { + "name": "testcase description" + }, + "teststeps": [ + { + "name": "", + "request": { + "method": "GET", + "url": "https://postman-echo.com/get", + "params": { + "foo1": "HDnY8", + "foo2": "34.5" + }, + "headers": { + "Accept-Encoding": "gzip", + "Host": "postman-echo.com", + "User-Agent": "HttpRunnerPlus" + } + }, + "validate": [ + { + "check": "status_code", + "assert": "equals", + "expect": 200, + "msg": "assert response status code" + }, + { + "check": "headers.\"Content-Type\"", + "assert": "equals", + "expect": "application/json; charset=utf-8", + "msg": "assert response header Content-Type" + }, + { + "check": "body.url", + "assert": "equals", + "expect": "https://postman-echo.com/get?foo1=HDnY8\u0026foo2=34.5", + "msg": "assert response body url" + } + ] + }, + { + "name": "", + "request": { + "method": "POST", + "url": "https://postman-echo.com/post", + "headers": { + "Accept-Encoding": "gzip", + "Content-Length": "28", + "Content-Type": "application/json; charset=UTF-8", + "Host": "postman-echo.com", + "User-Agent": "Go-http-client/1.1" + }, + "cookies": { + "sails.sid": "s%3Az_LpglkKxTvJ_eHVUH6V67drKp0AGWW-.PidabaXOnatLRP47hVyqqepl6BdrpEQzRlJQXtbIiwk" + }, + "body": { + "foo1": "HDnY8", + "foo2": 12.3 + } + }, + "validate": [ + { + "check": "status_code", + "assert": "equals", + "expect": 200, + "msg": "assert response status code" + }, + { + "check": "headers.\"Content-Type\"", + "assert": "equals", + "expect": "application/json; charset=utf-8", + "msg": "assert response header Content-Type" + }, + { + "check": "body.url", + "assert": "equals", + "expect": "https://postman-echo.com/post", + "msg": "assert response body url" + } + ] + }, + { + "name": "", + "request": { + "method": "POST", + "url": "https://postman-echo.com/post", + "headers": { + "Accept-Encoding": "gzip", + "Content-Length": "20", + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", + "Host": "postman-echo.com", + "User-Agent": "Go-http-client/1.1" + }, + "cookies": { + "sails.sid": "s%3AS5e7w0zQ0xAsCwh9L8T6R7QLYCO7_gtD.r8%2B2w9IWqEIfuVkrZjnxzm2xADIk34zKAWXRPapr%2FAw" + }, + "body": "foo1=HDnY8\u0026foo2=12.3" + }, + "validate": [ + { + "check": "status_code", + "assert": "equals", + "expect": 200, + "msg": "assert response status code" + }, + { + "check": "headers.\"Content-Type\"", + "assert": "equals", + "expect": "application/json; charset=utf-8", + "msg": "assert response header Content-Type" + }, + { + "check": "body.data", + "assert": "equals", + "expect": "", + "msg": "assert response body data" + }, + { + "check": "body.url", + "assert": "equals", + "expect": "https://postman-echo.com/post", + "msg": "assert response body url" + } + ] + } + ] +} \ No newline at end of file diff --git a/examples/har/hire-referral.har b/examples/har/hire-referral.har new file mode 100644 index 00000000..c3e52c96 --- /dev/null +++ b/examples/har/hire-referral.har @@ -0,0 +1 @@ +{"log":{"version":"1.2","creator":{"name":"Charles Proxy","version":"4.6.1"},"entries":[{"startedDateTime":"2022-02-21T14:07:03.057+08:00","time":1220,"request":{"method":"GET","url":"https://people.bytedance.net/","httpVersion":"HTTP/2.0","cookies":[{"name":"SLARDAR_WEB_ID","value":"1d16460acb77ff3ea2023e33d47d019e"},{"name":"_ga","value":"GA1.2.1701374734.1622444315"},{"name":"admin-csrf-token","value":"ss/guS+K9iOA0NO7roHWZv2M4IjbxsPFitc9i+pfshoWHqyRaPO8hjRbXeCVfswRdmPcYAxIuROGCx3GOhjwXU5qGeQbR7sRay3F48DbDXldA8DVUFkC+dR6gk7BJ6qw5Lqv7A=="},{"name":"__tea_cookie_tokens_176217","value":"%257B%2522web_id%2522%253A%25227034041106556110349%2522%252C%2522ssid%2522%253A%2522d03bb106-d552-4bbb-930d-b6b908a3d085%2522%252C%2522user_unique_id%2522%253A%25227034041106556110349%2522%252C%2522timestamp%2522%253A1637740322074%257D"},{"name":"gftoken","value":"Mjc1MjMxNDE3OHwxNjMwNTgyMTA4OTF8fDAGBgYGBgY"},{"name":"ee-session","value":"XN0YXJ0-63ff6519-e050-5a5a-9d18-9823f767becb-WVuZA"},{"name":"people-session-7","value":"XN0YXJ0-wmnur78qwd49rlqyyxibgei1lbfbpluh-WVuZA"},{"name":"people-csrftoken","value":"GUsWJwnxrE5DJPJG1MefQ1zrMiT2C2JpfNqZ5Al4dwB54g3au128omMfbjskXPjq"},{"name":"people-fe-people-oe-ver","value":"Tue, 25 Jan 2022 12:55:42 GMT"},{"name":"lang","value":"zh-CN"},{"name":"people-fe-home-ver","value":"Wed, 16 Feb 2022 09:00:26 GMT"},{"name":"atsx-csrf-token","value":"DE0Ar6N6jTYmEBVgjlDMY72gmuOZHqKcJWxxs1fqLoA"},{"name":"_tea_utm_cache_1943","value":"undefined"},{"name":"MONITOR_WEB_ID","value":"00edc243087b1ad9b1945ec9ff461a4e"}],"headers":[{"name":":method","value":"GET"},{"name":":authority","value":"people.bytedance.net"},{"name":":scheme","value":"https"},{"name":":path","value":"/"},{"name":"cache-control","value":"max-age=0"},{"name":"sec-ch-ua","value":"\" Not A;Brand\";v=\"99\", \"Chromium\";v=\"98\", \"Google Chrome\";v=\"98\""},{"name":"sec-ch-ua-mobile","value":"?0"},{"name":"sec-ch-ua-platform","value":"\"macOS\""},{"name":"upgrade-insecure-requests","value":"1"},{"name":"user-agent","value":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36"},{"name":"accept","value":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"},{"name":"sec-fetch-site","value":"same-origin"},{"name":"sec-fetch-mode","value":"navigate"},{"name":"sec-fetch-user","value":"?1"},{"name":"sec-fetch-dest","value":"document"},{"name":"accept-encoding","value":"gzip, deflate, br"},{"name":"accept-language","value":"en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7"},{"name":"cookie","value":"SLARDAR_WEB_ID=1d16460acb77ff3ea2023e33d47d019e"},{"name":"cookie","value":"_ga=GA1.2.1701374734.1622444315"},{"name":"cookie","value":"admin-csrf-token=ss/guS+K9iOA0NO7roHWZv2M4IjbxsPFitc9i+pfshoWHqyRaPO8hjRbXeCVfswRdmPcYAxIuROGCx3GOhjwXU5qGeQbR7sRay3F48DbDXldA8DVUFkC+dR6gk7BJ6qw5Lqv7A=="},{"name":"cookie","value":"__tea_cookie_tokens_176217=%257B%2522web_id%2522%253A%25227034041106556110349%2522%252C%2522ssid%2522%253A%2522d03bb106-d552-4bbb-930d-b6b908a3d085%2522%252C%2522user_unique_id%2522%253A%25227034041106556110349%2522%252C%2522timestamp%2522%253A1637740322074%257D"},{"name":"cookie","value":"gftoken=Mjc1MjMxNDE3OHwxNjMwNTgyMTA4OTF8fDAGBgYGBgY"},{"name":"cookie","value":"ee-session=XN0YXJ0-63ff6519-e050-5a5a-9d18-9823f767becb-WVuZA"},{"name":"cookie","value":"people-session-7=XN0YXJ0-wmnur78qwd49rlqyyxibgei1lbfbpluh-WVuZA"},{"name":"cookie","value":"people-csrftoken=GUsWJwnxrE5DJPJG1MefQ1zrMiT2C2JpfNqZ5Al4dwB54g3au128omMfbjskXPjq"},{"name":"cookie","value":"people-fe-people-oe-ver=Tue, 25 Jan 2022 12:55:42 GMT"},{"name":"cookie","value":"lang=zh-CN"},{"name":"cookie","value":"people-fe-home-ver=Wed, 16 Feb 2022 09:00:26 GMT"},{"name":"cookie","value":"atsx-csrf-token=DE0Ar6N6jTYmEBVgjlDMY72gmuOZHqKcJWxxs1fqLoA"},{"name":"cookie","value":"_tea_utm_cache_1943=undefined"},{"name":"cookie","value":"MONITOR_WEB_ID=00edc243087b1ad9b1945ec9ff461a4e"}],"queryString":[],"headersSize":222,"bodySize":0},"response":{"_charlesStatus":"COMPLETE","status":200,"statusText":null,"httpVersion":"HTTP/2.0","cookies":[{"name":"env","value":"","path":"/","domain":null,"expires":"Thu, 01-Jan-1970 00:00:00 GMT","httpOnly":false,"secure":false,"comment":null,"_maxAge":"0"}],"headers":[{"name":":status","value":"200"},{"name":"server","value":"nginx"},{"name":"date","value":"Mon, 21 Feb 2022 06:07:03 GMT"},{"name":"content-type","value":"text/html; charset=utf-8"},{"name":"vary","value":"Accept-Encoding"},{"name":"x-dns-prefetch-control","value":"off"},{"name":"x-frame-options","value":"SAMEORIGIN"},{"name":"strict-transport-security","value":"max-age=15552000; includeSubDomains"},{"name":"x-download-options","value":"noopen"},{"name":"x-content-type-options","value":"nosniff"},{"name":"x-xss-protection","value":"1; mode=block"},{"name":"set-cookie","value":"env=; expires=Thu, 01-Jan-1970 00:00:00 GMT; Max-Age=0; Path=/"},{"name":"x-proxy-protocol","value":"memory"},{"name":"cache-control","value":"no-cache, no-store"},{"name":"content-md5","value":"4kSOAugYzrjialRqnL1hWA=="},{"name":"x-tos-request-id","value":"685ace132c041a2b-ad3b72a"},{"name":"x-tos-response-time","value":"Mon, 21 Feb 2022 06:07:00 GMT"},{"name":"x-tos-storage-class","value":"Standard"},{"name":"x-proxy-consume","value":"13ms"},{"name":"pragma","value":"no-cache"},{"name":"x-service-consume","value":"42"},{"name":"x-service-env","value":"production"},{"name":"server-timing","value":"inner; dur=44"},{"name":"x-tt-trace-host","value":"018838afac52f879e70f34ce2ba2f97a98e54f286d7fe7927ae707183a4da4c1b8cf76490b7be30e0274299b950bafd5bbdc6a78e3b2b9ad3bdd9320d0a921ea0f"},{"name":"x-tt-trace-tag","value":"id=00;cdn-cache=miss"},{"name":"content-security-policy-report-only","value":"default-src 'self' blob: data: wss: 'unsafe-inline' 'unsafe-eval' *.ibytedtos.com *.byteoversea.com *.toutiao.com *.pstatp.com *.snssdk.com *.feishu.cn *.larksuite.com *.kundou.cn *.bytedance.com *.bytedance.net *.byted.org *.alicdn.com; report-uri https://csp.snssdk.com/v19"},{"name":"content-encoding","value":"br"}],"content":{"size":40050,"compression":27807,"mimeType":"text/html; charset=utf-8","text":"\n\n
\n \n \n \n\n \n \n \n