最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • [Web翻译]为gRPC和REST服务实施测试自动化框架。

    正文概述 掘金(Sunbreak)   2021-03-27   796

    [Web翻译]为gRPC和REST服务实施测试自动化框架。

    在Chewy写自动化框架是一次很棒的学习经历。从一开始,我就可以灵活地探索市场上任何合理的自动化工具。当我开始在Chewy工作的时候,我第一次接触到了gRPC的概念。这就要求我熟悉gRPC的基本原理,并同时学习如何编写自动化程序。测试这个服务需要从服务架构层面了解这个协议,所以我不得不挖掘资源。在这篇博文中,我总结了我实现一个强大的gRPC测试自动化框架的方法,以及我如何使用Java来编写它。最近,我们开始从gRPC过渡到REST服务合同。关于这一点,我也包含了我的方法,以实现从gRPC框架到REST测试框架的平稳过渡,使用的工具是REST Assured。

    gRPC

    gRPC正在成为一个流行的RPC框架,被Netflix、Square、Cisco & Juniper Networks等各种现代公司使用[1]。它是由Google提供的一种远程过程调用,它定义了远程服务器上的服务调用方法,客户端创建一个服务器的存根,并向这些方法提供参数和返回类型。客户端创建一个服务器的存根,并为这些方法提供参数和返回类型,而服务器则实现这些方法并返回响应。数据的结构形式是protobuf文件,你可以在这里阅读更多关于它们的信息。gRPC的一些优点是:它支持多种语言,并且与普通的RPC服务相比具有较高的性能。更多关于gRPC在Java中的文档,请求和响应结构的细节可以在这里找到。

    我们如何为gRPC服务编写测试

    为了测试gRPC的客户端和服务器端行为,在Chewy我们编写了集成测试,实现了一个类似于上面解释的请求响应框架。文件的层级结构包括一个父类,父类定义了一个gRPC通道,建立了它,然后根据需求定义了一个模拟stub。该通道作为stub和客户端之间的连接,用于实现服务器端方法。这个通道可以被配置为指向任何特定的测试环境。在这篇文章中,我将它定义为指向本地环境(端口8888)。在下面的代码片段中,该通道被声明为managedChannel。

    public abstract class AbstractClientIntegrationTest {
        ServiceGrpc.ServiceBlockingStub stub; 
        String host = System.getProperty("dns:///localhost:8888”);
    managedChannel = NettyChannelBuilder.forTarget(getTarget())
                    .build();
    }
    

    这个类被所有测试类文件继承,通过存根调用gRPC服务器方法。如前所述,gRPC支持多种语言和测试框架。在这篇文章中,我将使用Java语言和Junit5框架。下面是一个示例测试的代码片段,它可以进行客户端调用和模拟服务器响应。

    @Test
        void test_nonNullResponse_validChannel() {
            ServiceProto.GetFeatureRequest request = SrviceProto.GetFeatureRequest.newBuilder().setParam("Param 1 Value").build();
            Proto.Feature featureResponse = stub.getFeature(request);
            assertNotNull(featureResponse, "The response valid request was null");
        }
    

    在这个测试中,客户端调用在服务器上使用ServiceProto定义的方法GetFeatureRequest,并在同一个调用中设置输入参数(这里用setParam表示)。此后,客户端存根实现该方法并返回响应。最后,测试使用Junit断言来验证响应是否不为空,并在响应为空的情况下抛出一个错误信息。

    REST断言

    REST Assured是一个用于测试Rest APIs的响应和请求的框架。它是用Java语言和行为驱动开发(BDD)格式编写的。Rest Assured框架可用于解析REST API响应,以验证JSON键值对或检查XML或JSON路径中响应的关键部分。REST Assured的文献比gRPC自动化框架更容易获得,并已在参考文献中提及。

    Chewy的REST Assured测试

    在开始在REST Assured框架中编写测试之前,在Maven或Gradle项目中包含正确的依赖关系是很重要的。REST Assured设置的完整文档可以在官方的入门页面找到。任何项目都需要以下关键的依赖关系来进行设置。

    • REST-Assured
    • Json Schema验证器
    • JsonPath
    • XmlPath
    • 支持Scala和Kotlin扩展模块(可选)。

    这里展示了一个依赖关系的示例gradle项目代码段,用于REST Assured特有的依赖关系。为了有效地实现REST Assured[2],我们还推荐从Rest Assured类中静态导入方法,下面的代码段中包含了一些例子。

    testCompile group: 'io.rest-assured', name: 'rest-assured', version: '4.0.0'
    testCompile group: 'io.rest-assured', name: 'json-schema-validator', version: '4.0.0'
    testCompile 'io.rest-assured:json-path:4.0.0'
    testCompile 'io.rest-assured:xml-path:4.0.0'
    testCompile group: 'org.apache.geronimo.specs', name: 'geronimo-jms_1.1_spec', version: '1.1.1'
    import static io.restassured.RestAssured.given;
    import static io.restassured.matchers.RestAssuredMatchers.* ;
    

    这里是一个测试的例子,以类似于Chewy的格式展示了REST Assured框架在BDD中的实现。

    @Test
        public void validate_nonNullResponse() {
          String responseString =
                    given().
                    when().
                            get(url+"/?q=param1+param2").
                    then().
                            assertThat()
                            .statusCode(200) 
                            log().ifError().
                    extract().
                          jsonPath().get().toString();
            assertNotNull(responseString, , "The response was null"}
    

    要在 REST Assured BDD 中写一个测试,你可以在给定的子句中指定查询参数和 URI,或者留空子句(如示例所示)。如果在上一步中没有完成的话,可以在后面的when子句中为Rest端点指定更多的条件(例如:任何详细的查询参数)或指定URI和主参数(如本例所示)。最后,在 "然后 "部分提到你要测试的断言,作为验收标准或预期测试条件的一部分。更多关于Rest Assured文档和可用库的细节可以在他们的官网上找到。

    在Chewy的CI/CD实现

    对于一个强大的回归框架测试,Chewy已经实现了gRPC和REST自动化框架。在广泛的层面上,使用的工具是Ansible Tower(AWX)进行部署,Atlassian Bamboo作为CI/CD服务器,GitHub作为版本控制。为了启动框架的流水线,在Ansible playbook中写了一个最后的任务,对竹子的API进行cURL调用。这个调用会触发一个驻扎在竹子中的自动化测试工作。一旦测试运行,通过/失败的状态就会通过一个内联的竹子shell脚本传达给GitHub。然后,GitHub就可以为初始部署分支启用/禁用合并功能,从而开始整个部署过程。

    在Chewy开发一个自动化框架,可以说是最有趣、最能刺激精神、最能学习的一次经历。回顾这段旅程,看到我们取得的进步,让我充满了成就感。我想向团队的其他成员致敬,包括但不限于James、Amir、Pat、AP、Chris和Nelson,没有他们的帮助,这一切都不可能实现。

    参考资料

    [1] gRPC,2019年8月13日访问,grpc.io/docs/guides…

    [2]John Haleby,2016年6月3日,2019年9月2日访问,github.com/rest-assure…

    作者:Shvetashva Suri 二级质量工程师@Chewy


    如果您对卓伟的工作有任何疑问,请访问www.chewy.com/jobs。


    www.deepl.com 翻译


    起源地下载网 » [Web翻译]为gRPC和REST服务实施测试自动化框架。

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元