httprunner 2.x學習16 - 調用HttpRunner類執行用例


前言

httprunner 2.x版本底層用的是 unittest 框架運行的用例,執行用例的時候除了可以在命令行輸入hrun運行用例,也可以調用HttpRunner類執行用例。

HttpRunner類介紹

在api.py找到HttpRunner類

class HttpRunner(object):
    """ Developer Interface: Main Interface
        Usage:

            from httprunner.api import HttpRunner
            runner = HttpRunner(
                failfast=True,
                save_tests=True,
                log_level="INFO",
                log_file="test.log"
            )
            summary = runner.run(path_or_tests)

    """

    def __init__(self, failfast=False, save_tests=False, log_level="WARNING", log_file=None):
        """ initialize HttpRunner.

        Args:
            failfast (bool): stop the test run on the first error or failure.
            save_tests (bool): save loaded/parsed tests to JSON file.
            log_level (str): logging level.
            log_file (str): log file path.

        """

調用方法在上面已經有示例

from httprunner.api import HttpRunner
runner = HttpRunner(
                failfast=True,
                save_tests=True,
                log_level="INFO",
                log_file="test.log"
            )
summary = runner.run(path_or_tests)

實例化HttpRunner類的時候,需要的四個參數

  • failfast 默認為False,作用是在遇到執行用例遇到第一個失敗/異常停止運行
  • save_tests 默認為False,作用是講運行的用例和結果保存到logs目錄,保存為json文件
  • log_level 默認"WARNING",設置運行日志的級別
  • log_file 默認None,保存日志文件路徑

run運行用例

運行用例調用run方法

   def run(self, path_or_tests, dot_env_path=None, mapping=None):
        """ main interface.

        Args:
            path_or_tests:
                str: testcase/testsuite file/foler path
                dict: valid testcase/testsuite data
            dot_env_path (str): specified .env file path.
            mapping (dict): if mapping is specified, it will override variables in config block.

        Returns:
            dict: result summary

        """

run 方法有三個參數:

  • path_or_tests : 指定要運行的測試用例,支持傳入兩類參數:1.YAML/JSON 格式測試用例文件路徑, 2.標准的測試用例結構體
  • dot_env_path: 指定加載環境變量文件(.env)的路徑,默認為項目根目錄.env 文件
  • mapping: 變量映射,可用於對傳入測試用例中的變量進行覆蓋替換。

示例1,在hrun2_xuexi目錄寫一個run_case.py執行login目錄的2個yaml用例

# run_case.py
from httprunner.api import HttpRunner

runner = HttpRunner(log_level="INFO")
runner.run('login')

設置log_level為INFO級別,運行后打印

INFO     HttpRunner version: 2.5.7
INFO     Start to run testcase: logincase
login case1
INFO     POST http://127.0.0.1:8000/api/v1/login
.INFO     
status_code: 200, response_time(ms): 239.38 ms, response_length: 109 bytes
----------------------------------------------------------------------


Ran 1 test in 0.241s
INFO    
 OK
Start to run testcase: logincase
login case1
INFO     POST http://127.0.0.1:8000/api/v1/login
.INFO     status_code: 200, response_time(ms): 225.15 ms, response_length: 109 bytes



----------------------------------------------------------------------
Ran 1 test in 0.225s

OK

save_tests 參數是保存運行的用例和運行結果

from httprunner.api import HttpRunner

runner = HttpRunner(
                    save_tests=True,
                    log_level="INFO",
                    )
runner.run('login')

運行后會生成一些json文件

log_file指定運行日志的目錄,如果直接寫一個日志名稱'yoyo.txt'會出現找不到目錄的報錯

from httprunner.api import HttpRunner

runner = HttpRunner(failfast=True,
                    save_tests=True,
                    log_level="INFO",
                    log_file="yoyo.log")
runner.run('login')

運行報錯:FileNotFoundError: [WinError 3] 系統找不到指定的路徑。: ''

log_file參數需指定文件夾路徑,如:logs/yoyo.log

from httprunner.api import HttpRunner

runner = HttpRunner(failfast=True,
                    save_tests=True,
                    log_level="INFO",
                    log_file="logs/yoyo.log")
runner.run('login')

會在logs目錄生成yoyo.log的日志文件

failfast參數是在第一個用例運行失敗的時候就停止運行

運行用例指定項目路徑 debugtalk.py和.env

run運行用例,可以指定單個yaml或json文件,也可以指定運行一個文件夾內所有的用例

# 運行單個yaml
runner.run('login/login1.yml')
# 運行整個文件夾
runner.run('login')

HttpRunner 會自動以指定測試用例文件路徑為起點,向上搜索 debugtalk.py 文件,並將 debugtalk.py 文件所在的文件目錄作為當前工作目錄。
同時自動搜索當前工作目錄下搜索 .env 文件。這2個文件一般放到項目的根目錄

dot_env_path 指定.env文件路徑

runner.run('login', dot_env_path='.env')

mapping 傳入測試用例中的變量進行覆蓋替換

# mapping
override_mapping = {
    "device_sn": "XXX"
}
runner.run("login", mapping=override_mapping)

path_or_tests 除了可以支持傳入的yaml/json格式的文件,也可以支持dict格式的用例,如下

from httprunner.api import HttpRunner
dict_case = {
    "testcases":[
        {
            "config":{
                "name":"logincase1",
                "base_url":"http://127.0.0.1:8000",
                "variables":{}
            },
            "teststeps":[
                {
                    "name":"login case1",
                    "request":{
                        "url":"/api/v1/login",
                        "method":"POST",
                        "json":{
                            "username":"test",
                            "password":123456
                        }
                    },
                    "validate": [
                        {
                            "eq": ["status_code",200]
                        }
                    ]
                }
            ]
        },
        {
            "config":{
                "name":"logincase2",
                "base_url":"http://127.0.0.1:8000",
                "variables":{}
            },
            "teststeps":[
                {
                    "name":"login case1",
                    "request":{
                        "url":"/api/v1/login",
                        "method":"POST",
                        "json":{
                            "username":"test",
                            "password": 123456
                        }
                    },
                    "validate":[
                        {
                            "eq": ["status_code", 200]
                        }
                    ]
                }
            ]
        }
    ]
}

runner = HttpRunner(log_level="INFO")
runner.run(dict_case)

可以自己寫成符合上面用例格式的字典,也可以用run執行


httprunner 2.x實戰教程點我 ->立即報名


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM