HTTP 接口自動(dòng)化測(cè)試方案
<a name="toQ8V"></a>
測(cè)試人員的角色
- 手工測(cè)試人員
- 執(zhí)行
- 讀懂測(cè)試用例
- 明白業(yè)務(wù)邏輯
- 準(zhǔn)備測(cè)試數(shù)據(jù)
- 比較執(zhí)行結(jié)果
- 持續(xù)執(zhí)行
- 選擇持續(xù)集成的工具
- 讓測(cè)試定時(shí)執(zhí)行
- 關(guān)注點(diǎn):數(shù)據(jù)和對(duì)比
- 執(zhí)行
- 中高級(jí)自動(dòng)化測(cè)試人員
- 編寫(xiě)測(cè)試腳本
-
腳本都是線性的
- 編寫(xiě) JMeter 測(cè)試腳本
- 線性的
- 準(zhǔn)備數(shù)據(jù)
- 請(qǐng)求接口
- 解析響應(yīng)
- 進(jìn)行斷言
- 查看結(jié)果
- 編寫(xiě) Postman 測(cè)試腳本
- 線性的
- 準(zhǔn)備數(shù)據(jù)
- 請(qǐng)求接口
- 解析響應(yīng)
- 進(jìn)行斷言
- 查看結(jié)果
- 編寫(xiě) Python 測(cè)試腳本
- 有測(cè)試的概念
- 代碼可以直接告訴你:結(jié)果
- 需要用“單元測(cè)試框架”或者 BDD(behavior driven development) 測(cè)試框架
- 后者,沒(méi)有人用 Python 做 BDD,大部分用的 Java 的 Cucumber
- 只考慮前者。
- 只考慮 Python
- 選擇有兩個(gè):pytest 和 unittest
- unittest:安裝完 Python,就自帶了
- pytest:安裝完 Python贮缕,沒(méi)有帶,需要 pip install pytest 才能有
- 優(yōu)勢(shì):參數(shù)化,報(bào)告好看
- 單元測(cè)試框架帶來(lái)的好處
- 斷言:讓程序去判斷是不是通過(guò)胆胰,并且告訴執(zhí)行者
- 無(wú)測(cè)試的概念
- 用 Python 去執(zhí)行 HTTP 請(qǐng)求
- 用 目測(cè) HTTP 響應(yīng)的結(jié)果
- 栗子
-
代碼
- 什么叫做無(wú)測(cè)試?代碼不會(huì)告訴你 “PASS”或者 “FAIL”刻获,必須目測(cè)
- 看控制臺(tái)的輸出
- 通過(guò)抓取通信蜀涨,看通信的內(nèi)容
- 有測(cè)試的概念
-
腳本都是線性的
- 【抽離業(yè)務(wù)】編寫(xiě)業(yè)務(wù)代碼
-
適用于:有測(cè)試分層的概念的方案
-
分層
- 測(cè)試腳本有調(diào)用,并不是所有的工作都在這一個(gè)腳本中完成
- 主要:場(chǎng)景方法:構(gòu)建請(qǐng)求蝎毡,解析響應(yīng)(相當(dāng)于在手工界面測(cè)試的:輸入數(shù)據(jù)和點(diǎn)擊提交)
- 次要:核心方法:做支持的厚柳,讀文件(CSV,Excel沐兵,Json别垮,Yaml……),字符處理
- 測(cè)試腳本有調(diào)用,并不是所有的工作都在這一個(gè)腳本中完成
- 場(chǎng)景方法
- 依靠 業(yè)務(wù)類(lèi)
- 連接 測(cè)試腳本 和 業(yè)務(wù)類(lèi)
- 中間層扎谎,方便測(cè)試腳本的使用碳想,降低使用難度烧董,提高效率,節(jié)省時(shí)間
- 栗子
- 教會(huì)10個(gè)手工測(cè)試/初級(jí)自動(dòng)化測(cè)試:在測(cè)試腳本使用業(yè)務(wù)類(lèi):5 天
- 教會(huì)10個(gè)手工測(cè)試/初級(jí)自動(dòng)化測(cè)試:在測(cè)試腳本使用場(chǎng)景方法:1 + 1 天
- 栗子
- 寫(xiě) 業(yè)務(wù)類(lèi) 的人移袍,來(lái)寫(xiě)場(chǎng)景方法
- 業(yè)務(wù)類(lèi)
- 構(gòu)建請(qǐng)求
- 解析響應(yīng)
- 具體的實(shí)現(xiàn)解藻,交給“核心層”來(lái)做
-
適用于:有測(cè)試分層的概念的方案
- 關(guān)注的點(diǎn):業(yè)務(wù),業(yè)務(wù)邏輯葡盗,是功能本身
- 編寫(xiě)測(cè)試腳本
- 測(cè)試開(kāi)發(fā)/高級(jí)自動(dòng)化測(cè)試人員
- 負(fù)責(zé)“核心層”
- 真正的操作“核心工具”的人
- 在 Python 中螟左,核心工具 = 各種第三方庫(kù)
- 庫(kù) = 無(wú)數(shù)個(gè) “類(lèi)”
- 類(lèi),python 編程的術(shù)語(yǔ)觅够,面向?qū)ο缶幊痰幕締卧?/li>
<br />
<a name="KHSXk"></a>
測(cè)試工具的選擇
- JMeter:線性工具胶背,不用分層,一個(gè)人做所有
- Postman:比 JMeter 還線性喘先,一個(gè)人做所有
- Python:
- 可以線性
- 也可以分層
- 關(guān)鍵點(diǎn):是否做業(yè)務(wù)類(lèi)(抽離業(yè)務(wù)類(lèi))
<br />
<a name="iWzn3"></a>
Python 的自動(dòng)化測(cè)試方案
- 線性
- 寫(xiě)多少個(gè) Python 的文件(*.py)
- 有沒(méi)有涉及到“類(lèi)”
- 有沒(méi)有涉及到測(cè)試:脫離目測(cè)對(duì)比钳吟,程序沒(méi)有直接告訴結(jié)果
- 有沒(méi)有在文件中寫(xiě) “方法”
- 有沒(méi)有編寫(xiě) 非 Python 的文件
- 每個(gè)文件分別是什么
- 要如何執(zhí)行來(lái)看測(cè)試結(jié)果
- 分層
- 一定寫(xiě)了“業(yè)務(wù)類(lèi)”或者“業(yè)務(wù)模塊”(沒(méi)有用面向?qū)ο螅昧嗣嫦蜻^(guò)程)
- 直接執(zhí)行測(cè)試的數(shù)據(jù)是哪些文件窘拯?
- 數(shù)據(jù)本身是關(guān)系型(一行一行的表格)红且?還是借助了“鍵值對(duì)”的方式?
- 數(shù)據(jù)是如何使用的涤姊?不要用代碼來(lái)描述
- 數(shù)據(jù)的使用是如何在用例腳本中實(shí)現(xiàn)的暇番?
- 用例腳本是否用到了“類(lèi)”
- 用例腳本如果用到了“類(lèi)”,是否是直接寫(xiě)的類(lèi)思喊,還是集成了別的“類(lèi)”
- 如果用例腳本需要繼承“類(lèi)”壁酬,被繼承的類(lèi)是如何設(shè)計(jì)的(可以用類(lèi)圖表示),也可以直接描述恨课。
- 用例腳本本身如果是個(gè)類(lèi)舆乔,這個(gè)類(lèi)是如何設(shè)計(jì)的(可以用類(lèi)圖表示),也可以直接描述剂公。
- 如果用例腳本不是個(gè)類(lèi)希俩,那么“方法”是如何設(shè)計(jì)的,有哪些方法诬留,分別是什么用斜纪?
- 用例腳本中需要調(diào)用的場(chǎng)景方法是怎么樣設(shè)計(jì)的,輸入?yún)?shù)文兑、輸出返回值?
- 用例腳本中需要調(diào)用的核心方法是哪些腺劣?
- 從以下開(kāi)始是高級(jí)水平:
- 場(chǎng)景方法的步驟有哪些绿贞,具體的步驟描述
- 場(chǎng)景方法顯然用到了業(yè)務(wù)類(lèi),業(yè)務(wù)類(lèi)是否需要繼承橘原?
- 如果業(yè)務(wù)類(lèi)需要繼承別的“類(lèi)”籍铁,請(qǐng)?jiān)O(shè)計(jì)這個(gè)或者這些被繼承的“類(lèi)”(類(lèi)圖或者描述)
- 業(yè)務(wù)類(lèi)本身要有什么設(shè)計(jì)(類(lèi)圖或者描述)
- 業(yè)務(wù)類(lèi)本身是否需要?jiǎng)e的類(lèi)做支持涡上,非繼承方式的支持,而是調(diào)用(實(shí)例化)等支持拒名,具體有哪些吩愧?
- HTTP 的請(qǐng)求究竟是怎么發(fā)出去的?描述數(shù)據(jù)輸入到 Python 的第三方庫(kù)的使用
- HTTP 的響應(yīng)在 Python 的第三方庫(kù)中增显,是什么樣的結(jié)構(gòu)(類(lèi)雁佳,或者普通結(jié)構(gòu) list、dict等)
- 如何需要把第三方庫(kù)進(jìn)行一個(gè)封裝同云,請(qǐng)?jiān)O(shè)計(jì)一個(gè)封裝后的類(lèi)(類(lèi)圖或者描述)
<a name="gISES"></a>
Python 接口自動(dòng)化測(cè)試的代碼實(shí)現(xiàn)
- 線性
- 分層
- 對(duì)象:Ping++的真實(shí)的接口
- 支付對(duì)象的創(chuàng)建
- 支付對(duì)象的撤銷(xiāo)
- 支付對(duì)象的查詢(xún)
- 支付對(duì)象的列表
- 用戶(hù)
- 新注冊(cè)的(已簽約的試用版用戶(hù))
- 未簽約的無(wú)限次使用的用戶(hù)糖权,需要RSA私鑰
- 賬號(hào):liutingli@cdtest.pro
- 密碼:Welcome123!
- 開(kāi)發(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
- 未簽約的無(wú)限次試用的用戶(hù),不需要RSA私鑰(可以用Postman來(lái)測(cè)試)
- 賬號(hào):liu.tingli@qq.com
- 密碼:
- 舊的密鑰(無(wú)效):sk_test_aX50eTPuPaH8fzXDaTWzvnr1
- 新的密鑰(有效):sk_test_5mvfXDq9G0C8vrrrjH8aXvXH
- RSA私鑰:無(wú)需提供
- 請(qǐng)求次數(shù):無(wú)限
- APP_ID:app_HGafHSLyDm9KT0OO
- 管理平臺(tái):[https://dashboard2.pingxx.com/app/app_HGafHSLyDm9KT0OO/app-overview](https://dashboard2.pingxx.com/app/app_HGafHSLyDm9KT0OO/app-overview)