輕量級數據分離接口自動化框架

該框架的特性

1、能夠管理系統公共的數據,系統發生變化後方便切換

2、能夠實現接口層級的複用,提高接口自動化腳本的可維護性

3、能夠實現接口之間的關聯,也就是需要結果提取器

4、能夠操作數據庫處理數據(預製數據、清理垃圾數據)

5、能夠實現測試用例集的前置後置步驟(類似unittest的setupclass和teardownclass)

6、能夠實現測試用例的前置後置步驟(類似unittest的setup和teardown)

7、各種靈活的預期結果比較器

8、測試腳本和框架代碼完全分離,懂接口測試但是不懂代碼的人一天即可完全掌握,超低的學習使用成本

9、支撐http/https協議的接口測試

10、靈活的擴展能力(自定義函數和自定義比較器)

 

進一步交流可以+羣:929233070

準備工作

第一步: 安裝python 3版本 ,

                百度安裝教程較好

第二步:安裝依賴庫

            

            在cmd窗口中切換到依賴庫文件所在的目錄, 輸入如下命令即可:pip install -r requirements.txt

    

 

第三步:安裝pycharm(社區版就可以)

第四步:下載框架代碼, 下載地址:https://github.com/duodongduode/interface_auto_test

第五步:使用pycharm打開框架代碼, 恭喜你,你已經完成所有的準備工作啦。

執行demo

core下面有一個testcase_run.py文件

testcase_run.py文件最後一行代碼是設置執行的用例數據,可以是文件夾, 也可以是某個指定的文件, 是一個相對路徑,打開這個文件右鍵執行就好。

執行完成後會生成測試報告

測試報告所在的路徑:

使用瀏覽器打開測試報告

基礎使用篇

     打開框架代碼之後,目前你只需要瞭解test_data目錄,test_data目錄下面有三個子目錄, common、 api_template、 testcase

   

common: 定義全局變量的目錄,裏面有一個common.yaml文件, 裏面定義全局變量

demo中定義了系統的基礎路徑、登陸系統的用戶名和密碼,  系統對應的數據庫配置(數據庫配置中的用戶名、密碼、ip、端口、庫名字的變量名稱不可變,否則會連接數據庫失敗),這個文件中可以定義任何你想要的全局變量,名字可以取任意英文名,

    

api_template:存在被測試系統的api定義,定義api的請求的url、方法、請求頭、cookie、數據、驗證方法、參數提取,這樣做的目的是我們在寫測試用例時,關注測試用例的數據,而非接口的調用,讓接口維護更加容易,  使用的時候不一定非要定義api接口模板的,只是說用了會更好維護一點,用例更加簡潔一些。

demo中的接口模板文檔說明:

創建收藏夾的接口和刪除收藏夾的接口定義

說明:

1、一個文檔中可以定義多個接口

2、接口的name字段對應的值必須是英文

3、cookie和header字段類似,裏面可以定義多組值

4、data:根據接口傳遞數據接口進行定義

5、verify: 參考比較器章節

6extractor:參考參數提取章節

testcase:測試用例目錄,下面可以建子目錄,讓用例不同功能塊的用例歸檔到不同的目錄中, 一般一個接口建一個用例文件, 一個文件就是一個用例集

一個用例集類似於unittest框架特點,有用例集前置步驟(setupclass) 用例前置步驟(setup)  用例(testcase)  用例後置步驟(teardown)  用例集後置步驟(teardownclass)

setupclass  setup  teardown  teardownclass在一個用例集中只能最多有一個(可以沒有), testcase可以有多個

用例集的執行順序   setupclass  setup  testcase1   teardown    setup  testcase2   teardown ........     setup  testcaseN   teardown  teardownclass

從給定的順序可以看出,和unittest框架的testcase類執行順序完全一致。

框架中的demo, 可以看出有4個測試用例

