当前位置: 首页 > 知识库问答 >
问题:

有一种方法可以用我请求的不同方法验证API响应?

滑畅
2023-03-14

我从API自动化测试开始,所以我不知道如何使用Cucumbers步骤来验证API响应。

我使用以下步骤创建cucumber功能:

    @criarConta
        Scenario Outline: Criar uma conta valida
            Given que realizo a chamada no <ambiente> da <api> informando <token_admin> e um email e <senha> novos
            Then devera retornar <status code> 
            And no response devera retornar um valor de "ID" ou "Message" 

在我的“dataMap”类上,我正在执行休耕请求并验证:

public void criarConta(String srtAmbiente, String srtAPI, String srtToken, String srtSenha) {

            String uriBase = srtAmbiente;
            RequestSpecification apiRequest = RestAssured.given().contentType(ContentType.JSON);

            int length = 15;
            String email = generateRandomEmail(length);
            System.out.println(email);
            Map<String, String> emailContent = new HashMap<String,String>();
            emailContent.put("email", email);
            Map<String, Object> postContent = new HashMap<String,Object>();
            postContent.put("customer", emailContent);
            postContent.put("password", srtSenha);

            apiRequest.header("Authorization", "Bearer "+srtToken).with().body(postContent);

            Response response = apiRequest.post(uriBase+srtAPI).prettyPeek();

            ResponseBody body = response.getBody();
            String bodyStringValue = body.asString();
            Assert.assertTrue(bodyStringValue.contains("id"));
            JsonPath jsonPathEvaluator = response.jsonPath();
            String responseEmail = jsonPathEvaluator.get("email");
            Assert.assertTrue(responseEmail.equalsIgnoreCase(email));

        }

但是在我的“步骤”类中,我需要调用cucumber步骤,我的请求和验证代码都在同一个方法上。如何在方法中调用请求,在另一个方法中调用响应,以使用cucumber步骤?谢谢

共有2个答案

宗烨赫
2023-03-14

要在一个步骤中从系统收集响应,并在另一个步骤中将其断言,您需要使用World对象或Scenario Context在步骤之间共享数据。完全公开,我更熟悉用ruby/php/javascript解决这个问题,但Java的原理应该是一样的。

一个好的起点可能是分解你的criarConta方法,目前它捆绑了几个不同的关注点——构建请求、发送请求、解析响应和断言响应值。我建议将请求分成一个方法,将响应解析成另一个方法,并从你的然后步骤中调用这两个方法

断言应完全提取,并在 Then 步骤中直接调用。通常,像 dataMap 这样的类将是系统接口的纯抽象(类似于页面对象是 UI 的抽象),但对系统“应该”如何行为没有意见。这些应该保留在步骤def中,与它们所代表的小cucumber紧密相连。

谢英光
2023-03-14

你应该尝试使用QAF和qaf-ws-support来使用小cucumber。它为webservice测试提供支持,并内置了使用jsonpath/xpath对json/XML响应进行断言验证的步骤。请求调用存储库允许您将请求信息移出代码。

您的实现将变得整洁干净,只需最少的代码或没有代码。下面是一个示例:

SCENARIO: <scenario name>

   When user requests '${get.sample.call}'
   Then response should have status code '<status code>'
   And response should have '<expectedvalue1>' at '<jsonpath1>'
   And response should have '<expectedvalue2>' at '<jsonpath2>'
     :
     : 
END
 类似资料:
  • 问题内容: 使用标准的Rails form_for,我可以通过select和collection_select助手传递ajax请求,例如: 我似乎无法弄清楚如何使用simple_form 问题答案: 弄清楚了。您只需要添加以下内容:

  • 问题内容: 我刚刚开始使用nodejs。我想知道是否有一种方法只能在应用程序中“一次”请求文件。我正在使用一个类框架来在我的JS项目中获取经典的OOPS。每个“类”都包含在其自己的JS文件中。我想“要求”每个文件中的类框架,以便它们可以独立运行,但希望框架的初始化代码仅执行一次。 我可以使用一个标志来自己实现,但是内置的方法会很好。搜索“ require一次”使我想到所有与PHP有关的问题。 问题

  • 假设我有一个实现JSON HTTP API的现有Java服务,我想添加一个Swagger模式,并根据它自动验证请求和响应,而不需要重新调整服务来使用Swagger框架/代码生成。有没有什么可以提供Java API,让我可以绑定并传递关于请求/响应的信息来进行验证? (仅使用JSON模式验证器意味着手动实现Swagger中的许多附加功能。)

  • 问题内容: 有没有一种方法可以设置节点js https请求的源端口?我不是在询问目的地,而是在询问来源,即用于发送请求的端口。 上下文是我试图从特定端口而不是随机端口发送https请求,从而允许锁定iptables。节点未以root用户身份运行,因此端口不是443。 更新:看来Node中有一个错误。选项localAddress和localPort至少在TLS套接字中不起作用。 更新:发现与去年类似

  • 当前我的控制器看起来是这样的。 有没有更简单的方法为两个不同的路径“localhost:port/members”和“localhost:port/members/index”使用一个index-method?一般情况下,我可以为一个方法注释两个值吗? 提前致谢:) 编辑:我已经看到它对@RequestMapping起作用了

  • 本文向大家介绍请使用css画一个圆,方法可以多种相关面试题,主要包含被问及请使用css画一个圆,方法可以多种时的应答技巧和注意事项,需要的朋友参考一下 1.border-radius 2.clip-path 3.svg background 4.radial-gradient 5.font 6.mix-blend-mode