This article lists the common problems & solutions that performance engineers come across when testing flex applications.
Problem #1 : Overlapped
transmission error occurs when a flex script is run for the first time
from controller. But the same script works fine in VuGen.
Error -27740: Overlapped transmission of request to “www.url.com” for URL“http://www.url.com/ProdApp/” failed: WSA_IO_PENDING.
Solution : The
transmission of data to the server failed. It could be a network,
router, or server problem. The word Overlapped refers to the way
LoadRunner sends data in order to get a Web Page Breakdown. To resolve
this problem, add the following statement to the beginning of the script
to disable the breakdown of the “First Buffer” into server and network
time.
web_set_sockets_option (“OVERLAPPED_SEND”, “0″);
Problem #2 : During
script replay Vugen crashes due to mmdrv error. mmdrv has encountered a
problem and needs to close. Additional details Error: mmdrv.exe caused
an Microsoft C++ Exception in module kernel32.dll at 001B:7C81EB33,
RaiseException () +0082 byte(s)
Solution : The cause of this issue is unknown. HP released a patch that can be downloaded from their site.
Problem #3 : AMF error: Failed to find request and response
Solution : LoadRunner
web protocol has a mechanism to prevent large body requests to appear
in the action files, by having the body in the lrw_custom_body.h. In AMF
and Flex protocol, LR cannot handle these values and fails to generate
the steps. Follow these steps to fix the problem:
1. Go to the “generation log”
2. Search for the highest value for “Content-Length”
3. Go to <LoadRunner installation folder>/config
4. Open vugen.ini
5. Add the following:
[WebRecorder]
BodySize=<size found in step (2)>
6. Regenerate the script
Problem #4 : There are duplicate AMF calls in the recording log as well as in the generated code.
Solution : Capture
level may be set to Socket and WinInet, make sure under Recording
Options –> Network –> Port Mapping –> Capture level is set to
WinInet (only)
Problem #5 : A
Flex script which has Flex_AMF and Flex_RTMP calls, on replay will have
mismatch in the tree view between the request and the response. After
looking in the replay log we can see that correct calls are being made
but they are being displayed incorrectly in the tree view (only the
replay in tree view is incorrect). Sometimes it shows the previous or
next Flex_AMF call in the tree view in place of the Flex_RTMP call.
Solution : This
issue has been identified as a bug by R&D in LR 9.51 and LR 9.52.
R&D issued a new flexreplay.dll which resolved the issue and will be
included in the next Service Pack.
Problem #6 : Flex protocol script fails with “Error: Encoding of AMF message failed” or “Error: Decoding of AMF message failed”
Solution : The
cause for this error is the presence of special characters (>,
<, & etc…) in the flex request. Send the request enclosed
in CDATA
Example: <firmName>XXXXXXX & CO.
INC.</firm Name> in script to
<firmName><![CDATA[XXXXXXXXXXXX & CO.
INC.]]></firmName>
Problem #7 : When
creating a Multi Protocol Script that contains FLEX and WEB protocols
sometimes VuGen closes automatically without any warning/error message
displayed. This happens when the Web protocol is set to be in HTML Mode.
When in URL mode the crash does not occur. There is no error code
except a generic Windows message stating the VuGen needs to close.
Solution : This
issue can be seen on Machines that are running on Windows XP, and using
Mfc80.dll. Refer to Microsoft KB Article in the link below that
provides a solution for the same. Microsoft released a hot fix for
Windows specific issue that can cause VuGen to close.
http://support.microsoft.com/kb/961894
Problem #8 : When
recording a FLEX script, RTMP calls are not being captured correctly so
the corresponding FLEX_RTMP_Connect functions are not generated in the
script.
Solution : First set the Port Mapping (
Choose Recording options –> Network –> Port Mapping –> set Capture Level to ‘Socket level and WinINet level data’)
set to ‘Socket level and if this doesn’t help, follow the next step.
Record a FLEX + Winsock script. In Port mapping section, Set the
Send-Receive buffer size threshold to 1500 under the options. Create a
new entry and select Service ID as SOCKET, enter the Port (such as 2037
or whatever port the FLEX application is using for connection),
Connection Type as Plain, Record Type as Proxy, and Target Server can be
the default value(Any Server).
Problem #9 : Replaying
a Flex script containing a flex_rtmp_send() that has an XML argument
string may result in the mmdrv process crashing with a failure in a
Microsoft Dynamics.
Solution : The
VuGen script generation functionality does not handle the XML parameter
string within the function correctly. This results in the mmdrv process
crashing during replay. If you have the 9.51 version, installing a
specific patch (flex9.51rup.zip) or service pack 2 will resolve the
problem
Problem #10 : During
the test executions in controller, sometimes the scripts throw an error
‘Decoding of AMF message failed. Error is: Externalizable parsing
failed’.
Solution : This
is mostly due to the file transfer problem. It is always advised to
place the jar files in a share path common to all load agents.
Other Flex Supported Load Testing Tools
There are other Commercial & Open Source tools available, that
support the flex application testing. Some tools (For example, Neoload)
have much considerable support for RTMP even when compared to
LoadRunner. The way all these tools test the flex application is quite
similar, each tool has its own AMF/XML conversion engine, which
serializes the binary data to readable XML format
Open Source
- Data Services Stress Testing Framework
- JMeter
Commercial Tools
- Silk Performer by Borland
- NeoLoad by Neotys
- WebLOAD by RadView
Performance Improvement Recommendations
When it comes to performance improvement of an application, our first
concern would be to enhance the scalability for a specified hardware
& software configuration.
- In case of flex, the scalability issues derive from the fact that
BlazeDS is deployed in a conventional Java Servlet container, and
performance/scalability of BlazeDS also depends on the number of
concurrent connections supported by the server such as Tomcat,
WebSphere, Web Logic … BlazeDS runs in a servlet container, which
maintains a thread pool.
- Each thread is assigned to client request and returns to a reusable
pool after the request is processed. When a particular client request
uses a thread for a longer duration, the thread is being locked by that
corresponding client till the request is processed. So the number of the
concurrent users in BlazeDS depends on the number of threads a
particular servlet container can hold.
- While BlazeDS is preconfigured with just 10 simultaneous
connections, it can be increased to several hundred, and the actual
number depends on the server’s threading configuration, CPU and the size
of its JVM heap memory. This number can also be affected by the number
of messages processed by server in the unit of time and size of the
messages.
- Tomcat or WebSphere can support upto several hundred of users, and
any servlet container that supports Servlets 3.0, BlazeDS can be used in
the more demanding applications that require support of thousands
concurrent users.
Based on our project experience in performance testing Flex
applications using LoadRunner we have pointed out some of the common
problems that might arise during performance testing Flex applications.
This will save you a lot of time as we have also provided the solutions
to troubleshoot the errors if they occur.
Thanks For Reading Blog. Know More About:
Flex