單個測試用例結構

  

     name:測試用例的名字

     variable:定義變量,可以定義多個  如果變量定義在 setupclass  teardownclass結構中,那麼變量的作用域就是整個測試用例集, 定義在 setup  testcase1      teardown   中的變量都是本用例有效

      step用例步驟, 一個用例可以有很多個步驟, 一個步驟就是一次接口調用或者數據庫操作

               type: api或者sql

     

      接口的step

       name: 步驟描述, 可以沒有

       type: api或者sql

       api:引用的api路徑  格式:文件名_接口名 (非必須, 有的話可以減少一些)

       url:  接口請求的路徑, 會覆蓋引用api中的url,如果用例中沒有寫url,以引用api中的url爲準

       method:接口請求的方法, 會覆蓋引用api中的method,如果用例中沒有寫method,以引用api中的method爲準

       header:接口請求的請求頭, 會把引用api中定義的請求頭合併

       cookie:接口請求的cookie, 會把引用api中定義的cookie合併

       data:發送的數據, 如果是發送json數據接口,會替換api模板中定義的數據,  其他類型的接口,都會合並api模板中定義的數據

       verify: 參考比較器

       extractor:參考參數提取

    

      sql的step:

      demo中的sql步驟

    

       name: 步驟描述, 可以沒有

       type: api或者sql

       sql: 執行的sql語句

       verify: 參考比較器

       extractor:參考參數提取

驗證結果比較器

    每個步驟都可以添加參數比較器,但是這個不是必須的, 而且一個參數比較器中可以添加多個驗證點

     

     接口的驗證結果比較器

     接口比較器demo

    

 上圖中有兩個驗證點

   module: 取值模塊 response_code(取響應碼),header(從響應頭取值),cookie(從cookie中取值),response_content(從響應數據中取值)

   value_path: 取值方式,是jsonpath表達式,是響應碼這個字段可以不填

    operator:值比較方式

操作符

說明

=

比較兩個數據相等,可以數字,也可以是字符串, 相等返回 true  ,不相等返回false

!=

比較兩個數據不相等,可以數字,也可以是字符串, 不相等返回 true  ,相等返回false

>

判斷兩個數 實際值大於預期值, 大於返回true  否則返回false

>=

判斷兩個數 實際值大於等於預期值, 大於等於返回true  否則返回false

<

判斷兩個數 實際值小於預期值, 小於返回true  否則返回false

<=

判斷兩個數 實際值小於等於預期值, 小於等於返回true  否則返回false

contains

判斷 兩個字符串, 實際值包含預期值, 包含返回true , 不包含返回false

not contains

判斷 兩個字符串, 實際值不包含預期值, 不包含返回true , 不包含返回false

none

 判斷實際值是none , none 返回true  ,  非 none 返回false

not none

 判斷實際值是 not none , not none 返回true  , none 返回false

expect_value: 期望的值

 

     sql比較器demo:

  相比接口比較器,沒有取值模塊一說,  差一點在取值方式

  value_path: $.X.Y    表示取sql查詢結果中的X行,第N列數據

                        $ 表示是取sql查詢結果的整個內容

                       $.X      表示取sql查詢結果中的第X行數據

參數提取器

   每一個步驟中可以有參數提取器,參數提取器非必須,根據需要使用,用於做接口關聯,提取的參數作用域可以是全局,測試用例集 、測試用例

  

接口參數提取器demo:

   圖中框起來的是接口參數提取器, 可以看到提取了兩組數據

         name:提取參數後賦值的變量名

         module:取值模塊   response_code(取響應碼),header(從響應頭取值),cookie(從cookie中取值),response_content(從響應數據中取值)

         value_path: 取值方式,是jsonpath表達式,是響應碼這個字段可以不填

         parameter_level:  提取參數的級別  # testcase(用例級)、 testsuite(測試用例級)、 global(全局)

   

  sql提取器demo:

     

       name:參數提取器的名字

       value_path: $.X.Y    表示取sql查詢結果中的X行,第N列數據

                        $ 表示是取sql查詢結果的整個內容

                       $.X      表示取sql查詢結果中的第X行數據

       parameter_level:  提取參數的級別  # testcase(用例級)、 testsuite(測試用例級)、 global(全局)

變量引用

        變量引用參考了jmeter的變量引用格式,即  ${變量名} , 如果用例級變量, 測試用例集級變量,全局變量中都有對應的名字的變量,  優先級

        用例級變量>測試用例集級變量>全局變量

         可以在測試數據的任何地方引用變量

        demo:

       

函數引用

   函數引用格式  ${{函數名(參數1,參數2.....)}}  

  

目前支撐的函數

函數名

作用

引用方法

random_choice

從給定的值中隨機選擇一個

${{ random_choice( 3,4,5,6,10) }}   從2,3,5,6,10中隨機選擇一個值

random_int

生成一個隨機整數

${{ random_int(10,100)}}  生成一個10-100之間的隨機整數

random_str

生一個指定長度的隨機字符串

${{ random_str(10)}} 生成一個長度爲10的隨機字符串

使用demo

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章