首页 > 其他分享 >使用Karate框架进行API测试

使用Karate框架进行API测试

时间:2024-12-27 11:25:58浏览次数:7  
标签:karate 框架 plugin Karate API env maven response match

1.设置环境

打开IDEA,新建maven工程

删除自动生成的代码,然后在main和test目录新建resources目录

打开pom.xml文件添加依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>KarateTest</artifactId>
    <version>1.0-SNAPSHOT</version>

    <name>KarateTest</name>
    <!-- FIXME change it to the project's website -->
    <url>http://www.example.com</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.release>17</maven.compiler.release>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.intuit.karate</groupId>
            <artifactId>karate-junit5</artifactId>
            <version>1.4.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.intuit.karate</groupId>
            <artifactId>karate-apache</artifactId>
            <version>0.9.6</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
            <plugins>
                <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
                <plugin>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>3.4.0</version>
                </plugin>
                <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
                <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>3.3.1</version>
                </plugin>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.13.0</version>
                </plugin>
                <plugin>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>3.3.0</version>
                </plugin>
                <plugin>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>3.4.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-install-plugin</artifactId>
                    <version>3.1.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>3.1.2</version>
                </plugin>
                <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
                <plugin>
                    <artifactId>maven-site-plugin</artifactId>
                    <version>3.12.1</version>
                </plugin>
                <plugin>
                    <artifactId>maven-project-info-reports-plugin</artifactId>
                    <version>3.6.1</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>

安装karate扩展

打开Settings—>Plugins搜索karate

2.编写代码

在src/test/resources目录新建karate-config.js文件

karate-config.js

function fn() {
    var env = karate.env; // get system property 'karate.env'
    karate.log('karate.env system property was:', env);
    if (!env) {
        env = 'dev';
    }
    var config = {
        env: env,
        baseUrl: 'https://ad4b627a-bbd1-4ea3-a678-af41ceb5bfb1.mock.pstmn.io'
    }
    return config;
}

在src/test/resources目录新建目录features,然后新建getGrocery.feature文件

getGrocery.feature

Feature: Grocery API

  Background: The Request Body Configuration
    # Set a configuration for the payload
    * url baseUrl

  Scenario: Get All Products from Grocery
    Given header Content-Type = 'application/json'
    And path '/allGrocery'
    When method get
    Then status 200
    And match response.data[*].id == '#present'
    And match response.data[*].price == '#present'
    And match response.data[*].name == '#present'
    And match response.data[*].stock == '#present'

  Scenario Outline: Get Grocery Details with a name
    Given header Content-Type = 'application/json'
    And path '/allGrocery/<name>'
    When method get
    Then status 200
    And match response.data[0].name == "<name>"
    And match response.data[0].id == '#present'
    And match response.data[0].price == '#present'
    And match response.data[0].stock == '#present'

    Examples:
      | name   |
      | apple  |
      | grapes |

  Scenario: Add a new product to the Grocery Basket
    * def jsonBody =
      """
      {
        "id": 4,
        "name": "string",
        "price": 12.3,
        "stock": 3
      }
      """
    Given header Content-Type = 'application/json'
    And path '/add'
    And request jsonBody
    When method post
    Then status 201
    And response.message == "success"

  Scenario: Send an invalid payload while adding a new product
    Given path '/add'
    When method post
    Then status 400
    And response.message == "Request body has invalid format."

  Scenario: Search the product that has not found
    Given header Content-Type = 'application/json'
    And path '/allGrocery/cherry'
    When method get
    Then status 404
    And match response.message == "The product has not found"

在src/test目录新建runner目录,然后新建TestRunner class文件

TestRunner.java

package runner;

import com.intuit.karate.Results;
import com.intuit.karate.junit5.Karate;
import org.junit.Test;

import static org.junit.Assert.assertEquals;

public class TestRunner {

    @Test
    public void testParallel() {
        Results results = Karate.run("src/test/resources/features").parallel(6);
        assertEquals(results.getErrorMessages(), 0, results.getFailCount());
    }
}

最终目录如下:

3.运行测试

在TestRunner.java文件点击run

测试结果

