# ApiMeter
*ApiMeter* is a simple & elegant, yet powerful HTTP(S) testing framework. Enjoy! ✨ 🚀 ✨
## Design Philosophy
- Embrace open source, stand on giants' shoulders, like [`Requests`][Requests], [`unittest`][unittest] and [`Locust`][Locust].
- Convention over configuration.
- Pursuit of high rewards, write once and achieve a variety of testing needs
## Key Features
- Inherit all powerful features of [`Requests`][Requests], just have fun to handle HTTP(S) in human way.
- Define testcases in YAML or JSON format in concise and elegant manner.
- Record and generate testcases with [`HAR`][HAR] support. see [`har2case`][har2case].
- Supports `variables`/`extract`/`validate` mechanisms to create full test scenarios.
- Supports perfect hook mechanism.
- With `debugtalk.py` plugin, very easy to implement complex logic in testcase.
- Testcases can be run in diverse ways, with single testcase, multiple testcases, or entire project folder.
- Test report is concise and clear, with detailed log records.
- With reuse of [`Locust`][Locust], you can run performance test without extra work.
- CLI command supported, perfect combination with `CI/CD`.
## Documentation
ApiMeter is rich documented.
- [`中文用户使用手册`][user-docs-zh]
- [`开发历程记录博客`][development-blogs]
- [CHANGELOG](docs/CHANGELOG.md)
## Usage
```python
pip install apimeter # 安装
apimeter /path/to/api # 完整生成报告
apimeter /path/to/api --skip-success # 报告忽略成功用例数
```
注意事项
- 1、安装后可用命令apimeter、hrun、apilocust;
- 2、安装时不需要卸载HttpRunner,如果存在httprunner,会覆盖其hrun命令,另外的httprunner、ate命令依然可用;
- 3、之所以不写字HttpRunner,因为部分项目在debugtalk.py中导入了HttpRunner包并使用其已封装好的函数;
## Development
```python
poetry install # 拉取代码后安装依赖
poetry run python -m apimeter /path/to/api # 完整生成报告
poetry run python -m apimeter /path/to/api --skip-success # 报告忽略成功用例数据
poetry build # 打包
poetry publish # 发布,根据提示输入pypi账号密码
pip install -i https://pypi.Python.org/simple/ apimeter # 指定安装源,因为刚发布其他平台未及时同步
```
[Requests]: http://docs.python-requests.org/en/master/
[unittest]: https://docs.python.org/3/library/unittest.html
[Locust]: http://locust.io/
[har2case]: https://github.com/httprunner/har2case
[user-docs-zh]: http://docs.httprunner.org/
[development-blogs]: http://debugtalk.com/tags/httprunner/
[HAR]: http://httparchive.org/
[Swagger]: https://swagger.io/
Raw data
{
"_id": null,
"home_page": "https://github.com/httprunner/httprunner",
"name": "apimeter",
"maintainer": "",
"docs_url": null,
"requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*",
"maintainer_email": "",
"keywords": "HTTP,api,test,requests,locustio",
"author": "debugtalk",
"author_email": "debugtalk@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/b7/5a/035e04a9270d7207094860902dc3bfea0b36c9b2aaa576138ec8b24fd083/apimeter-2.6.2.tar.gz",
"platform": null,
"description": "\n# ApiMeter\n\n*ApiMeter* is a simple & elegant, yet powerful HTTP(S) testing framework. Enjoy! \u2728 \ud83d\ude80 \u2728\n\n## Design Philosophy\n\n- Embrace open source, stand on giants' shoulders, like [`Requests`][Requests], [`unittest`][unittest] and [`Locust`][Locust].\n- Convention over configuration.\n- Pursuit of high rewards, write once and achieve a variety of testing needs\n\n## Key Features\n\n- Inherit all powerful features of [`Requests`][Requests], just have fun to handle HTTP(S) in human way.\n- Define testcases in YAML or JSON format in concise and elegant manner.\n- Record and generate testcases with [`HAR`][HAR] support. see [`har2case`][har2case].\n- Supports `variables`/`extract`/`validate` mechanisms to create full test scenarios.\n- Supports perfect hook mechanism.\n- With `debugtalk.py` plugin, very easy to implement complex logic in testcase.\n- Testcases can be run in diverse ways, with single testcase, multiple testcases, or entire project folder.\n- Test report is concise and clear, with detailed log records.\n- With reuse of [`Locust`][Locust], you can run performance test without extra work.\n- CLI command supported, perfect combination with `CI/CD`.\n\n## Documentation\n\nApiMeter is rich documented.\n\n- [`\u4e2d\u6587\u7528\u6237\u4f7f\u7528\u624b\u518c`][user-docs-zh]\n- [`\u5f00\u53d1\u5386\u7a0b\u8bb0\u5f55\u535a\u5ba2`][development-blogs]\n- [CHANGELOG](docs/CHANGELOG.md)\n\n## Usage\n```python\npip install apimeter # \u5b89\u88c5\napimeter /path/to/api # \u5b8c\u6574\u751f\u6210\u62a5\u544a\napimeter /path/to/api --skip-success # \u62a5\u544a\u5ffd\u7565\u6210\u529f\u7528\u4f8b\u6570\n```\n\u6ce8\u610f\u4e8b\u9879\n- 1\u3001\u5b89\u88c5\u540e\u53ef\u7528\u547d\u4ee4apimeter\u3001hrun\u3001apilocust\uff1b\n- 2\u3001\u5b89\u88c5\u65f6\u4e0d\u9700\u8981\u5378\u8f7dHttpRunner\uff0c\u5982\u679c\u5b58\u5728httprunner\uff0c\u4f1a\u8986\u76d6\u5176hrun\u547d\u4ee4\uff0c\u53e6\u5916\u7684httprunner\u3001ate\u547d\u4ee4\u4f9d\u7136\u53ef\u7528\uff1b\n- 3\u3001\u4e4b\u6240\u4ee5\u4e0d\u5199\u5b57HttpRunner\uff0c\u56e0\u4e3a\u90e8\u5206\u9879\u76ee\u5728debugtalk.py\u4e2d\u5bfc\u5165\u4e86HttpRunner\u5305\u5e76\u4f7f\u7528\u5176\u5df2\u5c01\u88c5\u597d\u7684\u51fd\u6570\uff1b\n\n\n## Development\n```python\npoetry install # \u62c9\u53d6\u4ee3\u7801\u540e\u5b89\u88c5\u4f9d\u8d56\npoetry run python -m apimeter /path/to/api # \u5b8c\u6574\u751f\u6210\u62a5\u544a\npoetry run python -m apimeter /path/to/api --skip-success # \u62a5\u544a\u5ffd\u7565\u6210\u529f\u7528\u4f8b\u6570\u636e\npoetry build # \u6253\u5305\npoetry publish # \u53d1\u5e03\uff0c\u6839\u636e\u63d0\u793a\u8f93\u5165pypi\u8d26\u53f7\u5bc6\u7801\npip install -i https://pypi.Python.org/simple/ apimeter # \u6307\u5b9a\u5b89\u88c5\u6e90\uff0c\u56e0\u4e3a\u521a\u53d1\u5e03\u5176\u4ed6\u5e73\u53f0\u672a\u53ca\u65f6\u540c\u6b65\n```\n\n\n[Requests]: http://docs.python-requests.org/en/master/\n[unittest]: https://docs.python.org/3/library/unittest.html\n[Locust]: http://locust.io/\n[har2case]: https://github.com/httprunner/har2case\n[user-docs-zh]: http://docs.httprunner.org/\n[development-blogs]: http://debugtalk.com/tags/httprunner/\n[HAR]: http://httparchive.org/\n[Swagger]: https://swagger.io/\n\n",
"bugtrack_url": null,
"license": "Apache-2.0",
"summary": "One-stop solution for HTTP(S) testing.",
"version": "2.6.2",
"project_urls": {
"Documentation": "https://docs.httprunner.org",
"Homepage": "https://github.com/httprunner/httprunner",
"Repository": "https://github.com/httprunner/httprunner"
},
"split_keywords": [
"http",
"api",
"test",
"requests",
"locustio"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "cf4438f5653765d8007b3af5a776796b70b556841404e610257d64a025919a27",
"md5": "48e6a86f54792b12b7d95aa7faf65461",
"sha256": "58c9a1f68b6d04be8a7d3207fea2a0737f7f32efcae155bf96bc2192273234f1"
},
"downloads": -1,
"filename": "apimeter-2.6.2-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "48e6a86f54792b12b7d95aa7faf65461",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*",
"size": 79446,
"upload_time": "2023-08-02T08:38:05",
"upload_time_iso_8601": "2023-08-02T08:38:05.729418Z",
"url": "https://files.pythonhosted.org/packages/cf/44/38f5653765d8007b3af5a776796b70b556841404e610257d64a025919a27/apimeter-2.6.2-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b75a035e04a9270d7207094860902dc3bfea0b36c9b2aaa576138ec8b24fd083",
"md5": "d86fcf1678065f254ab41ff90c035835",
"sha256": "79d6f58f52769a43db624d83751c241820d407a65c259afeb32db7e2c2384f9f"
},
"downloads": -1,
"filename": "apimeter-2.6.2.tar.gz",
"has_sig": false,
"md5_digest": "d86fcf1678065f254ab41ff90c035835",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*",
"size": 66921,
"upload_time": "2023-08-02T08:38:07",
"upload_time_iso_8601": "2023-08-02T08:38:07.717708Z",
"url": "https://files.pythonhosted.org/packages/b7/5a/035e04a9270d7207094860902dc3bfea0b36c9b2aaa576138ec8b24fd083/apimeter-2.6.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-08-02 08:38:07",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "httprunner",
"github_project": "httprunner",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "apimeter"
}