httprunner3.x 測試用例teststeps-RunRequest


 

測試用例另一個重要部分——teststeps

一、測試用例分層模型

一個testcase里(就是一個pytest格式的Python文件)可以有一個或者多個測試步驟,就是teststeps[]列表里的Step。

每一個Step可以類比成pytest框架下的def test_xxx()的用例函數,在Step里通常都會要請求API完成測試,也可以調用其他測試用例來完成更多的需求。

可以來看下官方的測試用例邏輯圖(2.x版本不同,3.x棄用了2.x的API概念):

 

 

testsuite包含了testcase,testcase1需要依賴testcase2才可以完成,那么就可以在teststep12對其進行引用;而testcase2又依賴於testcase3,那么也可以在teststep22進行引用。

但是在整個testsuite下,這3個testcase都是相互獨立的,可以獨自運行。如果需要相互調用,則是在testcase內部去完成處理。

可能看起來有點繞,其實官方想表達的就是測試用例分層的一個思想:

  • 測試用例(testcase)應該是完整且獨立的,每條測試用例應該是都可以獨立運行的
  • 測試用例是測試步驟(teststep)的有序集合
  • 測試用例集(testsuite)是測試用例的無序集合,集合中的測試用例應該都是相互獨立,不存在先后依賴關系的;如果確實存在先后依賴關系,那就需要在測試用例中完成依賴的處理

其實這一點,在我們自己使用pytest框架編寫測試用例的時候同樣貫徹到了。為了自動化測試的穩定性和可維護性,每個測試用例之間相互獨立是非常有必要的。

二、teststeps-RunRequest

先上一段Step的代碼,結合下面的點對照着看:

    teststeps = [
        Step(
            RunRequest("get with params") .with_variables( **{"foo1": "bar11", "foo2": "bar21", "sum_v": "${sum_two(1, 2)}"} ) .get("/get") .with_params(**{"foo1": "$foo1", "foo2": "$foo2", "sum_v": "$sum_v"}) .with_headers(**{"User-Agent": "HttpRunner/${get_httprunner_version()}"}) .extract() .with_jmespath("body.args.foo2", "foo3") .validate() .assert_equal("status_code", 200) .assert_equal("body.args.foo1", "bar11") .assert_equal("body.args.sum_v", "3") .assert_equal("body.args.foo2", "bar21") ), 

從上面的代碼可以看出,RunRequest的作用就是在測試步驟中請求API,並且可以對於API的響應結果進行提取、斷言。

1.RunRequest(name)

RunRequest的參數名用於指定teststep名稱,它將顯示在執行日志和測試報告中。

2. .with_variables

用於存放變量,但是這里的是Step步驟里的變量,不同的Step的變量是相互獨立的。所以對於多個Step都要使用的變量,我們可以放到config的變量里去。

另外,如果config和Step里有重名的變量,那么當你引用這個變量的時候,Step變量會覆蓋config變量。

3. .method(url)

這里就是指定請求API的方法了,常用的get、post等等。如圖所示,就是用的get方法,括號里的url就是要請求的地址了。

這里要注意的是,如果在config里設置了基礎url,那么步驟里的url就只能設置相對路徑了。

4. .with_params

這個就簡單了,測接口不都得要傳參么,對於params類型的傳參,就放這就行了,key-value鍵值對的形式。對於body形式的傳參,看后面。

5. .with_headers

同樣,有header要帶上的就放這里。

 

 

6. .with_cookies

需要帶cookie的,可以用.with_cookies方法。

 

 

7. .with_data

對於body類型的傳參,可以用.with_data。

8. .with_json

如果是json類型的body請求體,可以用.with_json。

 

 

9. .extract

這里就是要做提取操作了,使用.with_jmespath(jmes_path: Text, var_name: Text)。

這里是采用了JMESPath語言,JMESPath是JSON的查詢語言,可以便捷的提取json中你需要的元素。

第一個參數是你的目標元素的jmespath表達式,第二個元素則是用來存放這個元素的變量,供有需要的引用。

這里不展開,后面單講。

10. .validate

斷言,我們測試最終就是要驗證接口返回是否符合預期。

那在httprunner框架中,可以使用assert_XXX(jmes_path: Text, expected_value: Any)來進行提取和驗證。

第一個參數還是jmespath表達式,第二個參數則是預期值。

assert_XXX這種方式相信用過自動化測試框架的都不會陌生,所以也非常容易上手。目前httprunner還是封裝了非常豐富的斷言方法的,相信可以滿足絕大多數的需求了。

 

 

例子:

 

 

到這里,一個接口的請求和驗證就完成了

 

 

 

來源:https://www.cnblogs.com/pingguo-softwaretesting/p/13214443.html


免責聲明!

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



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