首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >测试用例执行日志全链路收集-智能化测试结果分析关键技术之一

测试用例执行日志全链路收集-智能化测试结果分析关键技术之一

作者头像
Antony
发布2025-06-25 11:36:53
发布2025-06-25 11:36:53
1070
举报

自动化测试,尤其是大规模的自动化测试当中,测试结果的分析是一个非常重要的点。在过往的实践中也是非常吃人力资源的场景,大量的假失败(false failure)会把团队的节奏带下来,甚至最终拖垮团队。笔者也写过《2025第一篇-精准测试等基建的十五种变现场景》等文章,介绍了利用数字化+智能化手段来实现自动化测试执行结果的自动化、智能化分析。

了一下今年5月份QECon的ppt,至少有2个案例讲到了这个场景。

案例1

图片
图片
图片
图片
图片
图片
图片
图片

案例2 

图片
图片
图片
图片
图片
图片
图片
图片

测试用例的全链路日志收集 

 熟悉分布式系统的同学对于可观测平台使用traceID来获得全链路日志应该也是不陌生的。

https://microsoft.github.io/code-with-engineering-playbook/observability/microservices/

图片
图片

 如上图所示,通过可观测平台,可以将某个Http请求的全链路调用过程还原出来。 以下是笔者找到的一个案例,

图片
图片

来自于 https://blog.csdn.net/jushisi/article/details/106234597

 在测试用例执行结果分析的场景下,得到了某次请求的全链路调用日志是不完整的,还需要得到某个测试用例的完整执行日志,也就是需要将该用例的若干次HTTP请求的全链路日志全部都收集起来。

也就是将来自于同一个用例的若干个traceID整合起来作为一组,定义为某个用例的完整执行记录。

搞过精准测试等涉及到流量染色的读者可能已经想到了,一个比较直观的方案是将caseID作为可观测数据的一部分传递到服务端,如上图所示,可以在HTTP客户端指定TraceID格式为 CaseID+UUID。然后在可观测平台中,收集所有带有CaseID前缀的日志记录,作为该用例的服务端日志。

用例中带有用例执行的唯一标识

以 JUNIT5 为例,用测试用例的全限定类名#方法名#UUID批次号来作为CaseID,并通过HTTP请求的head透传到服务端。 塞入Head的部分就不介绍了,主要讲一下caseID生成的过程。

代码语言:javascript
复制
public class TestInfoExtension implements BeforeEachCallback, 
AfterEachCallback, BeforeAllCallback, AfterAllCallback {          

public static final ThreadLocalTEST_INFO_HOLDER = new ThreadLocal();          
    
public static final ThreadLocal BATCH_ID_HOLDER = new ThreadLocal();          
    
public TestInfoExtension() {        
    
}          
    
public void beforeAll(ExtensionContext context) throws Exception {          
        
String batchId = UUID.randomUUID().toString();          
        
BATCH_ID_HOLDER.set(batchId);          
    
}          
    
public void afterAll(ExtensionContext context) throws Exception {          
       
BATCH_ID_HOLDER.remove();        
}          
    
public void afterEach(ExtensionContext extensionContext) throws Exception {          
        
TEST_INFO_HOLDER.remove();          
    
}          
    
public void beforeEach(ExtensionContext extensionContext) throws Exception {          
        
String testClassName = extensionContext.getRequiredTestClass().getName()
;          
        
String testMethodName = extensionContext.getRequiredTestMethod().getName()
;          
        
String fullTestName = testClassName +"#" + testMethodName;          
        
TEST_INFO_HOLDER.set(fullTestName);         

}          
}      

通常测试用例会有一个公共的基类,在这个基类里使用@ExtendWith来使用前面写的扩展功能就能实现上述目标了,这个过程对于已有的测试用例来讲是透明的,不需要任何的修改。

代码语言:javascript
复制
@ExtendWith (TestInfoExtension.class)          
public class TestBase {
    
@BeforeEach          
    
public void setup(){          
        
operator = new Operator(baseURL,sysName,logonURL);          
        
log.info( operator.logon(first,firstPW));          
        
operator.setTraceID(TestInfoExtension.TEST_INFO_HOLDER.get()+"#"
+TestInfoExtension.BATCH_ID_HOLDER.get());          
    
}

 接下来,就是根据traceID到可观测平台上去拉取日志,并提供给用户在测试平台上浏览或者是进一步结合其它数据交由LLM来实现测试结果的智能化分析。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试那些事 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 用例中带有用例执行的唯一标识
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档