标签:karate,框架,plugin,Karate,API,env,maven,response,match
From: https://blog.csdn.net/weixin_39810558/article/details/144761916

相关文章

  • PHP语言laravel框架中基于Redis的异步队列使用实践与原理
    在Laravel中,基于Redis的异步队列是通过Laravel的队列系统与Redis服务结合来实现的。这种队列机制允许你将任务推送到队列中,并由后台工作进程异步处理这些任务。这样,你就可以将耗时的操作(如发送邮件、处理视频、数据同步等)推迟到后台处理,从而提高应用的响应速度。###1......
  • 京东店铺所有商品API接口系列(京东API)
    要获取京东店铺的所有商品数据,您可以使用京东开放平台提供的API接口。以下是一些可能有用的API接口:商品SKU列表接口:该接口可以获取指定店铺下的所有商品SKU列表,包括商品ID、名称、价格等信息。您可以使用该接口来获取店铺中的所有商品信息。商品详情接口:该接口可以获取指定商......
  • js中的Observer提供了哪些API?
    在JavaScript中,没有名为"Observer"的内置对象,但你可能是在提及几种不同的概念或技术,比如浏览器的MutationObserver,或者是Vue.js或React等前端框架中的观察者模式或状态管理库(如Vuex或Redux)的观察者API。MutationObserver:MutationObserver是一个可以监听DOM变化的接口。当DOM树......
  • 高德地图API如何使用
    使用高德地图API的步骤如下:一、注册与登录访问高德开放平台官网,点击右上角的“注册”按钮,进入注册页面。填写相关信息,包括手机号、邮箱、密码等,并完成验证码验证。点击“注册”按钮,完成账号注册。注册成功后,可以使用手机号或邮箱登录。二、创建应用与获取APIKey登录高......
  • 高德地图API详解
    高德地图API是一款基于Web的服务,为开发者提供了丰富的地理数据服务和功能。以下是对高德地图API的详细介绍:一、主要功能地图显示:支持全球范围各地的地图显示,包括街道、建筑物、自然地理等,用户可以将高德地图以图片形式嵌入自己的网页或应用中。地理/逆地理编码:提供结构化......
  • 通过API调取1688商品数据以赋能抖音Tiktok电商业务
    在日益激烈的电商市场竞争中,如何高效地获取并整合商品数据成为了决定业务成败的关键因素之一。对于运营抖音TK(TikTok)电商平台的商家来说,通过API接口调取1688的商品数据,不仅能够丰富自身的商品库,还能提高运营效率,增强市场竞争力。本文将详细介绍如何通过API接口调取1688商品数据......
  • Mybatis框架实现单表增删改查
    一数据库准备在MySQL数据库中创建travel_application表:CREATETABLEtravel_application(IDvarchar(8)NOTNULL,namevarchar(255)DEFAULTNULL,departmentvarchar(255)DEFAULTNULL,destinationvarchar(255)DEFAULTNULL,departuredatedateDEFAULTNULL,ret......
  • 多数据源配置:使用Dynamic-datasource框架实现数据源切换、动态新增且使用新数据源、查
    前言多数据源的切换具有十分广泛的应用场景,同时可以简化主从复制、读写分离等方案的实现过程,通过继承AbstractRoutingDataSource并重写相关方法,结合拦截器、AOP以及自定义注解即可实现,但过程比较繁琐。因此可以利用Dynamic-datasource框架轻松实现数据源切换,并且通过框架预留......
  • P1552 [APIO2012] 派遣
    P1552[APIO2012]派遣题目背景在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿。题目描述在这个帮派里,有一名忍者被称之为Master。除了Master以外,每名忍者都有且仅有一个上级。为保密,同时增强忍者们的领导力,所有与他们工作相关的指令总是由上级......
  • OpenAI库无缝对接国产大模型:全面解析各厂商API接口与参数配置指南
    随着OpenAI的API在某些地区被限制使用,国内AI开发者和企业开始积极寻找替代方案。国产大模型在此背景下迎来了重要发展机遇,多家科技公司纷纷推出自己的大模型,并提供API接口供开发者使用。使用OpenAI库连接国产大模型已经在多个领域得到了广泛应用,如智能客服、文本生成、图片生成......