httprunner

httprunner基础

是什么?

面向http(s)协议的通用测试框架。

只需维护一份yaml脚本,即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求。

约定大于配置。

一站式解决方案,不限于http协议。

为什么?

httprunner3.0新特性

- 概念更简单、功能更易用、生态更强大

- pydantic类型系统

替换jsonschema,做类型的校验

思想来源于golang的struct

- 生成pytest用例

方便定位问题,便于单步调试

jinjia2模版生成

black格式化为标准pep8

- 集成pytest

allure

fixture

- 内置http web server

fastapi

更加易于进行二次开发、平台化

- 测试用例编写语法提示(todo)

httprunner核心概念

测试用例:参考维基百科

测试用例组织结构:用例分层,比如登陆是很常用的用例,把登陆用例分离,其他用例引用。

用例之间应该是没有依赖的。

- 去掉api、testsuite

- 测试用例的格式

config

teststeps

项目地址

用户文档:https://docs.httprunner.org/quickstart/

环境准备:

建议使用虚拟环境。

1.搭建虚拟环境:

windows系统,新建一个目录,打开cmd,进入到新建的目录中,执行:python -m venv .

或者之间在cmd执行:python -m venv test_httprunner,会在所在目录新建一个目录

 执行后,可以看到文件夹:

2.激活虚拟环境:

进入Scripts目录,执行:activate

3.安装httprunner,执行:pip3 install httprunner

注意:返回上一层目录再执行:pip3 install httprunner,最好不要在Scripts目录执行。

如果已经安装过httprunner,升级即可,执行:pip3 install -U HttpRunner。

 

执行报错: 

/s eta 0:00:26ERROR: Exception:
Traceback (most recent call last):
  File "e:httprunner_venlibsite-packagespip\_vendorurllib3
esponse.py", li
ne 397, in _error_catcher
    yield
  File "e:httprunner_venlibsite-packagespip\_vendorurllib3
esponse.py", li
ne 479, in read
    data = self._fp.read(amt)
  File "e:httprunner_venlibsite-packagespip\_vendorcachecontrolfilewrapper
.py", line 62, in read
    data = self.__fp.read(amt)
  File "D:pythonlibhttpclient.py", line 454, in read
    n = self.readinto(b)
  File "D:pythonlibhttpclient.py", line 498, in readinto
    n = self.fp.readinto(b)
  File "D:pythonlibsocket.py", line 669, in readinto
    return self._sock.recv_into(b)
  File "D:pythonlibssl.py", line 1241, in recv_into
    return self.read(nbytes, buffer)
  File "D:pythonlibssl.py", line 1099, in read
    return self._sslobj.read(len, buffer)
socket.timeout: The read operation timed out

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "e:httprunner_venlibsite-packagespip\_internalcliase_command.py",
line 188, in main
    status = self.run(options, args)
  File "e:httprunner_venlibsite-packagespip\_internalcommandsinstall.py",
line 345, in run
    resolver.resolve(requirement_set)
  File "e:httprunner_venlibsite-packagespip\_internallegacy_resolve.py", li
ne 196, in resolve
    self._resolve_one(requirement_set, req)
  File "e:httprunner_venlibsite-packagespip\_internallegacy_resolve.py", li
ne 359, in _resolve_one
    abstract_dist = self._get_abstract_dist_for(req_to_install)
  File "e:httprunner_venlibsite-packagespip\_internallegacy_resolve.py", li
