51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2027|回复: 1
打印 上一主题 下一主题

[原创] Karate让RESTful Web Service测试更简捷更高效

[复制链接]
  • TA的每日心情
    无聊
    昨天 09:34
  • 签到天数: 1052 天

    连续签到: 2 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2020-10-19 09:53:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    应用场景:在API的测试中,测试某些具体数据值,比如返回的结果是否是需求的类型,文件是否是符合且具备完整的数据结构。这些都是必须且很细致的测试工作。另外,组织、运行测试场景,以及演示测试结果这些也都使得测试人员要更加快速的找到合适的API测试方法。今天就详细地介绍如何用Karate组织、运行测试场景,以及验证Json 文件数据的正确性。
      如果您想跟着以下示例操作,需要做好以下配置:
      测试框架:Java + Karate + Junit 5
      语言:Java, Cucumber
      IDE:Intellij IDEA
      项目类型:Maven
      Karate 项目配置
      为了能让跟着步骤操作的小伙伴们真正地运行起代码来,所以下面是有关配置的操作(注:如您已经熟悉这些配置,可以跳过。)
      1.创建一个新的Maven 项目
      2.POM配置 (这里介绍的清楚一些,有时就是因为配置没设好,脚本就是运行不起来。)
    3.配置 Cucumber
      依次打开Files > Settings > Plugins : 确保cucumber for Java 和Gherkin 插件已经安装成功。

    创建 Karate [url=]测试用例[/url]
      1.创建测试场景 (feature 文件)
      如下图显示,本示例中country-get.feature 文件前面有一个绿色的图标,这就是cucumber feature 文件的标识。


    2.编写测试场景
      背景 Background:  本示例中,url  和 header 是所有测试用例中共用的一部份,所以就把它们写在了Background中。


    用例一:测试get method 并验证响应代码,文件长度以及第一个字段值 (期待成功)
      文件长度:这里实际是指返回的一个json数组里包含了多个.json 文件,比如本实返回了250个文件


     @Value: @ 注释 是测试人员组织测试用例时非常好用的小工具。我们可以一组类似的测试用例用 相同的 @ 把它它们标识出来,这样运行的时候根据需求也可以分组执行。
      Given: path 从下图中可以看出,path 只是后面的一部份而已,当运行的时候,会和Background 中的url自动地连接在一起。 相当于https://restcountries.eu/rest/v2/all
      When: 本例中我们测试 get 请求
      Then, And : 这是本例中要验证的结果,期待请求发表以后,会收到成功的返回代码: 200, 并且包含有 250 文件,同时第一个.json文件的第一层nativeName 要等于验证的字符串。(注:在第二截图里显示了实际返回的nativeName 值)



    用例二 :测试带有参数的get method  并验证响应代码,文件长度以及国家名称 (期待成功)
      本例中多加了一个参数:相当于请求 https://restcountries.eu/rest/v2/name/aruba?fullText=true


    用例三:测试带有参数的get method  并验证响应代码和返回的文件内容 (期待失败)
      本示例是测试当请求有误时,系统的响应信息。和前一个示例不同的时,把国家的名字给错了,请求的url:https://restcountries.eu/rest/v2/name/arubaq?fullText=true
      在验证时,第一个match 中期待返回的status 是一整型, 第二match中期待返回的status是一个字符型。根据实际返回信息 (如下图二), status应该是一个整型。
      注: 这个用例中的@Contents 与前二个示例不同. (在运行文件中,您能切身体会有什么效果了。)



    创建运行文件
      如下图所示,这里创建5 种运行方式 ( @Karate.Test)。下面我们依次介绍如下:
      ·testTags(): 运行同一文件夹里country-get.feature 里面标记是@Value的测试场景
      ·testSingle(): 运行同一文件夹里country-get.feature 里面所有的测试场景
      ·testFullPath(): 指定运行feature 文件夹里country-get.feature 里面标记是@Contents 的测试场景
      ·testPost():  想运行country-post.feature文件中的所有测试场景 (注:这里是一种错误的写法,文件运行不起来,因为当前文件夹下没有country-post.feature 文件)
      ·testinFeaturePost(): 指定运行featurepost 文件夹里country-post.feature文件中的所有测试场景
      ·testAll(): 指定运行同一文件夹里所有feature文件中的所有测试场景
      现在各位朋友清楚了在feature文件中,各个场景里@的不同意义了吧。同时写这么多运行方式也是想让大家更加明了当你有不同的需求时,如何快捷地运行你的测试场景。


    脚本运行
      1.运行在IDE
      右键点击CountryRunnerTest文件,在弹出的菜单列表中点击 Run CountryRunnerTest。 收割的时候到了,快看一下结果吧。
      如下图(运行结果一)所示,从左边的窗口中, 可以看出
      1) testAll() 运行了country-get.feature 和sample.feature 两个文件。country-get中显示运行了3个场景: 2 个成功,1个失败。
      2)失败的场景结果中: 我们设计去验证status 应该是整型而不是字符型,右边窗口显示了指示出清晰的错误原因
      3)testTags(): 只运行了两个成功的场景 @Value
      4)testFullPath(): 只运了失败的场景 @Contents
      运行结果一:


     如下图(运行结果二)所示,从左边的窗口中, 可以看出
      1)testTagsPost(): 没有运行,因为没有找到对应feature 文件或场景
      2)testTagsPostinFeaturePost():  运行正确
      运行结果二:


    2.运行通过命令行
      ·指定运行某一个方法
      执行命令: mvn test -Dtest=CountryRunnerTest#testFullPath
      CountryRunnerTest: java class 文件名
      #testFullPath:  指定运行测试 (注:这里就是CountryRunnerTest文件中的运行方法)


    ·运行单个文件
      移除其它的运行方法
      执行命令:  mvn test  (注:当用这个命令时,运行的文件名必须是*Test.java)


    3.并行运行Parallel Run
      ·创建CountryPallelTest.java 文件。 如下图所示,classpath:feature 是指当前的package feature, parallel: 示例中有2 thread to run country-get.feature and sample.feature (注: 把先前CountryRunnerTest文件名改为CountryRunner)
      ·执行 mvn test


    ·如下图示,结果中显示 threads: 2, passed: 2 , failed:1
      (注: 这里的两个feature 文件运行了1个,ignored: 1, 是因为sample.feature 是一个空文件)


    4.如果您在运行时遇到错误信息: The forked VM terminated without properly saying goodbye. VM crash or System.exit called? 可以执行: mvn clean install
      报告测试结果
      1.Karate 报表
      以执行mvn test -Dtest=CountryRunnerTest#testFullPath 为例,运行完毕以后,target文件夹会自动生成,展开target > surefire-reports文件夹,找到feature.country-get.html,右键点击,在显示的菜单列表中点击Open in Browser ,选择您想要找开文件的browser。


     如下图所示,karate 的报告中显示出很明确请求连接url与验证失败的原因。

     2.并行运行报告
      从产生的目录结构中,可以看出并行运行的结果与单个运行结果的报表是不同:


    Timeline.html中很明确显示了3个测试场景在2 threads 的分配和运行状况。




    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-28 05:08 , Processed in 0.063392 second(s), 25 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表