如何利用TestNG监听器优化测试报告?

如何利用testng监听器优化测试报告。

  一、给工程添加失败重试机制

接口用例量上来以后,我们遇到的第一个问题是http方式调用php接口会有部分接口偶尔不稳定或者超时的情况,但第二次运行又正常,每次接口失败都需要花费时间排查,但实际没有问题,为了排除不稳定带来的干扰,给大家节约排查维护时间,首先需要解决的是给工程添加失败自动重试机制。

目前我的做法是实现了testng自带的IRetryAnalyzer接口,定义了一个MAX _ RETRY_COUNT,即大重试次数,实现的retry方法非常简单,如下:

public boolean retry(ITestResult result) {

if (retryCount < MAX_RETRY_COUNT) {

retryCount++;

return true;

}

return false;

}

如果团队有人想要使用失败重试的功能也很简单,只需要在Annotation里面加上retryAnalyzer属性即可,如下:

@Test(retryAnalyzer = TestRetry.class)

public void summaryTest(){

String url = urlList.get(0);

JSONObject map = ResponseJsonBase.manageJson(url, "");

String total = map.getString("total");

assert "7.59".equals(total) : url;

}

这种方式带来的好处是有比较大的自由度,可以自由选择某个用例是否需要失败重试的功能,因为部分接口重试第二次是不允许的,比如分销的关注接口(有频率限制等)。身为一名IT技术人员磨练自己的技术是必不可少的,欢迎加入测试交流群(1017539290),可以与大牛在线随时讨论自己感兴趣的话题,让自己用最少的时间学到最多的东西。 但是仅仅到这里还是会有问题,首先会发现我们的接口测试报告有问题,其次会发现失败重试后通过的情况下,依然会有邮件提醒,我们还是需要花费很多时间看接口问题。在这里,我为了复现当时遇到的问题,随便造了一个有问题的接口测试报告:

  二、通过定义一个监听器优化测试报告

根据遇到的问题,首先我们需要优化一下测试报告,从而避免给大家带来太多干扰。 我的做法是定义了一个testng的监听器来处理失败重试的用例。具体实现是通过继承TestListenerAdapter类,覆盖onTestFailure、 onStart、 onFinish方法,贴一下主要的代码段:

@Override

public void onTestFailure(ITestResult tr) {

if (tr.getMethod().getRetryAnalyzer() == null) {

log(tr.getMethod() + "--Test method failed ");

}

if (tr.getMethod().getRetryAnalyzer() != null) {

TestRetry testRetry = (TestRetry)       tr.getMethod().getRetryAnalyzer();

if (testRetry.getRetryCount() < testRetry.getMaxRetryCount()) {

tr.setStatus(ITestResult.SKIP);

Reporter.setCurrentTestResult(null);

isRemoveSkipNeeded = true;

skippedCases.addResult(tr, tr.getMethod());

}

else {

failedCases.addResult(tr, tr.getMethod());

isRetryNeeded = true;

}

}

}

其实上面代码里面是统一对失败的用例做处理,每次失败都会去判断是否已经达到大失败次数,如果没有,会将该用例状态设置为skip,到这里为止,看我们的测试报告,大概长这样:

可以看到,依然有很明显的问题,我们还需要做的事情是:失败的用例列表去重,以及在Skipped的testcase里面剔除真正Failed的Test Case。 其实测试报告的主要数据获取是下面几个:

getFailedConfigurations()

getSkippedConfigurations()

getFailedTests()

getSkippedTests()

做对应优化很简单了身为一名IT技术人员磨练自己的技术是必不可少的,欢迎加入测试交流群(1017539290),可以与大牛在线随时讨论自己感兴趣的话题,让自己用最少的时间学到最多的东西。,贴下我这边failed Cases去重的代码段,可以举一反三写其他几个:

private void removeFailedTestsInTestNG(ITestContext test) {

IResultMap returnValue = test.getFailedTests();

for (ITestResult resultToCheck : failedCases.getAllResults()) {

int c = 0;

for (ITestResult result : returnValue.getAllResults()) {

if (result.getMethod().equals(resultToCheck.getMethod())) {

c++;

if (c > 1) {

returnValue.removeResult(result.getMethod());

test.getFailedConfigurations().removeResult(

result.getMethod());

}

}

}

}

}

然后是在每个testSuit运行结束的时候,统一处理:

@Override

public void onFinish(final ITestContext testContext) {

if(isRetryNeeded){

removeIncorrectlySkippedTests(testContext,failedCases);

removeFailedTestsInTestNG(testContext);

}

else{

if(isRemoveSkipNeeded)

removeSkippedTestsInTestNG(testContext);

else{

skippedCases= testContext.getSkippedTests();

failedCases= testContext.getFailedTests();

}

}

}

将该监听器配置到testng.xml内或者pom.xml内可以生效了。

  自此为止,看下我们的测试报告已经是我们想要的样子了:

  后是CI的配置,我用了扩展邮件插件,实现了一个相对直观的邮件模版,只对Fail和Fixed的情况进行提醒(见下图右),对于skipped的用例,虽然不再有邮件“骚扰”,但依然可以在jenkins里面查看(见下图左)

  三、后续的优化空间上周,我在工程里面加了日志模块,会记录skip的和返回时间超过1秒的用例,设想是运行一段时间后,对这部分用例进行统计,看是否接口本身存在优化空间,这部分工作后续也是计划优化为自动完成、自动出图表,要看时间是否充足了

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,478评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,825评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,482评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,726评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,633评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,018评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,513评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,168评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,320评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,264评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,288评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,995评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,587评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,667评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,909评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,284评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,862评论 2 339

推荐阅读更多精彩内容