测试中的数据统计分析的验证:python脚本+复杂SQL总结

正式从PHP开发转到测试岗位已有1年半,中间的职业发展与所思所考应该有1个阶段的总结,总结将在下一篇完成。今天就先通过在工作中实际用到的python脚本+复杂sql记录一下自己在测试过程中做的数据验证。

测试中经常会遇到一些数据报表,数据统计的分析,这部分的测试重点在于数据统计的正确性,如何验证数据的正确性,操作中大概分为以下几个阶段:

  1. 初级阶段:了解需求,手动准备数据。根据需求手动生成一部分数据,记录生成数据的控制条件,验证不同条件下生成的数据是否与数据统计一致。
  2. 中级阶段:使用大量数据做数据验证。初级阶段的数据量太少,很多隐藏问题往往不容易发现,需要大量数据时,手动准备数据是不现实的,这时候应该向研发人员了解数据生成逻辑,使用python脚本伪造大量数据,最后SQL进行数据统计对比研发测数据统计的正确性。

初级阶段,是每个测试人员的必备功课,也是测试人员测试过程中的主要工作,只要需求理解到位,就可以完成。中级阶段需要一些python编程基础及SQL编写能力。数据统计分析中,各种条件控制下的统计往往需要测试人员有编写复杂SQL语句的能力。

python脚本生成大量数据,不仅需要了解需求也需要了解具体的表结构,才能为后续SQL编写查询做好基础准备工作。这主要涉及编程能力,由于本人是开发转测试,所以目前脚本都是在随用随学随写,基本就是接口调用,数据库连接,数据的增删改查工作,后续做数据统计分析也可以结合使用ECharts图表,但是仅是为了做数据的验证,再做页面的图表展示实在没有必要,所以一条SQL往往能解决很多问题。

虽然测试的方法千千万,内卷也是日益严重,但是验收交付中反馈的问题越少,才越能体现出一个测试人员的真实水平,靠谱是第一位的。

编写SQL中总结一下个人常用到的一些函数及方法,这里以MySQL为例:

  • GROUP BY 不对值为NULL的分组

下面是对一个新老客的数据分析,表中uid=null的为新客,后续相同uid记录数=1的标识为新客,相同uid记录数>1的标识为老客。如果只是通过GROUP BY uid,就会将所有uid=null的记录分为一组,这时uid=null的记录会被标记为老客,与需求不符。

有些博主会使用GROUP BY IFNULL(uid, UUID()),我实际运行了一下发现此种场景下UUID()生成的值相等,依然不符合需求统计,不知道是不是我的用法有误,有知道的大神可以给与指点。

SELECT Id,uid,
CASE WHEN COUNT(Id)=1 THEN 'new'
WHEN COUNT(Id)>1 THEN 'old'
END `status`
FROM table_name
WHERE DATE_FORMAT(create_date,'%Y-%m-%d')='2022-04-19' -- 时间格式的控制
GROUP BY IFNULL(uid,Id)) --有些博主使用IFNULL(uid,UUID())),但在实际应用中我发现这样使用UUID()生成的值是相同的,依然不能满足需求判断
  • 根据不同条件对数据进行整合

下面是根据素材类型,统计素材的展示时长。图片类型默认展示5s,视频素材根据素材的时长进行数据统计。不同的数据拥有不同的素材类型,需要统计所有数据下素材的展示时长。

select SUM(
IF(SUBSTRING_INDEX(dsm.material_mime,'/',1)='image',dap.count*5,
(IF(SUBSTRING_INDEX(dsm.material_mime,'/',1)='video',dap.count*dsm.show_time,0))
)) from table_name1 dap 
inner join table_name2 dsm on dsm.schedule_id = dap.schedule_id
where dap.ad_position IN('free1','free2','free3','free4')
AND dap.opt_time between '2021-12-01 00:00:00' and '2021-12-01 23:59:59' 

你可能感兴趣的:(mysql,测试开发,python,数据分析,SQL)