httprunner 使用總結


HttpRunner 概念

HttpRunner 是一款面向 HTTP(S) 協議的通用測試框架,只需編寫維護一份 YAML/JSON 腳本,即可實現自動化測試、性能測試、線上監控、持續集成等多種測試需求。

相關操作

  1. 參數提取(extract)和參數引用($var)
# 第一個接口/api/get-token的響應結果為:
{"success": true, "token":"ZQkYhbaQ6q8UFFNE"}
# 提取 token,采用 content.token
'extract':[
    {'token':'content.token'}
]
# token 作為提取后的參數名稱,可以在后續使用 $token 進行引用
'headers':{
    'token':'$token',
    "Content-Type": "application/json",
    "device_sn": "FwgRiO7CNA50DSU",
}
  1. 公共配置全局化
{
  "config": {
    "name": "testcase description", 
    "variables": [],
    "request": {
        "base_url":"http://127.0.0.1:5000",
        "headers": {
             "User-Agent":"python-requests/2.18.4",
            "device_sn": "FwgRiO7CNA50DSU",
            "Content-Type":"application/json"
        }
    }
  }
}

# 其中 name 為測試用例的名稱,在測試報告中將作為標題
  1. debugtalk.py 文件中定義相關變量和函數
import hashlib
import hmac
import random
import string

SECRET_KEY = "DebugTalk"

def gen_random_string(str_len):
    random_char_list = []
    for _ in range(str_len):
        random_char = random.choice(string.ascii_letters + string.digits)
        random_char_list.append(random_char)

    random_string = ''.join(random_char_list)
    return random_string

def get_sign(*args):
    content = ''.join(args).encode('ascii')
    sign_key = SECRET_KEY.encode('ascii')
    sign = hmac.new(sign_key, content, hashlib.sha1).hexdigest()
    return sign
  1. 變量的申明(variables)、引用($var)和調用函數(${func($var)})
# 申明變量:生成 15 位長度的隨機字符串並賦值給 device_sn 的代碼為:


"variables": [
  {"device_sn": "${gen_random_string(15)}"}
]
# 引用變量:使用 $user_agent、$device_sn、$os_platform、$app_version 根據簽名算法生成 sign 值的代碼
"json": {
  "sign": "${get_sign($user_agent, $device_sn, $os_platform, $app_version)}"
}

  1. 數據驅動
# 創建用戶的接口中對 user_id 進行參數化,參數化列表為 1001~1004,並且取值方式為順序取值
"config": {
  "parameters": [
    {"user_id": [1001, 1002, 1003, 1004]}
  ]
}
  1. 測試運行
# 運行單個測試用例( hrun 命令外加單個測試用例文件的路徑)

$ hrun filepath/testcase.yml

# 運行多個測試用例使用 (hrun 命令外加多個測試用例文件的路徑)

$ hrun filepath1/testcase1.yml filepath2/testcase2.yml

# 運行指定文件夾下所有的測試用例(使用 hrun 命令外加文件夾的路徑):

$ hrun testcases_folder_path

# 測試用例在運行過程中,遇到失敗時不再繼續運行后續用例

$ hrun filepath/testcase.yml --failfast

# 顯示指定日志級別以上的日志

$ hrun tests/data/demo_parameters.yml --log-level debug
  1. 測試報告生成
# 指定報告名稱
$ hrun docs/data/demo-quickstart-2.yml --html-report-name demo
  1. hook 機制,hook 函數定義在 debugtalk.py 里
    • 用例層,config 新增關鍵字 setup_hooks 和 teardown_hooks,為全局的,setup_hooks 在所有測試前執行,teardown_hooks 所有用例執行后執行一次。
    - config:
    name: basic test with httpbin
    request:
        base_url: http://127.0.0.1:3458/
    setup_hooks:
        - ${hook_print(setup)}
    teardown_hooks:
        - ${hook_print(teardown)}
    
    • 測試步驟層,test 中新增關鍵字 setup_hooks 和 teardown_hooks,為局部變量,當前測試用例測試前后執行
"test": {
    "name": "get token with $user_agent, $os_platform, $app_version",
    "request": {
        "url": "/api/get-token",
        "method": "POST",
        "headers": {
            "app_version": "$app_version",
            "os_platform": "$os_platform",
            "user_agent": "$user_agent"
        },
        "json": {
            "sign": "${get_sign($user_agent, $device_sn, $os_platform, $app_version)}"
        }
    },
    "validate": [
        {"eq": ["status_code", 200]}
    ],
    "setup_hooks": [
        "${setup_hook_prepare_kwargs($request)}",
        "${setup_hook_httpntlmauth($request)}"
    ],
    "teardown_hooks": [
        "${teardown_hook_sleep_N_secs($response, 2)}"
    ]
}
# test 中 name 為測試步驟的名稱,在測試報告中將作為測試步驟的名稱
  1. 參數定義和數據源指定
    1. 參數名稱的定義分為兩種情況:
      • 獨立參數單獨進行定義;
      • 多個參數具有關聯性的參數需要將其定義在一起,采用短橫線(-)進行連接。
    2. 數據源指定支持三種方式:
      • 在 YAML/JSON 中直接指定參數列表
      • 通過內置的 parameterize(可簡寫為P)函數引用 CSV 文件
      • 調用 debugtalk.py 中自定義的函數生成參數列表
# user_id 通過引用 csv 文件
- config:
    name: "demo"
    parameters:
        - user_agent: ["iOS/10.1", "iOS/10.2", "iOS/10.3"]
        - user_id: ${P(user_id.csv)}
        - username-password: ${get_account(10)}
# 關聯性的多個參數
- config:
    parameters:
        - username-password:
            - ["user1", "111111"]
            - ["user2", "222222"]
            - ["user3", "333333"]

參數定義詳見:
https://cn.httprunner.org/advanced/parameters/


免責聲明!

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



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