Rest_Assured接口测试-配置环境信息
在日常的工作中,可能存在多个测试环境,因此要执行用例,不能将接口请求域名在代码中写死,应该采用配置的形式,来读取环境信息
多个环境的测试用例
下面代码是执行了两个测试方法,可以看出,除了请求的域名,测试代码的内容是一样的,因此在多了一些重复性代码,导致代码的维护成本增加,也容易出错
public class TestEnv {
@Test
void testOrg(){
// 测试org环境接口
given()
.when()
.get("http://xxx.org/get") // 发送GET请求
.then()
.statusCode(200);
}
@Test
void testCeshiren(){
// 测试cer环境接口
given()
.when()
.get("https://xxx.cer/get") // 发送GET请求
.then()
.statusCode(200);
}
域名通过读取配置文件
解决上面问题,采用 将环境等公共信息写入yaml配置文件,采用哪个环境信息就将哪个环境写入default中,下面是写入org环境
获取环境信息属于是公共方法,可以将其写入BeforeAll中,减少代码的重复
default: org
org: http://xxx.org/get
cer: https://xxx.cer/get
将yaml配置中的数据读取HashMap中,通过 get(“default”)能得到使用的是哪个环境 再使用该环境名称 get到该环境的域名即可
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import io.restassured.RestAssured;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import static io.restassured.RestAssured.given;
/**
* 多套环境使用相同测试用例
* 环境信息写入yaml中
*/
public class EvnsTest {
@BeforeAll
static void setupClass(){
ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());
//读取文件
File yamlFile = new File("src/test/resources/envs.yaml");
//定义序列化结构
TypeReference<HashMap<String, String>> typeReference = new TypeReference<HashMap<String, String>>() {
};
HashMap<String, String> params = null;
try {
params = objectMapper.readValue(yamlFile, typeReference);
} catch (IOException e) {
throw new RuntimeException(e);
}
RestAssured.baseURI = params.get(params.get("default"));
}
@Test
void envs() {
given()
.log().all()
.when().get("/get")
.then().log().all().statusCode(200);
}
}