Merge pull request #787 from httprunner/leo_dev

## 2.4.2 (2019-12-13)

**Changed**

- refactor: replace with open file handler, avoid reading files into memory
- refactor: rename plugin to extension, httprunner/plugins -> httprunner/ext
- docs: update installation doc for developers
This commit is contained in:
debugtalk
2019-12-13 12:12:01 +08:00
committed by GitHub
16 changed files with 59 additions and 49 deletions

View File

@@ -1,5 +1,13 @@
# Release History
## 2.4.2 (2019-12-13)
**Changed**
- refactor: replace with open file handler, avoid reading files into memory
- refactor: rename plugin to extension, httprunner/plugins -> httprunner/ext
- docs: update installation doc for developers
## 2.4.1 (2019-12-12)
**Added**

View File

@@ -2,7 +2,7 @@
HttpRunner 是一个基于 Python 开发的测试框架,可以运行在 macOS、Linux、Windows 系统平台上。
**Python 版本**HttpRunner 支持 Python 3.4 及以上的所有版本,并使用 Travis-CI 进行了[持续集成测试][travis-ci],测试覆盖的版本包括 2.7/3.4/3.5/3.6/3.7。虽然 HttpRunner 暂时保留了对 Python 2.7 的兼容支持,但强烈建议使用 Python 3.4 及以上版本。
**Python 版本**HttpRunner 支持 Python 3.5 及以上的所有版本,并使用 Travis-CI 进行了[持续集成测试][travis-ci],测试覆盖的版本包括 2.7/3.5/3.6/3.7/3.8。虽然 HttpRunner 暂时保留了对 Python 2.7 的兼容支持,但强烈建议使用 Python 3.6 及以上版本。
**操作系统**:推荐使用 macOS/Linux。
@@ -45,10 +45,10 @@ httprunner、hrun、ate 三个命令完全等价,功能特性完全相同,
```text
$ hrun -V
2.0.2
2.4.1
$ har2case -V
0.2.0
0.3.1
```
## 开发者模式
@@ -57,10 +57,10 @@ $ har2case -V
如果你不仅仅是使用 HttpRunner还需要对 HttpRunner 进行开发调试debug那么就需要进行如下操作。
HttpRunner 使用 [pipenv][pipenv] 对依赖包进行管理,若你还没有安装 pipenv,需要先执行如下命令进行按照:
HttpRunner 使用 [poetry][poetry] 对依赖包进行管理,若你还没有安装 poetry,需要先执行如下命令进行按照:
```bash
$ pip install pipenv
$ curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python
```
获取 HttpRunner 源码:
@@ -72,49 +72,50 @@ $ git clone https://github.com/HttpRunner/HttpRunner.git
进入仓库目录,安装所有依赖:
```bash
$ pipenv install --dev
$ poetry install
```
运行单元测试,若测试全部通过,则说明环境正常。
```bash
$ pipenv run python -m unittest discover
$ poetry run python -m unittest discover
```
查看 HttpRunner 的依赖情况:
```text
$ pipenv graph
HttpRunner==2.0.0
- colorama [required: Any, installed: 0.4.0]
- colorlog [required: Any, installed: 3.1.4]
- har2case [required: Any, installed: 0.2.0]
- PyYAML [required: Any, installed: 3.13]
- Jinja2 [required: Any, installed: 2.10]
- MarkupSafe [required: >=0.23, installed: 1.0]
- PyYAML [required: Any, installed: 3.13]
- requests [required: Any, installed: 2.20.0]
- certifi [required: >=2017.4.17, installed: 2018.10.15]
- chardet [required: >=3.0.2,<3.1.0, installed: 3.0.4]
- idna [required: >=2.5,<2.8, installed: 2.7]
- urllib3 [required: >=1.21.1,<1.25, installed: 1.24]
- requests-toolbelt [required: Any, installed: 0.8.0]
- requests [required: >=2.0.1,<3.0.0, installed: 2.20.0]
- certifi [required: >=2017.4.17, installed: 2018.10.15]
- chardet [required: >=3.0.2,<3.1.0, installed: 3.0.4]
- idna [required: >=2.5,<2.8, installed: 2.7]
- urllib3 [required: >=1.21.1,<1.25, installed: 1.24]
$ poetry show
certifi 2019.9.11 Python package for providing Mozilla's CA Bundle.
chardet 3.0.4 Universal encoding detector for Python 2 and 3
click 7.0 Composable command line interface toolkit
colorama 0.4.1 Cross-platform colored terminal text.
colorlog 4.0.2 Log formatting with colors!
coverage 4.5.4 Code coverage measurement for Python
coveralls 1.8.2 Show coverage stats online via coveralls.io
docopt 0.6.2 Pythonic argument parser, that will make you smile
filetype 1.0.5 Infer file type and MIME type of any file/buffer. No external dependencies.
flask 0.12.4 A microframework based on Werkzeug, Jinja2 and good intentions
har2case 0.3.1 Convert HAR(HTTP Archive) to YAML/JSON testcases for HttpRunner.
idna 2.8 Internationalized Domain Names in Applications (IDNA)
itsdangerous 1.1.0 Various helpers to pass data to untrusted environments and back.
jinja2 2.10.3 A very fast and expressive template engine.
jsonpath 0.82 An XPath for JSON
markupsafe 1.1.1 Safely add untrusted strings to HTML/XML markup.
pyyaml 5.1.2 YAML parser and emitter for Python
requests 2.22.0 Python HTTP for Humans.
requests-toolbelt 0.9.1 A utility belt for advanced users of python-requests
urllib3 1.25.6 HTTP library with thread-safe connection pooling, file post, and more.
werkzeug 0.16.0 The comprehensive WSGI web application library.
```
调试运行方式:
```bash
# 调试运行 hrun
$ pipenv run python main-debug.py hrun -h
$ poetry run python -m httprunner -h
# 调试运行 locusts
$ pipenv run python main-debug.py locusts -h
$ pipenv run python -m httprunner.plugins.locusts -h
```
## Docker
@@ -124,4 +125,4 @@ TODO
[travis-ci]: https://travis-ci.org/HttpRunner/HttpRunner
[Locust]: http://locust.io/
[har2case]: https://github.com/HttpRunner/har2case
[pipenv]: https://docs.pipenv.org/
[poetry]: https://github.com/sdispater/poetry

