一、HttpRunner學習匯總


HttpRunner是一款面向Http和HTTPS協議的通用測試框架,只需編寫維護一份YAML/JSON腳本即可實現自動化測試、性能測試、線上監控、持續集成等多種測試需求,是基於關鍵字驅動的框架,基於Har實現接口錄制和用例生成公告

安裝命令  pip install httprunner==2.5.7 ,這里安裝的是2.5.7版本,安裝完畢后 httprunner -V查看當前版本,HttpRunner 2.**分層機制:api testcases testsuite

一、在HttpRunner中,主要存在如下幾類文件

1、YAML/JSON(必須):測試用例文件,一個文件對應一條測試用例

2、debugtalk(可選):腳本函數,存儲項目中邏輯運算函數,該文件存在時,將作為項目定位標記,其所在目錄被視為項目工程的根路徑(當前工作目錄CWD),該文件不存在是,運行測試的路徑講被視為當前工作目錄CWD,測試用例文件中的相對路徑,如.csv均需基於當前工作目錄CWD,運行測試后,測試報告文件夾reports會生成在當前工作目錄

3、.env(可選):存儲項目環境變量

4、reports(自動生成):運行后自動生成,無需創建

二、YAML(Yet Another Markup Language)一種基於Unicode容易閱讀,容易和腳本語言交互的,用來表達資料序列的編程語言,YAML文件可以創建為.yml文件

1、基本語法:

      格式要求:K:(空格) v: 標識一堆鍵值對,必須要寫空格

      以空格的縮進來控制層級關系,只要是左對齊的一列數據,都是同一個層級的

      屬性和值大小寫敏感

      縮進不能用table鍵

 對於單個YAML/JSON文件來說,數據存儲結構為 list of dict的形式,其中可能包含一個全局配置項(config)和若干個測試步驟(test);,HttpRunner划分了兩層變量空間作用域(context),config:作為整個測試用例的全局配置項;test:測試步驟的變量空間(context)會繼承或覆蓋config中定義的內容,若某變量在config中定義了,在某test中沒有定義,則該test會集成該變量;若某變量在config和test中定義了,則該test使用config中定義的變量值,哥哥測試步驟的變量空間相互堵路,互不影響,如需在多個測試步驟中傳遞參數值,則需要使用extract關鍵字,並且只能從前往后傳遞

 

三、利用HttpRunner發送請求

 1、發送get請求

 

 執行yml文件,執行yml文件之前需要進入該文件所在的根路徑下  hrun ./xxx/yml文件名,也可以用CMD命令運行

2、發送帶token(傳參的)get請求

 

3、模擬請求頭

 

 

 4、發送post請求

 

 

 

5、設置變量

原來官方操作手冊說明的是config和test中都能定義變量,如果二者同時定義相同的變量則以test為主,但是2.5.7版本來看,二者同時存在讀取的config中的變量(從運行結果來看test與config都定義相同的變量時運行正常,test中變量錯誤,config的變量正常的情況下運行正常,config變量錯誤,test中正常,運行報錯)

 

 

 

四、test中參數應用舉例

1、output、export及extract

2.**版本周output參數被export逐漸取代,其作用是輸出值,相當於print()函數的輸出功能,另一個作用則是可以定義變量時用,經常與extract關鍵字一起組合使用,

3、extract可以提取的關鍵字為:status_code, cookies, elapsed, headers, content, text, json, encoding, ok, reason, url,可以根據測試報告提取關鍵字,extract支持多種提取方式,01、響應結果為json結果,可采用.運算符的方式,例如 headers.Content-Type;

02、也支持響應結果為text/html 結構,可采用正則表達式的方式

 

 

 

 

 

 通過正則表達式取響應正文中body的值

 

 

 通過json取值

 

 

 

 

 

 4、validate關鍵字

支持兩種格式:

{“comparator_name”:[check_itrm,expect_value]}   {'check': check_itrm, 'comparator': comparator_name,'expect':expect_value}

 validate關鍵字用於斷言,將預期結果與實際結果對比,其中包含的斷言方式有

 

 

判斷 包含的斷言方式為 -contains: [content,響應正文中的值],注意是判斷響應正文中是否包含了某字符串

 

 

 {'check': check_itrm, 'comparator': comparator_name,'expect':expect_value} 斷言方式舉例

 

 

 五、接口關聯操作

1、test中測試步驟之間的關聯

 

 

 2、測通過配置文件進行關聯,需要在根路徑新建.env文件,該文件存放設置的全局變量參數及參數值,引用環境配置配置文件的方式為  ${ENV(參數名)}

 

 

 

 

 

 3、也可以通過在debugtalk.py文件中編寫輔助函數,然后進行關聯;debugtalk是可選文件,引用該文件中的函數的方法為  ${函數名}

 

 

 

 

 

 4、用例之間的傳參,這種方式比較推薦,把需要的值都給參數化,然后進行相互調用,可以提高代碼復用率

拿獲取token和查看被創建的標簽的接口舉例,

首先獲取token的接口中先把access_token變量值通過json取值方式以extrac關鍵字提取出來賦值給token_id,config中輸出token_id值,其他用例需要引用的情況下,需要先定義該變量然后再引用,注意:四處的變量名必須保持一致

 

 

 

 

 

 

