zoukankan      html  css  js  c++  java
  • 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.
    

     

  • 相关阅读:
    装饰器
    函数对象与闭包
    名称空间与作用域
    函数的参数
    函数的基本使用
    ${}与#{}的区别
    thymeleaf之日期格式化
    template might not exist or might not be accessible by any of the configured Template Resolvers
    springboot使用@Scheduled之cron表达式详解
    自定义springboot项目启动图案
  • 原文地址:https://www.cnblogs.com/Uni-Hoang/p/12902280.html
Copyright © 2011-2022 走看看