p3试机号彩吧助手 ?
實驗:利用Requests庫完成“蝸牛進銷存”的新增會員與測試
作者:強官濤   類型:Python開發    類別:實驗   日期:2019-03-12    閱讀:894 次   消耗積分:0 分


注:本節教材內容,與上兩期推送的《教材連載:蝸牛進銷存項目實戰(一)》、《

教材連載:利用Requests庫完成“蝸牛進銷存”的登錄功能為一個項目實戰內容。
回顧上節內容,請點擊

教材連載:蝸牛進銷存項目實戰(一)
教材連載:利用Requests庫完成“蝸牛進銷存”的登錄功能


利用Requests庫新增會員


1.發送請求


下圖是新增會員的功能,填寫正確的字段后即可新增成功。


20190313_145506_617.png


通過對該請求的分析,我們依然構造正文,并發送新增的POST請求。

import requests

# 構造請求正文

addData = {'customername':'小蝸牛','customerphone':'13500000000','childsex':'女','childdate':'2018-05-18','creditkids':'100','creditcloth':'200'}

# 發送請求

r = requests.post("http://localhost:8080/WoniuSales/customer/add",addData)

# 輸出響應正文

print(r.text)


結果并不如我們所料,返回的是一個錯誤的頁面,并且通過頁面的查詢也沒有出現新增的會員“小蝸牛”,這里的代碼和登錄的POST請求一樣,為什么不能達到類似的效果?

<html><head><title>500 Internal Server Error</title></head><body bgcolor='white'><center><h1>500 Internal Server Error</h1></center><hr><center><a href='http://www.jfinal.com?f=ev-3.2' target='_blank'><b>Powered by JFinal 3.2</b></a></center></body></html>


2.定制請求頭cookie


回顧前面的內容,Http協議是一種無連接無狀態的協議,當用戶處理登錄狀態時我們才可以進行后續的操作,那通過協議的角度,這里我們并沒有保持登錄的狀態,所以添加上對應的cookie值即可。


import requests

# 定制cookie

cookie = {'Cookie':'JSESSIONID=8C61635F9F68E2E068F627A4927494BA'}

# 構造請求正文

addData = {'customername':'小蝸牛','customerphone':'13500000000','childsex':'女','childdate':'2018-05-18','creditkids':'100','creditcloth':'200'}

# 發送請求

r = requests.post("http://localhost:8080/WoniuSales/customer/add",addData)

# 輸出響應正文

print(r.text)


運行結果正確。

add-successful


需要注意的是,這里的cookie值由于是我們已經預先在瀏覽器上進行了登錄,直接復制了一個有效的cookie值來使用,所以能夠正常操作成功,但實際情況是,我們不可能每次都預先登錄好,再來編寫Python程序,這顯然是不科學的。

 

3.實時獲取cookie


由于cookie值在登錄后才有效,所以我們的思路是:對系統先進行登錄,再從登錄的響應里獲取到cookie,并將此cookie保存下來,供其他請求使用,代碼如下。

import requests

# 獲取登錄后的響應

loginData = {'username':'boss','password':'boss123','verifycode':'1111'}

loginRes = requests.post("http://localhost:8080/WoniuSales/user/login",data=loginData)

# 構造請求正文

addData = {'customername':'小蝸牛02','customerphone':'13200000000','childsex':'女','childdate':'2018-05-18','creditkids':'100','creditcloth':'200'}

# 發送請求,重點是添加cookies參數

addRes = requests.post("http://localhost:8080/WoniuSales/customer/add",data=addData,cookies=loginRes.cookies)

print(addRes.text)


這里的重點是:登錄過后獲取到的響應是loginRes,再將此響應的cookies值作為post請求的參數發送到服務器,服務器經過校驗,確認此cookie有效,則新增成功。同樣的,我們也可以通過會員管理的查詢功能查看到“小蝸牛02”已新增成功。這樣一來,當我們進行測試時,不用每次都去手工復制cookie的值,整個程序的流程更加通暢。


利用Requests庫對新增會員進行測試


前面的工作已經讓我們可以正常的發送請求,這也為接下來的測試打下了良好的基礎。有的讀者在疑惑:難道前面做了這么多工作還沒有開始測試?不要忘了,測試最重要的一個步驟,對結果進行斷言,雖然我們可以利用肉眼來觀察結果進而得出結論,但自動化最主要的目的之一就是為了解放人力,這顯然是與其相悖的。


1.理解接口文檔


在實際項目中,設計一個接口之前,需要經過討論確定接口的規格,以便于后續的團隊協作,開發人員會基于此文檔去編寫接口,測試人員也將其作為接口測試的重要依據。所以接口文檔對測試人員來說非常重要,也可視為接口測試的測試需求。下面我們將展示會員管理的接口文檔。


接口名稱

會員管理新增接口

URL地址

http://localhost:8080/WoniuSales/customer/add

調用方式

POST

傳入參數

customername:必填,會員姓名,長度為1-20個字符之間。

customerphone:必填,會員手機,不能重復,純數字,長度需為11位。

childsex:必填,會員性別,只允許“男”或“女”。

childdate:必填,會員生日,為年月日格式:xxxx-xx-xx。

creditkids:非必填,母嬰積分,純數字默認為0。

creditcloth:非必填,童裝積分,純數字默認為0。

返回響應

add-successful:添加成功。

already-added:重復添加。

add-failed:添加失敗。


2.設計接口測試用例