ne 305, in _get_abstract_dist_for
    abstract_dist = self.preparer.prepare_linked_requirement(
  File "e:httprunner_venlibsite-packagespip\_internaloperationsprepare.py"
, line 195, in prepare_linked_requirement
    unpack_url(
  File "e:httprunner_venlibsite-packagespip\_internaldownload.py", line 105
8, in unpack_url
    unpack_http_url(
  File "e:httprunner_venlibsite-packagespip\_internaldownload.py", line 920
, in unpack_http_url
    from_path, content_type = _download_http_url(link,
  File "e:httprunner_venlibsite-packagespip\_internaldownload.py", line 115
2, in _download_http_url
    _download_url(resp, link, content_file, hashes, progress_bar)
  File "e:httprunner_venlibsite-packagespip\_internaldownload.py", line 861
, in _download_url
    hashes.check_against_chunks(downloaded_chunks)
  File "e:httprunner_venlibsite-packagespip\_internalutilshashes.py", line
 75, in check_against_chunks
    for chunk in chunks:
  File "e:httprunner_venlibsite-packagespip\_internaldownload.py", line 829
, in written_chunks
    for chunk in chunks:
  File "e:httprunner_venlibsite-packagespip\_internalutilsui.py", line 156
, in iter
    for x in it:
  File "e:httprunner_venlibsite-packagespip\_internaldownload.py", line 794
, in resp_read
    for chunk in resp.raw.stream(
  File "e:httprunner_venlibsite-packagespip\_vendorurllib3
esponse.py", li
ne 531, in stream
    data = self.read(amt=amt, decode_content=decode_content)
  File "e:httprunner_venlibsite-packagespip\_vendorurllib3
esponse.py", li
ne 496, in read
    raise IncompleteRead(self._fp_bytes_read, self.length_remaining)
  File "D:pythonlibcontextlib.py", line 131, in __exit__
    self.gen.throw(type, value, traceback)
  File "e:httprunner_venlibsite-packagespip\_vendorurllib3
esponse.py", li
ne 402, in _error_catcher
    raise ReadTimeoutError(self._pool, None, 'Read timed out.')
pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='files
.pythonhosted.org', port=443): Read timed out.
WARNING: You are using pip version 19.2.3, however version 20.1 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' comm
and.

执行:python -m pip install --upgrade pip

升级pip。参考:https://jingyan.baidu.com/article/154b4631342f1528ca8f41ee.html

Pip是一个Python的包管理工具,实际上它也可以被看待为是一个包,Pip相当于Linux上的yum,对python的开发者来说相当方便。

我们再也无需去焦头烂额的寻找whl包,直接通过pip就可以在线安装(前提是有网络+pip版本合适的情况下)。

如果pip的版本太老,很多包都无法安装。

 看到Successfully字样即升级成功。

安装成功,查看httprunner的版本:hrun -V

 

 

 

 

 

 

 

 

4.脚手架生成项目:httprunner startproject test_hru

 这个旧命令不能使用了:hrun --startproject test_httprunner

生成测试脚手架异常:

(httprunner_ven) E:httprunner_ven>hrun --startproject test_httprunner
Traceback (most recent call last):
  File "D:pythonlib
unpy.py", line 193, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "D:pythonlib
unpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "E:httprunner_venScriptshrun.exe\__main__.py", line 7, in <module>
  File "e:httprunner_venlibsite-packageshttprunnercli.py", line 126, in mai
n_hrun_alias
    main()
  File "e:httprunner_venlibsite-packageshttprunnercli.py", line 100, in mai
n
    main_run(extra_args)
  File "e:httprunner_venlibsite-packageshttprunnercli.py", line 34, in main
_run
    raise exceptions.ParamsError("Missed testcase path")
httprunner.exceptions.ParamsError: Missed testcase path

执行:httprunner startproject test_hru

5.使用pycharm打开项目

 

 

 注意:是打开test_hrun,而不是hrun-ven

 

 打开后的目录如下:

httprunner快速上手

运行demo用例

httprunner.exceptions.ParamsError: Missed testcase path

(httprunner_ven) E:httprunner_ven	est_hru>hrun testcases/demo_testcase.request.yml
Traceback (most recent call last):
  File "D:pythonlib
unpy.py", line 193, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "D:pythonlib
unpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "E:httprunner_venScriptshrun.exe\__main__.py", line 7, in <module>
  File "e:httprunner_venlibsite-packageshttprunnercli.py", line 126, in main_hrun_alias
    main()
  File "e:httprunner_venlibsite-packageshttprunnercli.py", line 100, in main
    main_run(extra_args)
  File "e:httprunner_venlibsite-packageshttprunnercli.py", line 34, in main_run
    raise exceptions.ParamsError("Missed testcase path")
httprunner.exceptions.ParamsError: Missed testcase path

进入testcases目录,执行用例 

(httprunner_ven) E:httprunner_ven	est_hru>cd testcases

(httprunner_ven) E:httprunner_ven	est_hru	estcases>hrun demo_testcase_request.yml

执行用例报错:httprunner.exceptions.FunctionNotFound: sum_two is not found.

>       raise exceptions.FunctionNotFound(f"{function_name} is not found.")
E       httprunner.exceptions.FunctionNotFound: sum_two is not found.

....libsite-packageshttprunnerparser.py:249: FunctionNotFound
================================================================================= short test summary info ==================================================================================
FAILED demo_testcase_request_test.py::TestCaseDemoTestcaseRequest::test_start - httprunner.exceptions.FunctionNotFound: sum_two is not found.

执行:  

(httprunner_ven) E:httprunner_ven	est_hru	estcases>hrun demo_testcase_ref.yml  

报错:

>           raise exceptions.ParamsError(f"Invalid testcase path: {path}")
E           httprunner.exceptions.ParamsError: Invalid testcase path: E:httprunner_ven	est_hru	estcases	estcases/demo_testcase_request.yml

....libsite-packageshttprunner
unner.py:210: ParamsError
================================================================================= short test summary info ==================================================================================
FAILED demo_testcase_ref_test.py::TestCaseDemoTestcaseRef::test_start - httprunner.exceptions.ParamsError: Invalid testcase path: E:httprunner_ven	est_hru	estcases	estcases/demo_test...

录制脚本

 删除静态资源

导出har文件

 

 

生成yaml用例

har2case login.har -2y

E:hrun_ven	est_hrunhar>har2case login.har -2y

 执行用例

hrun login.yml

 

项目地址:https://github.com/debugtalk/v3-demo-mubu

C:Usershuang>hrun
usage: hrun [-h] [-V] [--log-level LOG_LEVEL] [--log-file LOG_FILE]
            [--dot-env-path DOT_ENV_PATH] [--report-template REPORT_TEMPLATE]
            [--report-dir REPORT_DIR] [--report-file REPORT_FILE] [--failfast]
            [--save-tests] [--startproject STARTPROJECT]
            [--validate [VALIDATE [VALIDATE ...]]]
            [--prettify [PRETTIFY [PRETTIFY ...]]]
            [testcase_paths [testcase_paths ...]]

One-stop solution for HTTP(S) testing.

positional arguments:
  testcase_paths        testcase file path

optional arguments:
  -h, --help            show this help message and exit
  -V, --version         show version
  --log-level LOG_LEVEL
                        Specify logging level, default is INFO.
  --log-file LOG_FILE   Write logs to specified file path.
  --dot-env-path DOT_ENV_PATH
                        Specify .env file path, which is useful for keeping
                        sensitive data.
  --report-template REPORT_TEMPLATE
                        specify report template path.
  --report-dir REPORT_DIR
                        specify report save directory.
  --report-file REPORT_FILE
                        specify report file path, this has higher priority
                        than specifying report dir.
  --failfast            Stop the test run on the first error or failure.
  --save-tests          Save loaded tests and parsed tests to JSON file.
  --startproject STARTPROJECT
                        Specify new project name.
  --validate [VALIDATE [VALIDATE ...]]
                        Validate JSON testcase format.
  --prettify [PRETTIFY [PRETTIFY ...]]
                        Prettify JSON testcase format.

 

原文地址:https://www.cnblogs.com/Uni-Hoang/p/12902280.html