最近为了自动化测试平台上能覆盖mongodb写数据相关的测试点,参考开发写的代码,搞了一个查询mongo的小工具。
首先是把开发定义的数据结构放到一个DTO里面。(一般开发都定义在自己代码里了,照着抄就行)
然后再定一个config
@Configuration
public class MongoDBConfig{
@Value("芒果地址")
private String url;
@Bean
public MongoDbFactory mongoDbFactory(){
System.out.println("url:"+url);
MongoClientURI uri = new MongoClientURI(url);
return new SimpleMongoDbFactory(uri);
}
最后定一个controller调用,collection是集合,之前的文章有介绍
@RestController
public class MongoDBController {
@Autowired
MongoTemplate mongotemplate;
@RequestMapping(value="/getMongo",method = RequestMethod.GET)
@ResponseBody
public BaseReuseMBDTO queryLatestOne(@RequestParam(value = "key",required = true) String 你的key,
@RequestParam(value = "collection",required = true) String col) {
Query query = new Query();
//这里的逻辑和开发的逻辑需要保持一致,不然未来断言出来不准确
query.addCriteria(Criteria.where("key").is(你的key));
query.with(new Sort(Sort.Direction.DESC, "timestamp"));
//集合名称
BaseReuseMBDTO mongores = mongotemplate.findOne(query, BaseReuseMBDTO.class, col);
return mongores;
}
可能会遇到接口里面有特殊字符,再加一个tomcat的config,解决
@Configuration
public class TomcatConfig {
@Bean
public TomcatServletWebServerFactory webServerFactory() {
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
factory.addConnectorCustomizers((Connector connector) -> {
connector.setProperty("relaxedPathChars", "\"<>[\\]^`{|}");
connector.setProperty("relaxedQueryChars", "\"<>[\\]^`{|}");
});
return factory;
}
}
实际场景下的运用:
因为测试平台和中间件在2个服务器上,服务器之间存在几秒钟误差,所以加了一个时间容错。
def check_mongo(request,response):
timesleep(3)
url = "http://XXXXXXX/getMongo"
params = {
"rowkey": request["params"]["rowkey"],
"collection": request["params"]["collection"],
"isMock": request["params"]["isMock"],
"ts": str(int(request["params"]["timestamp"]) - 3600),
}
try:
res_1 = requests.get(url=url, params=params)
if res_1.text == "":
response.json['res'] = None
res = res_1.json()
response.json['res'] = res
except:
print('something wrong')