1. 程式人生 > >測試開發系列之Python開發mock接口(三)

測試開發系列之Python開發mock接口(三)

有一個 cep 內置 stat 遊標 tab lB 端口號 HERE

於進入主題了,前面的準備工作都已經做好了,下面就開始寫邏輯的代碼了,代碼我已經寫好了,每行都加了註釋,不明白的可以留言。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 #api.py from flask import Flask ,jsonify,request import sqlite3 #因為有些異常情況的時候需要提示異常信息,所以咱們需要事先定義一些錯誤信息,以及錯誤碼 #請求方式錯誤 method_err = { "code":301, "msg":"請求方式不正確,只支持post請求" } #參數錯誤 param_err = { "code":302, "msg":"請求參數錯誤,請檢查入參" } #余額不足 money_err = { "code":303, "msg":"賬戶余額不足"
} #價格錯誤 price_err = { "code":304, "msg":"價格不合法" } #用戶不存在 user_err = { "code":305, "msg":"該用戶不存在" } #成功的信息 success_msg = { "code":200, "msg":"支付成功" } #數據庫異常 db_err = { "code":306, "msg":"數據庫錯誤" } #導入我們需要用到的模塊,Flask是用來創建我們寫的這個接口的服務 #jsonify是用來序列化json的,因為http_api接口都是返回的json串
#request是用來獲取調用接口的時候傳入的數據,這幾個模塊都是falsk裏面的 app = Flask(__name__) #這個是初始化一個服務,__name__代表是咱們寫的這個python文件, #也就是咱們這個python文件就是一個服務了,然後賦值給app,app就代表這個服務了 app.config[‘JSON_AS_ASCII‘] = False #支付的時候,傳入金額,金額可能有小數類型的,也可能有整數類型的 #因為python裏面沒有一個內置的方法去判斷字符串是不是小數,所有下面自己寫了 #一個方法去校驗是否為正小數 def check_float(string): str1 = str(string) if str1.count(‘.‘) > 1: # 判斷小數點是不是大於1 return False elif str1.count(‘-‘) > 0: # 判斷負號的個數,如果大於0就是非法的 return False elif str1.isdigit(): return False # 判斷是不是整數 else: new_str = str1.split(‘.‘) # 按小數點分割字符 frist_num = new_str[0] # 取分割完之後這個list的第一個元素 if frist_num.isdigit() and new_str[1].isdigit(): # 如果小數點兩邊都是整數的話,那麽就是一個小數 return True else: return False #因後面要經常操作數據,咱們就寫一個函數專門來操作數據庫 def op_db(sql): db = sqlite3.connect(r‘C:\Users\admin\Desktop\my.db‘) # 指定數據庫 course = db.cursor() # 創建遊標 try:#捕捉異常,如果有sql寫的不對就返回異常 course.execute(sql) # 執行sql except sqlite3.Error as e: #出異常了就返回錯誤信息 return False else: res = course.fetchone() #獲取查詢結果 db.commit() return res #返回數據 finally: #不管出沒出異常都關閉數據庫 course.close() db.rollback()#回滾 db.close() def check_balance(user_id, price): select_sql = ‘select money from accounts where user_id = %s;‘%user_id data = op_db(select_sql) # 獲取sql執行的結果 if data: # 如果返回的數據不是空的話 if not data: #not就是取反的意思,如果返回False的話,就是真了,就說明出錯了,返回數據庫錯誤 return db_err else: # 如果select有結果的話,就獲取到這個用戶的賬號信息 money = data[0]#數據庫獲取到的結果是一個元組,就一個元素就是價格 if money >= price: # 如果賬戶余額大於等於價格的話,修改價格 target_money = money - price #更新余額的sql update_sql = ‘update accounts set money = %s where user_id = %s;‘%(target_money,user_id) op_db(update_sql) # 更新余額 return success_msg # 返回成功信息 else: # 如果余額不足的話,返回余額錯誤信息 return money_err else: # 如果數據是空,就是用戶信息獲取不到 return user_err #這個是給咱們剛才創建的服務加一個路由,也就是指定這個接口的訪問url, # 支持什麽請求方式,get或者post請求,route方法第一個參數就是訪問的路徑, # methods是支持哪種類型的請求,route方法是一個裝飾器,必須寫在業務邏輯的函數上面 @app.route(‘/pay‘,methods=[‘POST‘,‘GET‘]) def pay(): #def pay()就是定義一個函數,這個函數裏面寫的就是接口的業務邏輯了 if request.method != ‘POST‘:#如果不是post請求的話,返回請求類型錯誤 return jsonify(method_err) #return 就返回數據了,jsonify就是把python裏面的數據類型(字典、list)轉成json串 else: user_id = request.values.get(‘user_id‘) #使用request.values.get獲取到傳入的參數,user_id price = request.values.get(‘price‘) #獲取到支付的價格 if user_id and price: #判斷兩個入參是否都傳了,user_id和price if price.isdigit():#如果價格是整數的話 price = int(price) #接收過來的入參是字符串類型的,所以要轉成int類型的,才可以加減 elif check_float(price): #這裏調用了一個函數,在上面定義了,是校驗傳入的價格是不是小數的 price = float(price) else:#如果不是整數也不是小數,返回價格錯誤 return jsonify(param_err) #上面都校驗通過之後,數據就是合法的,就得扣錢了,那就是操作數據庫 #再寫一個函數專門用來扣錢 res = check_balance(user_id,price)#調用檢查余額函數 return jsonify(res)#返回結果 else:#如果name或者價格獲取不到的話,返回參數錯誤 return jsonify(param_err) if __name__==‘__main__‘: app.run(debug=True)#運行程序,debug的意思是調試模式運行,可以看到請求,默認端口號是5000,可以使用port參數指定端 口號 #運行完之後會顯示這樣的 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) * Restarting with stat * Debugger is active!

ok,代碼就是上面的,每個單獨的功能都拆分出來做了單獨的函數來工作,這樣代碼就不會顯得比較亂了。

下面咱們來測試一下,看看有沒有bug

先來個正常的通過性測試:

技術分享圖片

再來倆異常驗證,一個價格錯誤的,一個用戶不存在的。

技術分享圖片

技術分享圖片

大功告成,都驗證通過了,當然還有很多沒有驗證,留著大家動動手吧。

測試開發系列之Python開發mock接口(三)