测试时环境可能会发生变化,前期可能会在测试环境上进行,产品上线后可能又会在生产环境上进行测试,这样就需要改变url,对于请求来说,它的Host是固定的,无论在测试环境还是开发环境中;不同的就是域名背后真正的请求地址,那么只需要改变url中的请求ip地址即可。
利用yaml文件进行数据文件驱动
- 先看如何对yaml文件进行数据操作
官方地址:https://github.com/FasterXML/jackson-dataformats-text/tree/master/yaml
阮一峰教程:http://www.ruanyifeng.com/blog/2016/07/yaml.html
从官网中可以得到如下信息
Maven dependency
To use this extension on Maven-based projects, use following dependency:
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
<version>2.9.2</version>
</dependency>
Usage
Simple usage
Usage is as with basic JsonFactory; most commonly you will just construct a standard ObjectMapper with com.fasterxml.jackson.dataformat.yaml.YAMLFactory, like so:
ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
User user = mapper.readValue(yamlSource, User.class);
一、利用官网提供的信息可以封装方法对yaml文件进行操作:
currentEnv: PlatformDev
env:
PlatformTest:
"aaaa.com": "192.168.x.xxx"
PlatformDev:
"aaaa.com": "47.103.xx.xxx"
package com.appApi;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import java.io.IOException;
import java.util.HashMap;
public class ApiConfig {
private static ApiConfig apiConfig;
public String currentEnv = "PlatformDev";
public HashMap<String,HashMap<String,String>> env;
public static ApiConfig getInstance(){
if (apiConfig == null){
apiConfig = load("/data/ApiEnvConfig.yaml");
}
return apiConfig;
}
public static ApiConfig load(String path){
ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
try {
return mapper.readValue(ApiConfig.class.getResource(path),ApiConfig.class);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
二、获取Host和组成新的URL,Host保持不变,将url中设置为新的地址进行替换
public String[] updateUrl(String url){
//fixed:多环境支持,替换url中ip地址,更新header的Host
HashMap<String,String> Hosts = ApiConfig.getInstance().env.get(ApiConfig.getInstance().currentEnv);
final String[] Host = new String[1];
final String[] newUrl = new String[1];
Hosts.entrySet().forEach(entry->{
if (url.contains(entry.getKey())){
Host[0] = entry.getKey();
newUrl[0] = url.replace(entry.getKey(),entry.getValue());
}
});
return new String[]{Host[0], newUrl[0]};
}
三、调用updateUrl方法,重组后发送请求即可
String[] upUrl = updateUrl(restful.url);
return requestSpecification.log().all()
.header("Host",upUrl[0])
.request(restful.method,upUrl[1])
.then().log().all().extract().response();