java - Junit 动态测试用例从文件中读取数据?

标签 java junit integration-testing junit4

我有一个场景,使用来自文本文件的有效负载来测试 api。文件中的每一行代表一个有效负载。如何根据上述场景动态生成测试用例。

我尝试如下从其他测试调用一个测试,但我只能看到通过的父测试。

import com.jayway.restassured.http.ContentType;
import com.jayway.restassured.response.Response;

import org.junit.Before;
import org.junit.Test;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

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

public class ExampleTest
{


    private TestUtil testUtil;


    String payload;


    @Before
    public void init()
    {
            testUtil = new TestUtil();
    }

    @Test
    public void runAllTests() throws IOException
    {


        List<String> request = getFileDataLineByLine();

        for(String fileRequest:request)
        {
            payload=fileRequest;
            if(null!=payload) {
                testExampleTest();
            }
        }
    }

    @Test
    public void testExampleTest()
    {

        String uri = "http://localhost:8080/url";
        Response response = given()
                .contentType(ContentType.JSON)
                .body(payload)
                .post(uri)
                .then()
                .statusCode(200)
                .extract()
                .response();

    }


    private List<String>  getFileDataLineByLine() throws IOException {

        File file = testUtil.getFileFromResources();
        if (file == null)
            return null;
        String line;
        List<String> stringList = new ArrayList<>();
        try (FileReader reader = new FileReader(file);
             BufferedReader br = new BufferedReader(reader))
        {
            while ((line = br.readLine()) != null)
            {
                stringList.add(line);
                System.out.println(line);
            }
        }

        return stringList;
    }

文件读取类:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;

public class TestUtil
{

    public File getFileFromResources()throws IOException
    {

        TestUtil testUtil = new TestUtil();
        File file = testUtil.getFileFromResources("testdata.txt");
        return file;
    }


    // get file from classpath, resources folder
    private File getFileFromResources(String fileName) {

        ClassLoader classLoader = getClass().getClassLoader();

        URL resource = classLoader.getResource(fileName);
        if (resource == null) {
            throw new IllegalArgumentException("file is not found!");
        } else {
            return new File(resource.getFile());
        }

    }



}

如何通过从文件中获取输入来动态生成测试用例?

最佳答案

如果您可以转换您的文件JUnitParams支持从 CSV 加载数据。

使用上述链接存储库中的示例:

public class PersonTest {

    @Test
    @FileParameters("src/test/resources/test.csv")
    public void loadParamsFromCsv(int age, String name) {
        assertFalse(age > 120);
    } 
}

关于java - Junit 动态测试用例从文件中读取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61577808/

相关文章:

java - 如何使用JDK 1.8将Hadoop AWS jar添加到Spark 2.4.5?

java - 将 Shiro 与 OAuth 和 JWT 结合使用

java - 如何强制ant打印junit的报告带颜色

android - 测试 Activity 是否返回预期结果

java - Maven测试挂起

ruby-on-rails - Rspec:在 Devise::OmniauthCallbacksController 子类中测试重定向

java - 无法解析相应的 jni 函数

ruby-on-rails - 工厂少女协会自引用父模型

java - cucumber junit中的标签继承

java - 使用最新版本的 Scala 会出现 java.lang.ClassNotFoundException : scala. Function1$class