http回调测试自动化实践

栏目: 后端 · 前端 · 发布时间: 7年前

内容简介:http回调测试自动化实践

背景:视频云点播支持用户设置回调地址,在上传或者转码结束后向用户的回调地址以http协议发送回调信息,例如上传完成后的视频信息,视频转码信息。 之前的测试方法:回调

背景: 视频 云点播支持用户设置回调地址,在上传或者转码结束后向用户的回调地址以http协议发送回调信息,例如上传完成后的 视频 信息,视频转码信息。

之前的 测试 方法:回调地址设置为 测试 服务器 地址, 自动化 脚本跑的同时去测试 服务器 查看回调信息。

缺点:随着业务扩展,点播依赖服务和NTS集群扩展迅速,每次 回归 量增大,回调测试无法自动化会耗费大量时间,同时,人眼观察回调,当测试代码发送大量请求,回调信息与发送的请求难以一一对应,可能请求后发但是回调先至。

问题的解决方式:

1、在运行测试代码的机器上找到可用端口

2、起HttpServer并监听端口。

3、将起的HttpServer地址设置成点播回调地址

4、HttpServer解析收到的回调信息,并与点播业务发送的请求信息进行断言

5、关闭HttpServer

下面从代码层面逐一实现上面四个步骤

一、找到可用端口:设置从指定端口开始向后遍历,查看端口是否可用。

public static int check(int port) {

int _port;

try {

ServerSocket sock = new ServerSocket(port);

sock.close();

_port = port;

System.out.println("Port : " + port + " is Ok");

} catch (IOException e) {

System.out.println("Port : " + port + " is occupied ,Try to port : " + (port + 1));

_port = port + 1;

check(_port);

}

return _port;

}

再用String addrip = InetAddress.getLocalHost()。getHostAddress();  得到本机IP,这样就可以获得起HttpServer服务需要的地址。

二、起HttpServer并监听端口

public static String callbackHttpServer(int minPort) throws IOException {

int port;

String addrip = InetAddress.getLocalHost()。getHostAddress();

port = check(minPort);

String ipAddress = addrip + ":" + port;

System.out.println("address is " + ipAddress);

InetSocketAddress addr = new InetSocketAddress(port);

server = HttpServer.create(addr, 0);

MyHandler myHandler=new MyHandler();

server.createContext("/", myHandler);

server.setExecutor(Executors.newCachedThreadPool());

server.start();

System.out.println("Server is listening on port : " + port);

return ipAddress;

}

三、解析HttpServer收到的消息

public void handle(HttpExchange exchange) throws IOException {

String requestMethod = exchange.getRequestMethod();

if (requestMethod.equalsIgnoreCase("POST")) {

Headers responseHeaders = exchange.getResponseHeaders();

responseHeaders.set("Content-Type", "text/plain");

exchange.sendResponseHeaders(200, 0);            //给请求发送方返回200的响应码,否则对方一直收不到响应。

InputStream requestBody = exchange.getRequestBody();          //收到的回调信息

Headers requestHeaders = exchange.getRequestHeaders();

Set<String> keySet = requestHeaders.keySet();

Iterator<String> iter = keySet.iterator();           //如需post请求的header信息,则可解析出来

String body = slurp(requestBody, 1024);          //将InputStream 类型转换为String类型

JsonObject messageBody = new JsonParser()。parse(body)。getAsJsonObject();

reparam=messageBody;

this.setReparam(reparam);

System.out.println("request body is >>>>>:" + this.getReparam());    //打印出回调请求体的内容

requestBody.close();

}

}

四、关闭HttpServer:

收到回调信息或者监听超时还未收到回调信息,则关闭HttpServer服务。

public JsonObject getCallbackBody()throws IOException, InterruptedException

{

int i=0;

while (true) {

if(MyHandler.getReparam()!=null||i++>30)

break;

else

TimeUnit.SECONDS.sleep(5);

}

String type=MyHandler.judgeCallbackType(MyHandler.getReparam());

System.out.println("type is "+type);

JsonObject param=MyHandler.getReparam();

System.out.println("jsonObject is : "+param.toString());

MyHttpServer.stopHttpServer();

System.out.println("listen service is closed ");

return param;

}

}

总结:如上即实现了http回调信息的解析及自动化,在应用中,需要保证起HttpServer的地址业务服务器可以telnet通,否则,业务服务器发送过去的post请求会被拒绝。

原文转自: http://qa.blog.163.com/blog/static/190147002201732491154667/


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

架构真经

架构真经

马丁L. 阿伯特(Martin L. Abbott)、迈克尔T.费舍尔(Michael T. Fisher) / 机械工业出版社 / 2017-4 / 79

前言 感谢你对本书第2版感兴趣!作为一本入门、进修和轻量级的参考手册,本书旨在帮助工程师、架构师和管理者研发及维护可扩展的互联网产品。本书给出了一系列规则,每个规则围绕着不同的主题展开讨论。大部分的规则聚焦在技术上,少数规则涉及一些关键的思维或流程问题,每个规则对构建可扩展的产品都是至关重要的。这些规则在深度和焦点上都有所不同。有些规则是高级的,例如定义一个可以应用于几乎任何可扩展性问题的模......一起来看看 《架构真经》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具