https://github.com/httprunner/httprunner是一个API 测试工具,支持 HTTP(S) / HTTP2 / WebSocket / RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型。简单易用,功能强大,具有丰富的插件化机制和高度的可扩展能力。
下面体验下如何使用,首先安装
% bash -c "$(curl -ksSL https://httprunner.com/script/install.sh)" | |
✔ Detect target hrp package... | |
Latest version: v4.3.1 | |
Current OS: darwin | |
Current ARCH: amd64 | |
Download package: hrp-v4.3.1-darwin-amd64.tar.gz | |
! Invalid download url: https://httprunner.oss-cn-beijing.aliyuncs.com/hrp-v4.3.1-darwin-amd64.tar.gz | |
Download url: https://github.com/httprunner/httprunner/releases/download/v4.3.1/hrp-v4.3.1-darwin-amd64.tar.gz | |
✔ Downloading... | |
$ curl -kL https://github.com/httprunner/httprunner/releases/download/v4.3.1/hrp-v4.3.1-darwin-amd64.tar.gz -o hrp-v4.3.1-darwin-amd64.tar.gz | |
% Total % Received % Xferd Average Speed Time Time Time Current | |
Dload Upload Total Spent Left Speed | |
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 | |
100 7579k 100 7579k 0 0 28629 0 0:04:31 0:04:31 --:--:-- 39030 | |
✔ Created temp dir... | |
$ mktemp -d -t hrp.XXXX | |
/var/folders/2n/42n_1dfd6kjd6s3k7bt4cb3h0000gn/T/hrp.XXXX.ljrysUnc | |
$ mv hrp-v4.3.1-darwin-amd64.tar.gz /var/folders/2n/42n_1dfd6kjd6s3k7bt4cb3h0000gn/T/hrp.XXXX.ljrysUnc && cd /var/folders/2n/42n_1dfd6kjd6s3k7bt4cb3h0000gn/T/hrp.XXXX.ljrysUnc | |
✔ Extracting... | |
$ tar -xzf hrp-v4.3.1-darwin-amd64.tar.gz | |
$ ls -lh | |
total 58432 | |
-rw-r--r-- 1 xiazemin staff 23K Dec 26 23:46 CHANGELOG.md | |
-rw-r--r-- 1 xiazemin staff 11K Dec 26 23:46 LICENSE | |
-rw-r--r-- 1 xiazemin staff 9.5K Dec 26 23:46 README.md | |
-rwxr-xr-x 1 xiazemin staff 20M Dec 26 23:46 hrp | |
-rw-r--r-- 1 xiazemin staff 7.4M Apr 15 20:06 hrp-v4.3.1-darwin-amd64.tar.gz | |
✔ Installing... | |
bash: line 119: hrp: command not found | |
$ chmod +x hrp && mv hrp /usr/local/bin/ | |
✔ Check installation... | |
$ command -v hrp | |
/usr/local/bin/hrp | |
$ hrp -v | |
{"level":"info","path":"/Users/xiazemin/.hrp/x509","time":"2023-04-15T20:06:24+08:00","message":"create folder"} | |
hrp version v4.3.1 | |
$ hrp -h | |
██╗ ██╗████████╗████████╗██████╗ ██████╗ ██╗ ██╗███╗ ██╗███╗ ██╗███████╗██████╗ | |
██║ ██║╚══██╔══╝╚══██╔══╝██╔══██╗██╔══██╗██║ ██║████╗ ██║████╗ ██║██╔════╝██╔══██╗ | |
███████║ ██║ ██║ ██████╔╝██████╔╝██║ ██║██╔██╗ ██║██╔██╗ ██║█████╗ ██████╔╝ | |
██╔══██║ ██║ ██║ ██╔═══╝ ██╔══██╗██║ ██║██║╚██╗██║██║╚██╗██║██╔══╝ ██╔══██╗ | |
██║ ██║ ██║ ██║ ██║ ██║ ██║╚██████╔╝██║ ╚████║██║ ╚████║███████╗██║ ██║ | |
╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝╚═╝ ╚═══╝╚══════╝╚═╝ ╚═╝ | |
HttpRunner is an open source API testing tool that supports HTTP(S)/HTTP2/WebSocket/RPC | |
network protocols, covering API testing, performance testing and digital experience | |
monitoring (DEM) test types. Enjoy! ✨ 🚀 ✨ | |
License: Apache-2.0 | |
Website: https://httprunner.com | |
Github: https://github.com/httprunner/httprunner | |
Copyright 2017 debugtalk | |
Usage: | |
hrp [command] | |
Available Commands: | |
adb simple utils for android device management | |
boom run load test with boomer | |
build build plugin for testing | |
completion Generate the autocompletion script for the specified shell | |
convert convert to JSON/YAML/gotest/pytest testcases | |
curl run integrated curl command | |
dns DNS resolution for different source and record types | |
help Help about any command | |
ios simple utils for ios device management | |
ping run integrated ping command | |
pytest run API test with pytest | |
run run API test with go engine | |
startproject create a scaffold project | |
traceroute run integrated traceroute command | |
wiki visit https://httprunner.com | |
Flags: | |
-h, --help help for hrp | |
--log-json set log to json format | |
-l, --log-level string set log level (default "INFO") | |
--venv string specify python3 venv path | |
-v, --version version for hrp | |
Use "hrp [command] --help" for more information about a command. |
安装完毕后初始化项目
% hrp startproject demo | |
8:34PM INF Set log to color console | |
8:34PM ??? Set log level | |
8:34PM INF create new scaffold project force=false pluginType=py projectName=demo | |
8:34PM INF create folder path=demo | |
8:34PM INF create folder path=demo/har | |
8:34PM INF create file path=demo/har/.keep | |
8:34PM INF create folder path=demo/testcases | |
8:34PM INF create folder path=demo/results | |
8:34PM INF create file path=demo/results/.keep | |
8:34PM INF dump data to json path=/learn/mock/httprunner/demo/proj.json | |
8:34PM INF create file path=demo/.gitignore | |
8:34PM INF create file path=demo/.env | |
8:34PM INF create file path=demo/testcases/demo.json | |
8:34PM INF create file path=demo/testcases/requests.json | |
8:34PM INF create file path=demo/testcases/requests.yml | |
8:34PM INF create file path=demo/testcases/ref_testcase.yml | |
8:34PM INF start to create hashicorp python plugin | |
8:34PM INF create file path=demo/debugtalk.py | |
8:34PM INF ensure python3 venv packages=["funppy==v0.5.0","httprunner==v4.3.0"] python3=/Users/xiazemin/.hrp/venv/bin/python3 | |
8:34PM INF python package is ready name=funppy version=v0.5.0 | |
8:34PM INF python package is ready name=httprunner version=v4.3.0 | |
8:34PM INF set python3 executable path Python3Executable=/Users/xiazemin/.hrp/venv/bin/python3 | |
8:34PM INF create scaffold success projectName=demo |
看下生成的目录
% tree | |
. | |
|____proj.json | |
|____results | |
| |____.keep | |
|____.gitignore | |
|____.env | |
|____debugtalk.py | |
|____har | |
| |____.keep | |
|____testcases | |
| |____demo.json | |
| |____ref_testcase.yml | |
| |____requests.json | |
| |____requests.yml | |
用charles抓包导出点击右键,在悬浮的菜单目录中点击【Export...】,格式选择HTTP Archive(.har)后保存即可;假设我们保存的文件名称为test.har
转化成case
% hrp convert ./har/baidu.har -d ./testcases | |
9:02PM INF Set log to color console | |
9:02PM ??? Set log level | |
9:02PM INF load file path=./har/baidu.har | |
9:02PM INF convert teststep method=GET url=https://api.vc.bilibili.com/session_svr/v1/session_svr/single_unread?build=0&mobi_app=web&unread_type=0 | |
9:02PM INF convert teststep method=GET url=https://www.baidu.com/sugrec?pre=1&p=3&ie=utf-8&json=1&prod=pc&from=pc_web&sugsid=38515,36555,38470,38467,36802,37935,38505,26350&wd=convert%20input%20sample%20failed%20error%3D%22load%20har%20file%20failed%3A%20re&req=2&bs=8%3A56PM%20WRN%20convert%20input%20sample%20failed%20error%3D%22load%20har%20file%20failed%3A%20re&pbs=8%3A56PM%20WRN%20convert%20input%20sample%20failed%20error%3D%22load%20har%20file%20failed%3A%20re&csor=0&pwd=8convert%20input%20sample%20failed%20error%3D%22load%20har%20file%20failed%3A%20re&cb=jQuery110202954672835349119_1681563304796&_=1681563304812 | |
9:02PM INF convert teststep method=GET url=https://www.baidu.com/sugrec?pre=1&p=3&ie=utf-8&json=1&prod=pc&from=pc_web&sugsid=38515,36555,38470,38467,36802,37935,38505,26350&wd=convert%20input%20sample%20failed%20error%3D%22load%20har%20file%20failed%3A%20re&req=2&bs=8%3A56PM%20WRN%20convert%20input%20sample%20failed%20error%3D%22load%20har%20file%20failed%3A%20re&pbs=8%3A56PM%20WRN%20convert%20input%20sample%20failed%20error%3D%22load%20har%20file%20failed%3A%20re&csor=0&pwd=convert%20input%20sample%20failed%20error%3D%22load%20har%20file%20failed%3A%20re&cb=jQuery110202954672835349119_1681563304796&_=1681563304813 | |
9:02PM INF convert teststep method=GET url=https://www.baidu.com/sugrec?pre=1&p=3&ie=utf-8&json=1&prod=pc&from=pc_web&sugsid=38515,36555,38470,38467,36802,37935,38505,26350&wd=%20error%3D%22load%20har%20file%20failed%3A%20re&req=2&bs=8%3A56PM%20WRN%20convert%20input%20sample%20failed%20error%3D%22load%20har%20file%20failed%3A%20re&pbs=8%3A56PM%20WRN%20convert%20input%20sample%20failed%20error%3D%22load%20har%20file%20failed%3A%20re&csor=0&pwd=convert%20input%20sample%20failed%20error%3D%22load%20har%20file%20failed%3A%20re&cb=jQuery110202954672835349119_1681563304796&_=1681563304814 | |
9:02PM INF convert teststep method=GET url=https://api.vc.bilibili.com/session_svr/v1/session_svr/single_unread?build=0&mobi_app=web&unread_type=0 | |
9:02PM INF convert teststep method=GET url=https://api.vc.bilibili.com/session_svr/v1/session_svr/single_unread?build=0&mobi_app=web&unread_type=0 | |
9:02PM INF dump data to json path=/Users/xiazemin/bilibili/live/learn/mock/httprunner/demo/testcases/baidu_test.json | |
9:02PM INF conversion completed output files=["testcases/baidu_test.json"] |
运行case并输出测试报告
% hrp run ./testcases/baidu_test.json --gen-html-report | |
9:08PM INF validate body.msg assertMethod=equals checkExpr=body.msg checkValue=0 checkValueType=string expectValue=0 expectValueType=string result=true | |
9:08PM INF validate body.ttl assertMethod=equals checkExpr=body.ttl checkValue=1 checkValueType=int64 expectValue=1 expectValueType=int64 result=true | |
9:08PM INF run step end exportVars=null step="GET https://api.vc.bilibili.com/session_svr/v1/session_svr/single_unread" success=true type=request | |
9:08PM INF run testcase end testcase="testcase description" | |
9:08PM INF create folder path=results/20230415210822 | |
9:08PM INF generate HTML report path=results/20230415210822/report.html | |
9:08PM INF quit hashicorp plugin process | |
2023-04-15T21:08:25.843+0800 [WARN] grpc-py: plugin failed to exit gracefully | |
2023-04-15T21:08:25.847+0800 [ERROR] grpc-py: plugin process exited: path=/Users/xiazemin/.hrp/venv/bin/python3 pid=53347 error="signal: killed" |