SoapUI 可以模拟soap serve端

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/coderALEX/article/details/84866496

Key words:SoapUI mock SOAP service

最近一个任务有一个环节是用Perl发送SOAP协议包到服务端并收到服务端的确认回复

现在的情况:

  1. Perl作为client从Linux虚拟机发送Request到本地
  2. 在本地启用一个Node.js脚本作为服务器返回Response
  3. service由一个WSDL文件定义

实现:

  1. Perl使用了SOAP::Lite包发送soap
  2. Node.js 使用node-soap

Node.js的实现类似下面

 var myService = {
      MyService: {
          MyPort: {
              MyFunction: function(args) {
                  return {
                      name: args.name
                  };
              },

              // This is how to define an asynchronous function.
              MyAsyncFunction: function(args, callback) {
                  // do some work
                  callback({
                      name: args.name
                  });
              },

              // This is how to receive incoming headers
              HeadersAwareFunction: function(args, cb, headers) {
                  return {
                      name: headers.Token
                  };
              },

              // You can also inspect the original `req`
              reallyDetailedFunction: function(args, cb, headers, req) {
                  console.log('SOAP `reallyDetailedFunction` request from ' + req.connection.remoteAddress);
                  return {
                      name: headers.Token
                  };
              }
          }
      }
  };

  var xml = require('fs').readFileSync('myservice.wsdl', 'utf8');

  //http server example
  var server = http.createServer(function(request,response) {
      response.end('404: Not Found: ' + request.url);
  });

  server.listen(8000);
  soap.listen(server, '/wsdl', myService, xml);

  //express server example
  var app = express();
  //body parser middleware are supported (optional)
  app.use(bodyParser.raw({type: function(){return true;}, limit: '5mb'}));
  app.listen(8001, function(){
      //Note: /wsdl route will be handled by soap module
      //and all other routes & middleware will continue to work
      soap.listen(app, '/wsdl', myService, xml);
  });

问题:

WSDL的定义中,SOAP所传输的数据(即body中的内容)使用base64加密,导致Node.js的Response中内容为空,我认为应该是该框架没有将base64解密后解析为对象的功能。我找了很久也没有找到相关信息,尽管我知道通过纯JavaScript应该可以实现我想要的结果,可是那样的话效率太低了。

于是我想看看有没有其他的库可以直接用,结果发现SoapUI这个神器竟然可以模拟server(它称之为mockServcie,所以直接搜索soap server很难搜到他,可见搜索信息的时候关键词的重要性),要是早点知道的话很多时候不管是client还是server的测试,完全不需要自己写。

猜你喜欢

转载自blog.csdn.net/coderALEX/article/details/84866496