【接口自動化】3.寫接口自動化case要注意的點


可能有人會說,寫接口的自動化CASE多簡單了,寫個參數發送請求完事了,還要注意啥?

沒錯,相比起UI自動化的case,你要去寫各種定位器,接口自動化的case寫起來確實容易多了。這也是接口自動化
的一個優點,開發效率更快。

但是寫得快,不等於寫得好,本章就聊聊接口自動化case的那些事。

一、case要易於閱讀和維護

既然是寫自動化case,那也是在寫代碼,那么,代碼的可閱讀性就不可以忽視。除了python的代碼規范,還要注意
case的結構,能讓人一目了然。

其實跟我們手動用postman測試接口差不多,把每一步的事情寫寫清楚就好。
那測試接口通常有三個步驟:

  1. 傳入請求參數
  2. 發送請求到接口
  3. 判斷接口返回的結果是否符合預期

這樣一來,我們在接口的自動化case中也分三步走。

def test_query_activity_manual(init_activitiy_manual, del_activity):
    '''查詢可參與的活動-手動開獎'''
    payload = {
        "winWay":0
    }

    r = requests.get(activity_url, params=payload, headers=HEADER)
    result = r.json()

    assert result["status"] == 0
    assert result["data"]["content"][-1]["id"] == 10087
    assert result["data"]["content"][-1]["winWay"] == 0

這樣寫的話,是不是比較清晰呢?誰都能看懂你的代碼,自己調試代碼的時候讀着也舒心。

二、case的穩定性

1、為什么有人寫的case經常報錯

比起上面說的易於閱讀維護,自動化case的穩定性才是最重要的。如果寫的測試case跑起來總是不穩定,容易報錯,
那么接口自動化這個事情就做的沒什么意義了,使用的人也會對你的框架失去信任。

我相信,大家在寫完一個case的時候一定是調試通過的,那么為什么這個case當時能跑,過幾天就跑不了呢?在我
觀察下來,很多時間都是由於“測試數據”引起的。自動化case依賴的測試數據不穩定,或許你的測試數據被別人無意中刪掉了,
又或者你別的case產生的測試數據影響到了你這條case的測試數據等等,都是比較常見的原因。

我在工作中發現有的人喜歡調用接口來生成自己想要的測試數據,就是說依賴另一個接口來產生測試數據。這種方式有着一個
很吸引人的優點,那就是你不用去深入了解被測接口的上下游數據關系,反正調用接口后,系統邏輯會去生成對應的數據。
沒錯,這一點很誘人,但是當這個產生數據的接口掛了,或者返回了錯誤數據時,你的case必然就會受到影響了。

另外,還有的人喜歡用上一個case產生的數據來給下一個case用,這同樣的道理,上一個接口要是報錯了,下一個也必然收到影響,
但是你能說受到影響的case沒跑成功是因為接口本身有bug嗎?
很顯然不能。

2、釜底抽薪,sql生成測試數據

說白了,上述2種情況都是由於生成測試數據的方式不穩定,會產生誤傷。那么我是怎么應對的呢?
思路很簡單,我直接用sql在測試環境里生成我要的測試數據,用完再刪掉不就好了。在工作中,我也確實是這樣做的,效果很穩。

另外,最近在解讀pytest官方文檔中的fixture模塊,深深感受到了fixture功能的強大,設計的巧妙。而且人家也強調了,要保持
測試case所處環境的干凈。

所以,我的case編寫原則就是:任意一個case,任何時候都可以運行,不受其他case的影響。

我通常把單個接口的case放在一個模塊里。比如說,有6個接口,我就會寫6個模塊,每個模塊里有着對於這個接口的所有場景的測試,
像參數校驗、不同傳參導致不同結果的場景(數據驅動)等。

對於這個6個接口的業務流測試,我會單獨的放一個模塊里,在這個模塊里,就只測業務流,證明他們幾個的業務邏輯是沒問題的,不會
再去關注其中單個接口的其他場景的測試。在業務流測試里,case之間的測試數據是要傳遞使用的。

3、上述2種方式的優缺點

姑且按照順序,把上面2種方式稱為方式1、方式2吧,其中方式2是我喜歡的方式。

先說方式1的優缺點:

  • 優點:測試人員不需要關注數據庫層相關的邏輯關系,簡單省事。
  • 缺點:過於依賴其他創建數據的接口,只要依賴接口有問題,case必然受影響。

再說方式2的:

  • 優點:不受其他接口的影響,直接在數據庫插入測試數據,用完即刪,保證測試環境的干凈,測試數據不會影響到其他case。
  • 缺點:測試人員需要清楚業務邏輯背后涉及到的表關系,因為很多接口涉及到的不止一張表,比較麻煩。

其實方式2的缺點比起方式1 ,我覺得也不能算嚴格意義的缺點吧,雖然你了解表之間關系以及寫sql麻煩了點,但是也是加深了
你對業務的理解,最重要的是case穩定了,這樣的接口自動化才有意義。

三、個人的一點實操分享

或許有人會認同我的方式了,但是又擔心自己寫sql寫不好,萬一出錯咋整?

對此,沒啥好辦法,只能保證都是正確的了。這里有2個建議,可以幫助你去寫好sql。

  1. 自己清楚表的邏輯關系最好,不清楚,請找對應的開發請教,並且記錄下來。
  2. 通過頁面或者接口手動創建數據,然后去數據庫里追蹤這條數據,通過數據庫工具,復制出sql語句,然后針對性的改動即可。


免責聲明!

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



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