工作中都有哪些让你心累的时刻

想要看更加舒服的排版、更加准时的推送
关注公众号“不太灵光的程序员”
每日八点有干货推送

不是给你讲过么?文档里都有的自己去看好了呀;这个我不清楚的,你去查某某。工作中大家有没有经常遇到这样的场景。

有多少问题是缺乏沟通导致的??

今天测试因为一个屁大点的问题在研发和数据之间查了好久,问题的其实就是因为彼此不知道对方对数据做了什么?

部门大了各自做的模块又比较独立,很多时候都是各自的单元测试完成,就发布了,一般的需求我们也是这样,因为测试是需要排档期的,先简单介绍一下出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么,第一次问的时候咋就不说有这种特殊操作嘛。还是在多招几个测试靠谱。

啥也不说了,下次刚他。

推荐阅读:

猜你喜欢

转载自blog.csdn.net/qq_23934063/article/details/106935832