1. 程式人生 > 其它 >7.httprunner-pytest風格用例

7.httprunner-pytest風格用例

用例設計原則
  • py檔名以test_開頭或者_test結尾
  • 函式名以test_開頭
  • 類名以Test開頭,並且不能有init初始化方法
  • 所有的包pakege必須有_init_.py檔案
  pycharm設定pytest 執行 settings → Tools → Python Integrated Tools → Testing / 將 default test runner 設定為pytest   pytest用例-Config類 config類的方法
base_url:base_url 指定
variables:全域性變數指定
export:指定匯出的測試用例會話變數暴露出來設為全域性變數
  pytest用例導包  
#導包
from httprunner import HttpRunner # httprunner類,測試基類
from httprunner import Config #config類
from httprunner import Step # 用例步驟
from httprunner import RunRequest #請求
from httprunner import RunTestCase # 引入測試用例
HttpRunner類
#httprunner類原始碼部分
class HttpRunner(object):
    config: Config
    teststeps: List[Step]
    ...
''' httprunner類的屬性config 指向了 Config類,teststeps指向了list裡面的Setp '''
#config類原始碼
class Config(object):
    def __init__(self, name: Text):
        self.__name = name # 初始化name變數,傳入用例名稱
        self.__variables = {} # 全域性變數
        self.__base_url = "" #base_url
        self.__verify = False #https證書開關
self.__export = [] #全域性變數提取 self.__weight = 1 caller_frame = inspect.stack()[1] self.__path = caller_frame.filename ''' 以上初始化變數,除了name是直接傳入 其餘變數在原始碼中下方都有對應的同名的函式處理,所有我們用Config類的時候 Config是鏈式呼叫,類傳入用例名稱,其餘的直接呼叫對應方法 '''
  pytest用例編寫
from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase

# 繼承Httprunner類
class TestLogin(HttpRunner):
    config = (Config('登入用例')  # 用例名稱
              .base_url('https://xxx-xxx.com')  # 域名地址
              .verify(False)  # https驗證開關
              .variables(**{'user': 'test', 'pwd': 123456})  # 全域性變數
              .export('token')  # 將token設定為全域性變數
              )
    # 測試步驟,是一個list,裡面可以有多個步驟用例
    teststeps = [
        Step(  # 每一個step,代表一個用例

            # RunRequest類用來發送請求
            RunRequest('step-login') # 步驟名稱
                .post('/')  # 請求方式 / 介面地址
                .with_data({'username': '$user', 'password': '$pwd'})  # 請求引數
                # 返回值提取
                .extract()
                # 返回值使用jmespath表示式提取: 表示式,變數名
                .with_jmespath('body.token', 'token')

                # 斷言
                .validate()
                .assert_equal('body.code', 0, message='code不正確')
        )
    ]
RunRequest(測試步驟)
#get請求 
.with_params(**{'page':1,'size':2})

#post請求 Content-Type:application/x-www-form-urlencoded
.with_data({'page':1,'size':2})
#post請求 Content-Type:application/json
.with_json({'page':1,'size':2})
RunTestCase匯入用例   
from .publish_test import TestCasePublish  # 匯入要引入的用例類

#在步驟中引入
Step(
    RunTestCase("step-登入")
    .call(TestCasePublishstatus) # 匯入用例類
    .export(*['uid']) #要提取的變數

)