六、參數化的方式(三種)

方式一、通過testsuite中編寫parameter關鍵字參數,testcases引用的方法:

從2.0.0版本開始,HttpRunner不再支持在測試文件中進行參數化配置,參數化的功能需要在testsuite中實現,實現的方式為paraneters下面寫參數;testcases中的yml文件如下,testsuite中執行的時候需要引用testcases中的用例,,參數化后需要在testsuite中運行yml文件,

 

 

 

 testsuite傳遞多個參數的方式

 

 

 

 

 笛卡爾積的運用:比如測試賬號有四種["test1", "test2", "test3", "test4"],密碼也有四種 ["123456", "123456", "123456", "123456"],用笛卡爾積組合的話,就是4*4=16種組合

 

 

 方式二、利用csv文件進行參數化

根據經下新建data文件夾--新建info.csv文件,通過P()函數進行引用,文件中的參數用 - 符號分隔,需要csv文件中的參數則通過  -  參數名的方法調用,與csv中的參數排列順序無關,

此種方式單獨在testcases中調用也是失敗的,此種方法區別上面的是可以吧預期結果寫進文件中用於斷言,參數名稱必須與csv表頭保持一致,這也遵循了約定大於配置的思想

 

 

 

 

 

 方式三、通過debugtalk實現參數化(相當於jmeter中的函數助手的功能),與parameters\csv一樣,debugtalk參數化的數據也是一個列表,以下是隨機在某最小值和某最大值的范圍內生成多少個整數組成的列表的函數

 

 

 

 

七、跳過用例的執行,只能在testcases中設置,testsuite中暫時沒有找到方法跳過執行

Unitest中可以通過@skip 無條件跳過和@kipif 條件為真時跳過及@skipunless 不滿足條件時跳過用例

跳過用例的場景適合開發代碼沒完成,測試代碼已完成、用例腳本沒寫完、依賴測試場景:A接口完成B接口才完成,A接口失敗B接口不執行等等

1、無條件跳過

 

 

 

 2、skipIf 條件為真是跳過,返回值為True,遵循python中if語句為真的判斷:非空  非0   True

 

 3、skipUnless 條件為假時跳過,與skipIf相反

 

 八、用例重復執行  times 參數,用例中可以設置用例運行的次數;測試套件中設置同理運行次數的方法暫時還沒有找到

 

 

 九、form-data傳輸格式的請求運行失敗時的處理,頭部中content-type不寫可以執行成功,寫了就會失敗

 

 

 十、httprunner錄制工具使用(錄制成功后yml文件使用的是老版本的寫法)

為了簡化測試用例的編寫工作,HttpRunner實現了測試用例生成的功能,對應的轉換為一個獨立的項目  har2case

首先,通過抓包工具fiddler隨便抓取一些請求,導出會話,導出的格式為 .har格式

 

 

 

 轉成json格式的httprunner項目  har2case +.har文件絕對路徑

 

 

 

 轉成yml文件 har2case +.har文件絕對路徑 -2y  生成yml文件

 

 編譯器中打開文件

 

 

 

 

 

十一、用例分層

分成思想:Httprunner項目分層為 api接口層,testcases用例層,testsuite測試套件層

api定一層:不用在里面加特殊細節的斷言,斷言接口能否請求通即可

中間層為testcases用例層:調用api層的接口定義yml文件即可,細節斷言可在這里編寫,同時也可以調用其他用例或者其他用例的參數執行

最上層為測試套件層testsuite: 最好整合一起執行,目前沒有找到方法控制測試套件中用例的執行順序

 

 

 1、api接口編寫舉例,新建api文件夾,下面新建一個yml文件進行接口api的編寫

 

 2、接口層寫好后編寫用例層,用例層直接調用接口中的yml文件執行,

 

3、測試套件層:測試套件吧測試用例整合起來執行

 

 

十二、用例之間的相互調用

用例之間調用的方法可以通過調取用例和調取用例之中的參數進行調用

1、簡單的調用

 

 

 

 2、用例之間傳參的調用,可以實現用例的復用 思路:被調取用例:現有extrac提取被調用的參數值,export輸出該參數,調用的用例:variables該參數值后把該參數傳入接口請求參數中

 

 

 

 

 

 

 十三、腳手架工具使用介紹

一個HttpRunner項目中必須要有的文件:api(定義接口)  reports(自動生成的,存儲測試報告) testcases (存放測試用例)  testsuites(存放測試套件)  .env (存放環境配置參數)  debugtalk (編寫腳本函數),與其自己動手新建這么多文件夾和文件,還不如利用腳手架快速構建項目,只需要一個命令即可: hrun   --startproject  +項目名稱 

 

 十四、生成2.4.3版本測試報告的方法

先把HttpRunner版本降級到2.4.3版本   pip install httprunner==2.4.3 --index-url https://pypi.douban.com/simple

新建一個HttpRunner項目,在reports文件夾下新建template文件夾,把2.4.3版本的測試報告放進去命名為extent_report_template2.4.3.html

 

 

然后再運行命令: hrun ./testcases/demo_testcase.yml --report-template reports/template/extent_report_template2.4.3.html,生成的測試報告就是2.4.3的版本了

 


免責聲明!

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



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