View File

@@ -1,4 +1,4 @@
__version__ = "2.4.1"
__version__ = "2.4.2"
__description__ = "One-stop solution for HTTP(S) testing."
__all__ = ["__version__", "__description__"]

View File

@@ -1,2 +1,2 @@
# NOTICE:
# This file should not be deleted, or ImportError will be raised in Python 2.7 when importing plugin
# This file should not be deleted, or ImportError will be raised in Python 2.7 when importing extension

View File

@@ -0,0 +1,4 @@
from httprunner.ext.locusts.cli import main
if __name__ == "__main__":
main()

View File

@@ -5,7 +5,7 @@ from locust import HttpLocust, TaskSet, task
from locust.events import request_failure
from httprunner.exceptions import MyBaseError, MyBaseFailure
from httprunner.plugins.locusts.utils import prepare_locust_tests
from httprunner.ext.locusts.utils import prepare_locust_tests
from httprunner.runner import Runner
logging.getLogger().setLevel(logging.CRITICAL)

View File

@@ -1,6 +1,6 @@
""" upload test plugin.
""" upload test extension.
If you want to use this plugin, you should install the following dependencies first.
If you want to use this extension, you should install the following dependencies first.
- requests_toolbelt
- filetype
@@ -50,7 +50,7 @@ try:
from requests_toolbelt import MultipartEncoder
except ImportError:
msg = """
uploader plugin dependencies uninstalled, install first and try again.
uploader extension dependencies uninstalled, install first and try again.
install with pip:
$ pip install requests_toolbelt filetype
"""
@@ -128,9 +128,10 @@ def multipart_encoder(**kwargs):
if is_exists_file:
# value is file path to upload
filename = os.path.basename(_file_path)
with open(_file_path, 'rb') as f:
mime_type = get_filetype(_file_path)
fields_dict[key] = (filename, f.read(), mime_type)
mime_type = get_filetype(_file_path)
# TODO: fix ResourceWarning for unclosed file
file_handler = open(_file_path, 'rb')
fields_dict[key] = (filename, file_handler, mime_type)
else:
fields_dict[key] = value

View File

@@ -429,8 +429,8 @@ def get_mapping_function(function_name, functions_mapping):
return utils.get_os_environ
elif function_name in ["multipart_encoder", "multipart_content_type"]:
# plugin for upload test
from httprunner.plugins import uploader
# extension for upload test
from httprunner.ext import uploader
return getattr(uploader, function_name)
try:
@@ -1158,7 +1158,7 @@ def __prepare_testcase_tests(tests, config, project_mapping, session_variables_s
test_dict["request"]["verify"] = config_verify
if "upload" in test_dict["request"]:
from httprunner.plugins.uploader import prepare_upload_test
from httprunner.ext.uploader import prepare_upload_test
prepare_upload_test(test_dict)
# current teststep variables

View File

@@ -1,4 +0,0 @@
from httprunner.plugins.locusts.cli import main
if __name__ == "__main__":
main()

View File

@@ -1,6 +1,6 @@
[tool.poetry]
name = "httprunner"
version = "2.4.1"
version = "2.4.2"
description = "One-stop solution for HTTP(S) testing."
license = "Apache-2.0"
readme = "README.md"

View File

@@ -1,7 +1,7 @@
import os
import unittest
from httprunner.plugins.locusts.utils import prepare_locust_tests
from httprunner.ext.locusts.utils import prepare_locust_tests
class TestLocust(unittest.TestCase):