How to enable amf sampler type - apache-flex

I want to record script using amf proxy server but in http sampler setting amf type is missing. How should i enable amf type in amf proxy server.

Try first existent solutions:
1. AMF Plugin for JMeter
This will add the following new components:
AMF Request
AMF Request Defaults
AMF Proxy Server
that will allow you to test your app using the AMF3 protocol:
Record AMF and HTTP traffic with the AMF Proxy Server
Translate AMF to XML for easy manipulation
Use variables to provide each virtual user with unique Client and Session IDs
Store response XML in a variable for assertion and value extraction
Review AMF responses as XML
NOTE: not supported in JMeter 2.6, works with JMeter 2.5.1.
...And these two as possible addition:
2. jmeter-amf-visualizer
JMeter visualizer AMF response.
3. jmeter-amfsampler
JMeter sampler for testing Flex/BlazeDS applications using Adobe's AMF protocol over HTTP.
4. UbikLoadPack Flex/AMF plugin
Commercial plugin from UBIK Load Pack.

Apache JMeter does not propose AMF Sampler due to License incompatibility of BlazeDS with Apache licence.
Regarding your login issue you should check that you add a CookieManager to your test plan.
Then check you add the Java beans used by your Flex Application to send objects to Flex layer.
You can have a look at:
https://www.ubik-ingenierie.com/blog/load-testing-flex-with-jmeter-made-easy/
https://www.ubik-ingenierie.com/blog/ubikloadpack-flex-amf-plugin-4-0-for-apache-jmeter-released/
Performance testing Flex applications

Related

Grpc-Web Client in Java

I'm trying to connect to a grpc-service from a Java client. The problem is that this service is currently supporting only grpc-web over http1.1, this is because of a limitation of supporting http2 in Azure App service where the service is deployed.
The grpc-java client liberary from io.grpc only supports grpc over http2 protocol, which maskes sense, and unfortenatly is not working for me.
I managed to consume a service using HTTP client from apache and okhttp3 but this works for unary calls and it didn't work for a server-side streaming service.
Is any one aware of a grpc-web java client liberary that I could use or a work arround using convenienal Http for reading grpc-web server-side streaming service.
If I understand your question correctly, you want a Java client for gRPC-Web so that your client can talk HTTP/1.1 through a gRPC-Web proxy (e.g. Envoy gRPC-Web) because you're unable to talk HTTP/2 directly to your service because of the Azure networking limitation?
In theory this should be possible. The JavaScript implementation is because, in-browser, there's no alternative except JSON transcoding. The JavaScript implementation does implement server-side streaming, which is another requirement and confirms that this should be possible over HTTP/1.1.
However, in a quick search I found no other (i.e non-JavaScript) client implementations of gRPC-Web.

How to collect and pass b3 propagation headers in grpc client request using opentracing api?

I was using https://github.com/opentracing-contrib/java-grpc with jaegar tracer for enabling tracing in my grpc client program. Now I would like to use istio service mesh to handle tracing in server side. https://istio.io/latest/docs/tasks/observability/distributed-tracing/overview/ .
So the grpc client now needs to send the appropriate tracing HTTP headers along with each grpc client request so that istio can send those metrics to Jaegar. Does anyone have a working example of fetching the trace span information in grpc client and include the corresponding b3 propagation headers in a grpc client request?
Following http headers need to be passed in a java/C# grpc client request :
x-request-id
x-b3-traceid
x-b3-spanid
x-b3-parentspanid
x-b3-sampled
x-b3-flags
x-ot-span-context
Thanks.
Have a look at the OpenTelemetry-Java-Instrumentation project. It can provide automated tracing of your application without needing to write custom code. It uses an instrumentation agent that runs in the JVM beside your application.
java -javaagent:path/to/opentelemetry-javaagent-all.jar \
-jar myapp.jar
It supports exporting metrics to Jaeger
It also supports propagating headers to downstream requests.
They have just added support for b3-multi headers so a new release should be available in the coming days

Embedded Jetty : setting Protocol Version on a HttpServletRequest

In my application I have HTTP clients connecting to an embedded Jetty server, and during the communication between the server and the http client there is the need to change the Protocol Version to something different than http 1.1. How can this be achieved?
I am thus looking for the equivalent of getHttpVersion() on the HttpServletRequest. The content exchanged between the client and the server is plain vanilla HTTP, the only thing that has to change is the protocol version, e.g. it has to become some application defined string, different from HTTP x.y or anything that can be achieved through protocol Upgrades.

How can I have a wcf service use my asp.net request/response filter?

I have an older soap web service using microsoft's WSE library. It's now not supported in our target .net framework and operating system. I have converted the service to use wcf on the server but the client will still use the old web-service proxy. The problem I am currently having is that the client compress the http request to save us bandwidth. In The asp.net application I have a httpmodual that detects if the client sent use a gzip/deflate based on the content-encoding of the request header. Now that the service is wcf it does not read from the asp.net request stream and the decompression is not working. Clients that do not compress the request do currently work. How could I make the wcf service integrate with the asp.net pipeline?
It is very unusual to compress HTTP requests. See https://serverfault.com/q/56700, Apache has some support for it, but I'm pretty sure ASP.NET/IIS does not have any native support. So you'll have to accept the stream in raw form and decode it yourself.

How to implement HTTP Tunneling

I've written a Flash (Flex) client connecting to a back-end server to exchange data.
I've also written my server from scratch, and it serves two purposes:
(1) Web (HTTP) Server- By default listens on port 80
(2) Socket/Application- Server - By default listens on port 443
Just FYI, both servers run in the same process space, for convenience reasons. They are not expected to handle massive loads, so I'm fine with that.
As soon as the Flash client is served to the browser from the HTTP socket, the client attempts to open an XMLSocket to the Socket/Application server.
I now want to implement HTTP tunneling, so that my client can connect to the Application server even if the user is behind a firewall. I do not want any external servers involved (proxies etc.) - simply use the servers I already have.
My questions:
(1) Is it better to use port 443 for that? (does it better fool firewalls?)
(2) As far as I can see, what I am required to do, is just ensure that my actual application data is simply encapsulated in an HTTP structure (preceded by a dummy HTTP header), both from the client and server sides. Is that so or am I missing anything here?
(3) Do I need to keep hiding/encapsulating my data every message I send through the socket, or can I just encapsulate the first message when opening the connection?
Thanks in advance guys!
Fuzz
Don't reinvent the wheel - use remoting via AMF protocol. AMF an HTTP-based binary format that performs serialization between ActionScript (MXML) and server side languages. Technically, this is HTTP tunneling.
Adobe offers BlazeDS (open source) and LCDS (commercial) implementations of AMF for AS/Java, but there are third-party implementations of AMF for AS/PHP, AS/Python, AS/Ruby, AS/.Net.
BTW, AMF is an open source format.

Resources