HTTP 接口自動(dòng)化測試方案
<a name="toQ8V"></a>
測試人員的角色
- 手工測試人員
- 執(zhí)行
- 讀懂測試用例
- 明白業(yè)務(wù)邏輯
- 準(zhǔn)備測試數(shù)據(jù)
- 比較執(zhí)行結(jié)果
- 持續(xù)執(zhí)行
- 選擇持續(xù)集成的工具
- 讓測試定時(shí)執(zhí)行
- 關(guān)注點(diǎn):數(shù)據(jù)和對(duì)比
- 執(zhí)行
- 中高級(jí)自動(dòng)化測試人員
- 編寫測試腳本
-
腳本都是線性的image.png
- 編寫 JMeter 測試腳本
- 線性的
- 準(zhǔn)備數(shù)據(jù)
- 請(qǐng)求接口
- 解析響應(yīng)
- 進(jìn)行斷言
- 查看結(jié)果
- 編寫 Postman 測試腳本
- 線性的
- 準(zhǔn)備數(shù)據(jù)
- 請(qǐng)求接口
- 解析響應(yīng)
- 進(jìn)行斷言
- 查看結(jié)果
- 編寫 Python 測試腳本
- 有測試的概念
- 代碼可以直接告訴你:結(jié)果
- 需要用“單元測試框架”或者 BDD(behavior driven development) 測試框架
- 后者,沒有人用 Python 做 BDD,大部分用的 Java 的 Cucumber
- 只考慮前者。
- 只考慮 Python
- 選擇有兩個(gè):pytest 和 unittest
- unittest:安裝完 Python,就自帶了
- pytest:安裝完 Python,沒有帶,需要 pip install pytest 才能有
- 優(yōu)勢:參數(shù)化,報(bào)告好看
- 單元測試框架帶來的好處
- 斷言:讓程序去判斷是不是通過,并且告訴執(zhí)行者
- 無測試的概念
- 用 Python 去執(zhí)行 HTTP 請(qǐng)求
- 用 目測 HTTP 響應(yīng)的結(jié)果
- 栗子image.png
-
代碼image.png
- 什么叫做無測試?代碼不會(huì)告訴你 “PASS”或者 “FAIL”,必須目測
- 看控制臺(tái)的輸出
- 通過抓取通信,看通信的內(nèi)容
- 有測試的概念
-
腳本都是線性的
- 【抽離業(yè)務(wù)】編寫業(yè)務(wù)代碼
-
適用于:有測試分層的概念的方案image.png
-
分層image.png
- 測試腳本有調(diào)用,并不是所有的工作都在這一個(gè)腳本中完成
- 主要:場景方法:構(gòu)建請(qǐng)求,解析響應(yīng)(相當(dāng)于在手工界面測試的:輸入數(shù)據(jù)和點(diǎn)擊提交)
- 次要:核心方法:做支持的,讀文件(CSV,Excel,Json,Yaml……),字符處理
- 測試腳本有調(diào)用,并不是所有的工作都在這一個(gè)腳本中完成
- 場景方法
- 依靠 業(yè)務(wù)類
- 連接 測試腳本 和 業(yè)務(wù)類
- 中間層,方便測試腳本的使用,降低使用難度,提高效率,節(jié)省時(shí)間
- 栗子
- 教會(huì)10個(gè)手工測試/初級(jí)自動(dòng)化測試:在測試腳本使用業(yè)務(wù)類:5 天
- 教會(huì)10個(gè)手工測試/初級(jí)自動(dòng)化測試:在測試腳本使用場景方法:1 + 1 天
- 栗子
- 寫 業(yè)務(wù)類 的人,來寫場景方法
- 業(yè)務(wù)類
- 構(gòu)建請(qǐng)求
- 解析響應(yīng)
- 具體的實(shí)現(xiàn),交給“核心層”來做
-
適用于:有測試分層的概念的方案
- 關(guān)注的點(diǎn):業(yè)務(wù),業(yè)務(wù)邏輯,是功能本身
- 編寫測試腳本
- 測試開發(fā)/高級(jí)自動(dòng)化測試人員
- 負(fù)責(zé)“核心層”
- 真正的操作“核心工具”的人
- 在 Python 中,核心工具 = 各種第三方庫
- 庫 = 無數(shù)個(gè) “類”
- 類,python 編程的術(shù)語,面向?qū)ο缶幊痰幕締卧?/li>
<br />
<a name="KHSXk"></a>
測試工具的選擇
- JMeter:線性工具,不用分層,一個(gè)人做所有
- Postman:比 JMeter 還線性,一個(gè)人做所有
- Python:
- 可以線性
- 也可以分層
- 關(guān)鍵點(diǎn):是否做業(yè)務(wù)類(抽離業(yè)務(wù)類)
<br />
<a name="iWzn3"></a>
Python 的自動(dòng)化測試方案
- 線性
- 寫多少個(gè) Python 的文件(*.py)
- 有沒有涉及到“類”
- 有沒有涉及到測試:脫離目測對(duì)比,程序沒有直接告訴結(jié)果
- 有沒有在文件中寫 “方法”
- 有沒有編寫 非 Python 的文件
- 每個(gè)文件分別是什么
- 要如何執(zhí)行來看測試結(jié)果
- 分層
- 一定寫了“業(yè)務(wù)類”或者“業(yè)務(wù)模塊”(沒有用面向?qū)ο螅昧嗣嫦蜻^程)
- 直接執(zhí)行測試的數(shù)據(jù)是哪些文件?
- 數(shù)據(jù)本身是關(guān)系型(一行一行的表格)?還是借助了“鍵值對(duì)”的方式?
- 數(shù)據(jù)是如何使用的?不要用代碼來描述
- 數(shù)據(jù)的使用是如何在用例腳本中實(shí)現(xiàn)的?
- 用例腳本是否用到了“類”
- 用例腳本如果用到了“類”,是否是直接寫的類,還是集成了別的“類”
- 如果用例腳本需要繼承“類”,被繼承的類是如何設(shè)計(jì)的(可以用類圖表示),也可以直接描述。
- 用例腳本本身如果是個(gè)類,這個(gè)類是如何設(shè)計(jì)的(可以用類圖表示),也可以直接描述。
- 如果用例腳本不是個(gè)類,那么“方法”是如何設(shè)計(jì)的,有哪些方法,分別是什么用?
- 用例腳本中需要調(diào)用的場景方法是怎么樣設(shè)計(jì)的,輸入?yún)?shù)、輸出返回值?
- 用例腳本中需要調(diào)用的核心方法是哪些?
- 從以下開始是高級(jí)水平:
- 場景方法的步驟有哪些,具體的步驟描述
- 場景方法顯然用到了業(yè)務(wù)類,業(yè)務(wù)類是否需要繼承?
- 如果業(yè)務(wù)類需要繼承別的“類”,請(qǐng)?jiān)O(shè)計(jì)這個(gè)或者這些被繼承的“類”(類圖或者描述)
- 業(yè)務(wù)類本身要有什么設(shè)計(jì)(類圖或者描述)
- 業(yè)務(wù)類本身是否需要?jiǎng)e的類做支持,非繼承方式的支持,而是調(diào)用(實(shí)例化)等支持,具體有哪些?
- HTTP 的請(qǐng)求究竟是怎么發(fā)出去的?描述數(shù)據(jù)輸入到 Python 的第三方庫的使用
- HTTP 的響應(yīng)在 Python 的第三方庫中,是什么樣的結(jié)構(gòu)(類,或者普通結(jié)構(gòu) list、dict等)
- 如何需要把第三方庫進(jìn)行一個(gè)封裝,請(qǐng)?jiān)O(shè)計(jì)一個(gè)封裝后的類(類圖或者描述)
<a name="gISES"></a>
Python 接口自動(dòng)化測試的代碼實(shí)現(xiàn)
- 線性
- 分層
- 對(duì)象:Ping++的真實(shí)的接口
- 支付對(duì)象的創(chuàng)建
- 支付對(duì)象的撤銷
- 支付對(duì)象的查詢
- 支付對(duì)象的列表
- 用戶
- 新注冊(cè)的(已簽約的試用版用戶)
- 未簽約的無限次使用的用戶,需要RSA私鑰
- 賬號(hào):liutingli@cdtest.pro
- 密碼:Welcome123!
- 開發(fā)密鑰:sk_test_CGmn58bPGizDqvDCeTCK8Oi5
- RSA私鑰:
-----BEGIN PUBLIC KEY-----<br />MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4JmKJNk4w6qpV/vNF0HC<br />Eyg55CPoniRlRUKyKHuc9FXS1ckNo3gLONVJXT9i54+GB3bZWX0KXFvlMbXAKwUd<br />wdIIZcifRqpGDhJopMosCFpGXz+trnq8hWaJvlgzx4v+mAbDuy+r1Y1FEex9hPUN<br />zP0zTy86jyu+ZTmwJXJQZVbuNxvMC7tooGAVtiIRqJK5hygcXd4BFLR+igLkzMnG<br />9NGkg3Xsc2hLqpAwpUauXQdAvz7Rgfe9cEKfN2W+mvXA6DRcCS58qrjzmJw4WOZJ<br />M1cARi9iCdZy5wehIAJ4oHIA3R2lj+IFoyB9UQTgNmKK6bCNZn8+ZsjakfbGL/k7<br />8QIDAQAB<br />-----END PUBLIC KEY-----
- 請(qǐng)求次數(shù):500/月
- APP_ID: app_rPejT898avPSnDaL
- 未簽約的無限次試用的用戶,不需要RSA私鑰(可以用Postman來測試)
- 賬號(hào):liu.tingli@qq.com
- 密碼:
- 舊的密鑰(無效):sk_test_aX50eTPuPaH8fzXDaTWzvnr1
- 新的密鑰(有效):sk_test_5mvfXDq9G0C8vrrrjH8aXvXH
- RSA私鑰:無需提供
- 請(qǐng)求次數(shù):無限
- APP_ID:app_HGafHSLyDm9KT0OO
- 管理平臺(tái):[https://dashboard2.pingxx.com/app/app_HGafHSLyDm9KT0OO/app-overview](https://dashboard2.pingxx.com/app/app_HGafHSLyDm9KT0OO/app-overview)