六个单元测试、自动测试、集成测试和端到端测试的开源框架介绍


1. 测试框架 RoboFramework
Robot Framework 是一个通用的开源自动化框架。它可用于测试自动化和机器人过程自动化 (RPA)。
Robot Framework 是开放和可扩展的,几乎可以与任何其他工具集成,以创建强大而灵活的自动化解决方案。开源还意味着 Robot Framework 可以免费使用,无需支付许可费用。
RoboFramework 是一个编写测试用例和自动化流程的框架。这意味着它可能会取代您的经典组合 Selenium + Cucumber + Gherkins。更准确地说,您编写的 Cucumber Gherkins 自定义实现将由下面调用的 RoboFramework 和 Selenium 处理。
对于 Java 开发人员,该框架可以使用 Maven ( link ) 或 Gradle( link ) 执行,但后者解决方案不太成熟。
 
2.Testcafé 
 https://testcafe.io/
Testcafé 是另一个 E2E 测试框架,如 Protractor 或 Cypress。
它通过浏览器 API 提供了一个轻量级的 DSL 来编写简洁的测试。它不需要 WebDrivers,它使用 Node.JS 和安装在机器上的浏览器。从某种意义上说,它可能不是CI/CD 环境的最佳解决方案,但它非常易于使用。对于高级用户(以及 CI/CD),仍然可以使用无头浏览器。它还支持模拟 HTTP 请求,这些请求也非常适合对场景的一小部分进行测试。最后但并非最不重要的是,该框架应该自动处理浏览器操作之间的超时和睡眠暂停。
 
3. JUnit的randomBeans
https://glytching.github.io/junit-extensions/randomBeans
此 JUnit 扩展集成了 RandomBeans,使您的测试能够将 POJO 生成与动态值集成。传统测试经常使用固定的静态数据,读取和维护时间太长。使用此扩展,您可以使用随机值填写您的 POJO,并确保您的测试正确验证其结果。

@ExtendWith(RandomBeansExtension.class)
public class MyTest {

    // injected with a random String    
    @Random private String anyString;
    
   
// injected with a random, fully populated instance of DomainObject    
    @Random private DomainObject fullyPopulatedDomainObject;
    
   
// injected with a random, partially populated instance of DomainObject    
    @Random(excludes = {
"wotsits", "id", "nestedDomainObject.address"})
    private DomainObject partiallyPopulatedDomainObject;
    
   
// injected with a List of random strings    
    @Random(type = String.class)
    private List<String> anyList;
}

 
4. JUnit-quckcheck
https://github.com/pholser/junit-quickcheck
junit-quickcheck 是一个支持在 JUnit 中编写和运行基于属性的测试的库,其灵感来自 QuickCheck for Haskell。
更具体地说,您定义属性或不变量,并根据生成器生成的随机值检查它们。因此,您可以在对象上使用定义属性,并提供一个生成器,如果可能,该生成器将使用随机值初始化 POJO。
junit-quickcheck 和其他 QuickCheck kin 不是为所有可能的输入测试这些属性,而是生成一定数量的随机输入,并验证这些属性至少对生成的输入有效。这为我们在重复测试运行时提供了一些合理的保证,即这些属性适用于任何有效输入。
  import com.pholser.junit.quickcheck.Property;
    import com.pholser.junit.quickcheck.runner.JUnitQuickcheck;
    import org.junit.runner.RunWith;

    import static org.junit.Assert.*;

    @RunWith(JUnitQuickcheck.class)
    public class StringProperties {
        @Property public void concatenationLength(String s1, String s2) {
            assertEquals(s1.length() + s2.length(), (s1 + s2).length());
        }
    }

这里有几个示例可以让您了解如何使用该框架以及您可以获得哪些好处:https : //github.com/pholser/junit-quickcheck/tree/master/examples/src/test/java/com/ pholser/junit/quickcheck/示例
 
5. Playwright 
https://playwright.dev/docs/why-playwright
Playwright 是微软在 2020 年发布的另一个 E2E JS 测试框架。
该框架提供的有趣功能包括:

  • 测试手机。使用设备模拟在移动 Web 浏览器中测试您的响应式 Web 应用程序。
  • 自动等待 API。剧作家互动会自动等待元素准备就绪。这提高了可靠性并简化了测试编写。
  • 无超时自动化。剧作家接收浏览器信号,如网络请求、页面导航和页面加载事件,以消除导致不稳定的睡眠超时的需要

我个人的意见是等等它为与Robot Framework的集成已确认
 
6. JQF
https://github.com/rohanpadhye/JQF
JQF 是一个 Java 模糊测试库,通过改变参数的值对您的代码执行模糊测试,并可能发现您以前从未想过的错误。
@RunWith(JQF.class)
public class PatriciaTrieTest {

    @Fuzz  /* The args to this method will be generated automatically by JQF */
    public void testMap2Trie(Map<String, Integer> map, String key) {
       
// Key should exist in map
        assumeTrue(map.containsKey(key));  
// the test is invalid if this predicate is not true

       
// Create new trie with input `map`
        Trie trie = new PatriciaTrie(map);

       
// The key should exist in the trie as well
        assertTrue(trie.containsKey(key));  
// fails when map = {"x": 1, "x\0": 2} and key = "x"
    }
}

JQF Maven插件文件运行:mvn jqf:fuzz

 
6. PODAM 
PODAM 是一个轻量级工具,用于用数据自动填充 Java POJO。这在开发单元测试时会派上用场。

// 最简单的场景。将所有决定委托给 Podam 
PodamFactory factory = new PodamFactoryImpl(); 

// 这将使用具有最少参数的构造函数,
然后使用 setter 来填充 POJO 
Pojo myPojo = factory.manufacturePojo(Pojo.class); 

// 这将使用具有最大参数的构造函数,
然后使用 setter 来填充 POJO 
Pojo myPojo2 = factory.manufacturePojoWithFullData(Pojo.class); 

// 如果对象实例已经可用,
// Podam 可以用随机数据填充它
Pojo myPojo3 = MyFactory.getPojoInstance(); 
factory.populatePojo(myPojo3);

它是另一个版本的 Random 库,我经常使用它。PODAM 是可扩展的,您可以创建自己的生成器。如果您不喜欢 Randombeans,请用用 PODAM。
 
​​​​​​​