Java 需要关于编写自动RESTAPI测试的帮助吗?我怎样才能提高?

Java 需要关于编写自动RESTAPI测试的帮助吗?我怎样才能提高?,java,rest,automated-tests,testng,Java,Rest,Automated Tests,Testng,我正在努力改进为RESTAPI编写功能自动测试的工作 以下是一个示例: Q1有人能批评我的测试,或者看看是否有改进的余地吗 Q2我还计划在AppTest类中编写一系列API测试……在执行一系列API测试时,是否有一种方法、函数或实用程序可以将响应存储在文件或其他文件中 package com.jaway.restassured.rest_assured; import static com.jayway.restassured.RestAssured.get; import java.ut

我正在努力改进为RESTAPI编写功能自动测试的工作

以下是一个示例:

Q1有人能批评我的测试,或者看看是否有改进的余地吗

Q2我还计划在AppTest类中编写一系列API测试……在执行一系列API测试时,是否有一种方法、函数或实用程序可以将响应存储在文件或其他文件中

 package com.jaway.restassured.rest_assured;

import static com.jayway.restassured.RestAssured.get;

import java.util.List;

import org.json.JSONException;
import org.json.JSONArray;
import org.testng.Assert;
import org.testng.*;
import org.testng.annotations.Test;
import org.testng.annotations.*;
import org.testng.annotations.DataProvider;
import org.testng.asserts.SoftAssert;


import com.jayway.restassured.response.*;

public class AppTest {

    String url = "http://restcountries.eu/rest/v1/name/";

    @Test(dataProvider = "getData")
    public void getRequestFindCapital(String country, String expected_capital, String expected_region, String expected_trans_it ) throws JSONException{

        SoftAssert softAssert = new SoftAssert();
        //Make a request to fetch the capital of norway
        Response resp = get(url + country);
        System.out.println(url + country);
        JSONArray jsonResponse =new JSONArray(resp.asString());
        System.out.println(resp.asString());

        //Declare variables
        String actual_capital = jsonResponse.getJSONObject(0).getString("capital"); 
        String actual_region = jsonResponse.getJSONObject(0).getString("region");
        List<Object> actual_translations = resp.jsonPath().getList("translations.it");
        String actual_translations_string  = actual_translations.toString().replaceAll("[\\[\\]]", "");
        System.out.println(actual_translations);
        System.out.println(actual_translations_string);

        softAssert.assertEquals(actual_capital, expected_capital);
        softAssert.assertEquals(actual_region, expected_region);
        softAssert.assertEquals(actual_translations_string, expected_trans_it);
        softAssert.assertAll();
    }

     @DataProvider
         public Object[][] getData() {
             return new Object[][]{
                 {"Norway", "Oslo","Europe", "Norvegia"}, 
                 {"Britain", "London","Europe","Regno Unito"}, 
                 {"Bangladesh","Dhaka","Asia","Bangladesh"}};
         }

}
package com.jaway.restassured.rest\u surved;
导入静态com.jayway.restassured.restassured.get;
导入java.util.List;
导入org.json.JSONException;
导入org.json.JSONArray;
导入org.testng.Assert;
导入org.testng.*;
导入org.testng.annotations.Test;
导入org.testng.annotations.*;
导入org.testng.annotations.DataProvider;
导入org.testng.asserts.SoftAssert;
导入com.jayway.restassured.response.*;
公共类应用程序测试{
字符串url=”http://restcountries.eu/rest/v1/name/";
@测试(dataProvider=“getData”)
public void getRequestFindCapital(字符串国家/地区、字符串预期资本、字符串预期区域、字符串预期交易)引发JSONException{
SoftAssert-SoftAssert=新的SoftAssert();
//提出要求去挪威首都
响应响应=获取(url+国家/地区);
System.out.println(url+国家/地区);
JSONArray jsonResponse=新的JSONArray(resp.asString());
System.out.println(resp.asString());
//声明变量
String actual_capital=jsonResponse.getJSONObject(0.getString(“capital”);
String-actual_region=jsonResponse.getJSONObject(0.getString(“region”);
List actual_translations=resp.jsonPath().getList(“translations.it”);
字符串实际\u翻译\u字符串=实际\u翻译.toString().replaceAll(“[\[\\]]”,“”);
System.out.println(实际翻译);
System.out.println(实际\u翻译\u字符串);
资产质量(实际资本、预期资本);
assertEquals(实际的\u区域,预期的\u区域);
assertEquals(实际翻译字符串,预期翻译字符串);
softAssert.assertAll();
}
@数据提供者
公共对象[][]获取数据(){
返回新对象[][]{
{“挪威”、“奥斯陆”、“欧洲”、“挪威”},
{“英国”、“伦敦”、“欧洲”、“雷格诺统一”},
{“孟加拉国”、“达卡”、“亚洲”、“孟加拉国”};
}
}
  • 你只会走向幸福之路。因此,为了改进测试,您可能需要添加一些错误的输入,并验证是否会收到正确的错误。例如,您可以提供不存在的国家/地区并验证答案。 通过这种方式,您可以添加一些功能测试。 我还建议添加一些非功能测试,比如性能测试,以测量您的REST延迟
  • 很少有实用程序允许保存REST调用和响应。我最喜欢的是Chrome的PostMan插件(只需在Chrome商店中搜索)
    您可能还想查看用于编写功能测试的框架,因为它大大简化了编写测试用例。我个人觉得JUnit或TestNG只适用于需要存根/模拟的单元测试

    您将能够用简单的英语编写测试用例,如:

    Feature: Countries API
      Scenario: Retrieve Capital City
        Given the specified country is "United States"
        When I make the API request
        Then the response should be valid JSON
         And it should contain property "city" with value "Washington, D.C."
    

    然后你就可以用任何一个Cumber实现为这些英语句子编写实现。在本例中,我最喜欢的是Node.js,但它们有几个实现。这种方法的优点是,现在您甚至可以让团队中的非技术成员编写端到端测试用例。

    我通常用OpenEJB或Arquillian编写ITest。使用OpenEJB,测试类可以在启动测试之前启动嵌入式容器。您可以在此处查看示例:。是否符合JEE6标准,JEE7尚未发布…

    现在是否符合JEE7标准