有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java存储RESTAPI响应的最佳方法是什么

我将为我的RESTful API构建e2e测试,并为此使用Cucumber。 我还将使用cucumber-spring在stepdef之间共享状态

让我们假设restfulapi是关于zoo的。下面是一些场景

  • 客户使用登录/密码在动物园网站注册。我需要在该州存储客户ID。我还需要存储完整的http响应以进行注册,因为我希望能够检查,如果客户提供的密码太弱,http响应是否包含正确的http状态代码
  • 顾客买了一张去动物园的票。出于同样的原因,我需要存储票据ID和响应

好的,到目前为止很容易。但如果:

  • 顾客又买了一张票。如果我使用与第一个票证相同的定义,它将重用相同的状态变量,并且第一个将不再可用。如果我创建另一个定义,我将有重复的代码,这将造成混乱

  • 另一位顾客登记并买票,所以我想确保动物园不会过于拥挤。这里的问题和上面的一样-我应该使用什么定义和什么状态变量


共 (2) 个答案

  1. # 1 楼答案

    NoraUi框架使这成为一个单例类生命(https://github.com/NoraUi/NoraUi/blob/master/src/main/java/com/github/noraui/utils/Context.java

    可以使用此机制在上下文中存储变量。然后可以用每个场景重置上下文(或者在Scenario Outline的情况下重置每个example

    public static void saveValue(String key, String value) {
        getInstance().scenarioRegistry.put(key, value);
    }
    
    public static String getValue(String key) {
        return getInstance().scenarioRegistry.get(key);
    }
    

    在cucumber代码中,可用于编写:

    Context.saveValue(targetKey, targetStringValue);
    

    在cucumber代码中,您可以用于读取:

    String value = Context.getValue(textOrKey) != null ? Context.getValue(textOrKey) : textOrKey;
    
  2. # 2 楼答案

    简单的解决方案是不要尝试过多地重复使用步骤定义。人们在Cucumber上犯的最大错误之一是试图通过步骤定义获得大量重用。只要步骤定义共享帮助器方法,那么有多少步骤定义真的一点都不重要

    下面是ruby,但我相信你可以翻译

    When 'I buy a ticket' do 
      @ticket = buy_ticket
    end
    
    When 'I buy a second ticket' do
      @second_ticket = buy_ticket
    end
    
    When 'I buy a discounted ticket' do
      @discount_ticket = buy_ticket
    end 
    
    When 'I buy a family ticket' do
      @family_ticket = buy_ticket
    end
    

    现在,接下来的场景可以讨论第二张票或家庭票

    注意:这里没有重复,所有步骤都调用相同的方法来创建票据(您可以使用参数来处理,购买票据可能需要支持额外的复杂性)