解读Flaky Test
创始人
2025-05-30 09:59:25
0

软件质量保障:所寫即所思|一个阿里质量人对测试的所感所悟。

Flaky Tests是什么?

初识Flaky Tests源于一个Python库-flaky,flaky是Nose和Pytest的一个扩展库,可以自动重试执行不稳定的测试。在理想情况下,我们期望测试可以稳定地执行通过或失败,但测试执行并非依赖测试用例本身,而且依赖其他执行用例所必需的元素如用例本身引用的第三方组件、环境等。Flaky则可以降低这些因素对用例的影响,当测试执行失败可以自动重试执行。

Flaky Tests是什么呢?所谓Flaky Tests,就是指在被测对象和测试条件都不变的情况下,有时候执行失败、有时候执行成功的测试,因此可以把Flaky Tests理解为不稳定的测试。

注:这里的不稳定是在大量的自动化测试数据统计前提下而言。

下面这个case就是一个Flaky Test:

import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
​
import static org.junit.jupiter.api.Assertions.assertEquals;
​
public class FlakyTest {
​@Testpublic void testShoppingCart() {WebDriver driver = new ChromeDriver();driver.get("https://item.jd.com/13078543.html");driver.findElement(By.id("add_button")).click();String itemCount = driver.findElement(By.id("item_count")).getText();assertEquals("1", itemCount);driver.quit();}
}

这个测试用例测试的是一个在线购物网站上的商品详情查看功能。它会打开购物车页面,添加一个商品,然后检查购物车中的商品数量是否正确。

但是,由于网络延迟或服务器负载等原因,商品详情页面的加载可能会失败,导致测试失败。因此,这个测试用例是一个Flaky Test。

要解决这个问题,我们可以使用重试机制来重新运行失败的测试用例。例如,我们可以使用JUnit Jupiter中的@RepeatedTest注解来重复运行测试用例:

import org.junit.jupiter.api.RepeatedTest;
​
public class FlakyTest {
​@RepeatedTest(3)public void testShoppingCart() {WebDriver driver = new ChromeDriver();driver.get("https://item.jd.com/13078543.html");driver.findElement(By.id("add_button")).click();String itemCount = driver.findElement(By.id("item_count")).getText();assertEquals("1", itemCount);driver.quit();}
}

这样,如果测试用例在第一次运行时失败,它将在最多尝试3次后重新运行,以增加测试的稳定性。

Flaky Tests的危害

Flaky Tests的存在可能会给软件质量带来严重的风险,具体表现为:

1. 误导测试结果:由于测试结果不稳定,Flaky Tests可能会导致测试报告中的错误率不准确,给软件质量评估带来误导。

2. 损害测试可靠性:Flaky Tests可能会导致测试人员失去对测试过程和测试结果的信心,从而导致测试可靠性降低。

3. 浪费时间和资源:Flaky Tests可能会浪费测试人员的时间和公司的资源,因为它们需要反复运行才能确定测试结果。

4. 延误发布时间:由于Flaky Tests需要额外的修复和调试,它们可能会导致软件发布时间延迟,从而影响软件的交付时间和客户满意度。

Flaky Tests产生的原因

导致Flaky Tests的原因有很多,以下是一些常见的原因及其案例:

1. 并发问题

例如:多个测试用例同时尝试访问共享资源时可能会产生竞争关系,从而导致测试结果不稳定。

2. 外部依赖

例如:测试用例依赖于外部服务,例如数据库或API,这些服务可能会在测试运行期间出现故障或变化,从而导致测试结果不稳定。

3. 时间问题

例如:测试用例的执行时间可能会因为系统负载或其它因素而变化,从而导致测试结果不稳定。

4. 随机性

例如:测试用例包含随机数据或随机行为,这些随机因素可能导致测试结果不稳定。

5. 环境问题

例如:测试用例在不同的测试环境中可能会表现出不同的行为,例如在Windows和Linux操作系统下的测试结果可能会不同。

6. 编码错误

例如:代码实现错误或测试用例设计错误可能导致测试结果不稳定。

7. 不合理的测试用例

例如:测试用例的预期结果不清晰或者不合理,可能导致测试结果不稳定。

在解决Flaky Tests问题时,需要仔细分析测试用例的执行情况,找出导致测试结果不稳定的根本原因,并采取适当的措施来解决这些问题。

Flaky Tests真的就没有价值吗?

虽然Flaky Tests的存在会对测试过程和测试结果带来风险,通过辩证法看待问题,难道Flaky Tests真的就没有价值吗?其实在某些情况下,Flaky Tests也是具有一定的价值。

1. 发现系统性问题:Flaky Tests在某些情况下揭示系统中存在的重要问题,这些问题在稳定运行的测试用例中可能不会被发现。通过仔细分析Flaky Tests的结果,测试人员能够确定系统中的潜在问题,并加以解决。

2. 探测外部依赖问题:Flaky Tests可能揭示外部依赖问题,例如网络延迟或其他不稳定的外部服务,这些问题在正常测试用例中可能不会被发现。通过解决这些外部依赖问题,测试可靠性和软件质量可能会得到显著提高。

3. 完善测试用例:Flaky Tests可以帮助测试人员发现测试用例的缺陷或不足,例如测试用例设计不合理或测试用例中缺少关键信息。通过修复这些问题,测试用例的覆盖率和准确性可以得到提高。

需要注意的是,Flaky Tests的价值相对有限,因此在优化测试过程和测试用例时,测试人员应该尽可能地避免这种现象的出现。如果无法避免,测试人员应该注意分析测试结果,找出根本原因,并尽快解决这些问题。

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...