前言
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執行
