工作中都有哪些讓你心累的時刻

想要看更加舒服的排版、更加準時的推送
關注公衆號“不太靈光的程序員”
每日八點有乾貨推送

不是給你講過麼?文檔裏都有的自己去看好了呀;這個我不清楚的,你去查某某。工作中大家有沒有經常遇到這樣的場景。

有多少問題是缺乏溝通導致的??

今天測試因爲一個屁大點的問題在研發和數據之間查了好久,問題的其實就是因爲彼此不知道對方對數據做了什麼?

部門大了各自做的模塊又比較獨立,很多時候都是各自的單元測試完成,就發佈了,一般的需求我們也是這樣,因爲測試是需要排檔期的,先簡單介紹一下出BUG的流程:

流程還是比較簡單的,操作有三種入口:
1、應用A->服務A->服務C->數據庫C
2、服務A->服務C->數據庫C
3、服務B->服務A->服務C->數據庫C

我做的是服務A,按理來說是所有入口的結果應該是一致的,但是流程2和3的結果就不一致了,流程3的計算結果是0。

服務A中出錯的變量是怎麼計算的呢?

總共就4行的代碼非要找出點哪不對了還真的有點難。就是從服務C獲取數據,把記錄中最新的一條有效數據(問題就在這個最新的一條)中的一個值取出來然後返回。
在這裏插入圖片描述

大概是這個樣子

def get_dyd(df):
    if df.empty:
        return -1
    else:
        df = df.sort_values(by='intime', ascending=False).reset_index()
        return df['amount'].iloc[0]

示例數據:

[{"intime": 1, "amount":100}, {"intime": 2, "amount":200}]

悲催起來真的是喝水都塞牙,今天還是上線大版本的時候,上週到今天測試環境,預發環境不停的進行變量驗證,穩定性測試的。剛發到生產就沒多久被檢查出錯誤了,單看代碼也看不出來個啥問題來,但是從過程日誌,到返回結果,全部反應的是計算服務出錯了,沒辦法先回退到上個版本吧。

沒想到回退後的結果還是不對,這會總該讓分析下情況了吧,首先異常結果是個0,代碼中空值是也返回的是-1呀,是不是在服務B調用服務A時做了什麼操作呢,再去交涉一下。

服務B:就是調用的服務A的結果,然後返回值入庫了。

作爲新人咱也不敢多說也不敢多問,走回去再查查。

可能就是語法理解的不好吧,再學習下pandas的取值的語法。

# 獲取第0行的數據
df.iloc[0]['amount']
# 獲取第0行的數據
df['amount'].iloc[0]
# 獲取index等於0的值,0不存在時拋出異常
df.loc[0]['amount']
# 獲取index等於0的值,0不存在時拋出異常
df['amount'].loc[0]
# 獲取index等於0的值,0不存在時拋出異常
df['amount'][0]

還有個ix的寫法與loc基本一致,但是在高版本中不支持了,就這麼看用iloc取數值是最靠譜的,更何況我還加了reset_index重置索引呢。

再做個單元測試,準備好材料再去證明下自己吧,真的不是我這裏報錯唉,再次去確認流程。

在查的都開始懷疑線上環境不一致的時候,發現出錯的結果插入時間和更新時間不一致,原來是流程3在計算變了之前在結果表中差了一條amount爲0的數據,在返回了計算結果過後進行更新。

嗶嗶嗶,添加的臨時數據就不能把active標識賦值成0麼,第一次問的時候咋就不說有這種特殊操作嘛。還是在多招幾個測試靠譜。

啥也不說了,下次剛他。

推薦閱讀:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章