根據接口測試文檔,利用常規的等價類邊界值等設計方法,很容易設計出以下一些測試用例。


20190827_115247_350.jpg


當然實際情況下設計的用例遠遠不止這些,我們還有很多的測試點需要去覆蓋到,僅僅是一個手機號還包括長度、是否純數字等驗證。由于用例設計并不是本節的重點且篇幅所限,這里僅僅列出一小部分,余下的請讀者自行補充。


另外需要注意的是,這里的驗證點有兩個:

(1) 狀態碼,表示服務器對該請求是否正確回應。

(2) 響應正文,服務器返回的響應內容是否符合我們的預期。

上面的兩個方面是完全不同的兩回事,比如我們讓一位同學回答問題,他正常回應我了,這是狀態碼,但他的答案正不正確,這是響應正文。初學時往往將這兩者混淆,要注意分別理解。


3.開始測試


正式設計測試代碼之前,我們先思考幾個問題,通過對這幾個問題的解答,更有助于理清思路。


(1) 會員新增的功能執行都需要借助cookie,所以我們應該封裝一個函數getCookie()來進行處理,減少代碼的冗余度。

(2) 每次測試發送的請求都是調用Requests的相關方法,核心本質一樣,不同的只是請求的數據和斷言的驗證碼與響應正文而已,所以我們同樣封裝一個函數testAdd(),并且設計好其形參。

(3) 斷言的時候需要同時滿足驗證碼與響應正文都一致才通過。


import requests

# 獲取cookie

def getCookie():

    loginData = {'username':'boss','password':'boss123','verifycode':'1111'}

    loginRes = requests.post("http://localhost:8080/WoniuSales/user/login",data=loginData)

    return loginRes.cookies

# 發送post請求

def testAdd(data, expectedCode, expectedRes):

    cookies = getCookie()

    # 發送請求,重點是添加cookies參數

    addRes = requests.post("http://localhost:8080/WoniuSales/customer/add",data=data, cookies=cookies)

    # 對響應碼和響應正文斷言

    print('############# 開始測試 ###############')

    if expectedCode == addRes.status_code and expectedRes == addRes.text:

        print("測試用例通過!")

    else:

        print('測試用例失敗!')

        print("狀態碼:" + "預期 - " + str(expectedCode) + ",實際 - " + str(addRes.status_code))

        print("響應:" + "預期 - " + expectedRes + ",實際 - " + addRes.text)

    print('############# 結束測試 ###############')


上面的代碼分別實現了獲取cookie和測試執行的功能,即兩個函數,后續我們只需要設計不同的測試數據、預期的響應碼、預期的響應正文即可。這里只簡單列出三條測試用例,方便觀察結果。


# 測試用例:所有參數正確

d = {'customername':'張明明','customerphone':'13300000000','childsex':'男','childdate':'2016-04-09','creditkids':'100','creditcloth':'200'}

expCode = 200

expRes = 'add-successful'

testAdd(d,expCode,expRes)

# 測試用例:缺少姓名

d = {'customerphone':'13300000003','childsex':'男','childdate':'2016-04-09','creditkids':'100','creditcloth':'200'}

expCode = 200

expRes = 'add-failed'

testAdd(d,expCode,expRes)

# 測試用例:手機號重復

d = {'customername':'王雪琳','customerphone':'13300000000','childsex':'女','childdate':'2012-11-14','creditkids':'10','creditcloth':'200'}

expCode = 200

expRes = 'already-added'

testAdd(d,expCode,expRes)


運行結果如下。如果系統沒有問題,那么應該三條測試用例均通過,但實際情況是第二條測試用例失敗,原因已經輸出,我們預期狀態碼是200,但實際情況返回的狀態碼是500,說明請求沒有得到服務器正常的回應,與需求文檔不符合,那么我們應該認為這是一個Bug并反饋給開發人員進行修復。


############# 開始測試 ###############

測試用例通過!

############# 結束測試 ###############

############# 開始測試 ###############

測試用例失敗!

狀態碼:預期 – 200,實際 - 500

響應:預期 - add-failed,實際 - <html><head><title>500 Internal Server Error</title></head><body bgcolor='white'><center><h1>500 Internal Server Error</h1></center><hr><center><a href='http://www.jfinal.com?f=ev-3.2' target='_blank'><b>Powered by JFinal 3.2</b></a></center></body></html>

############# 結束測試 ###############

############# 開始測試 ###############

測試用例通過!

############# 結束測試 ###############



接下來一周會陸續推送進銷存項目實戰的其他內容:

(四)接口測試框架整合。




為了答謝大家對蝸牛學院的支持,蝸牛學院將會定期對大家免費發放干貨,敬請關注蝸牛學院的官方微信。

20190313_145600_397.jpg






版權所有,轉載本站文章請注明出處:蝸牛學院在線課堂, http://www.ozqapw.tw/note/274
上一篇: 漫談:一位學員的自述:從6K到12.7K,我到底經歷了什么?
下一篇: 訪談:早春三月,蝸牛學院又開新班啦~
提示:登錄后添加有效評論可享受積分哦!
p3试机号彩吧助手 雪缘网即时比分直播 南京按摩哪里便宜 188比分集团 江苏时时彩 福州按摩全套哪里最好 雪缘园足球即时赛果 日本av女优名字图片全接触 广西双彩24选7的走势图 刺激的a片 棒球比分直播雪缘园 大乐透 2级黄色片 江西麻将下载安装 同花易配 安卓街机麻将官网 淑女派对