Yes!
Yes!
We pride ourselves that you can run our software almost anywhere. It can be a server, laptop, docker or VM. The tool is very lightweight, so it can be run on existing hardware or VMs as well, no need to order new server VMs. You do need to install or use any thick-client software (workstation) on your laptops; you use a web browser instead.
Not yet directly. Currently only via gRPC.
gRPC leverages HTTP/2 underneath and benefits from many of the efficiencies of HTTP/2. Traffic Parrot supports gRPC. Traffic Parrot does not support HTTP/2 directly yet, please reach out to us to have a look at the HTTP/2 beta version.
Yes!
We focus on providing a tool for in-depth exploratory testing. We simulate common error messages as well as very specialized ones like slow dripping connections that can take down your application (depending on your environment). As far as we know, no other tool can simulate some of the error scenarios we simulate.
Yes!
Do you have an example scenario you would like to test? It would help us understand better how to answer your question. Please, send the details to support@trafficparrot.com.
Yes!
Have a look at the performance guide.
Yes! Have a look at Virtualizing identical URLs.
Have a look at filtering recording.
No, but we work with tools in your existing environment that schedule tests.
Traffic Parrot does not run tests. We integrate with open source solutions like Selenium, Cucumber, JMeter, Postman and similar that do that. They are usually run in Jenkins or Team City, which is the industry standard. Those tools would run on a schedule with no issues. We would need to know more about your environment to understand better what problem you are trying to solve when asking this question. Please, send the details to support@trafficparrot.com.
Have a look at the Features and capabilities.
There are many components started by default by Traffic Parrot. This means it typically takes around 2-20 seconds depending on hardware specs for Traffic Parrot to start up. You can speed up the startup time by disabling some of them.
You can do that by disabling the GUI and gRPC warmup (see how to configure Traffic Parrot):
trafficparrot.gui.enabled=false trafficparrot.virtualservice.grpc.server.warmup.on.startup=falseIf you need additional startup time improvements please contact support.
Have a look at the extensions.
Have a look at the loading CSV file data.
We listen to our customers wherever possible. Where do you think we should go?
If you would like more details, please email us at support@trafficparrot.com.
We provide many advanced service virtualization features. Have a look at the User guide and Extensions.
Just remember, the general rule is: keep them as simple as possible, whenever possible. For more details read Focus on keeping it simple.
Yes! Have a look at the example below. It is a sample Fircosoft mapping that will copy the request id from request bytes message to the response. Download the the byte message mapping, put them in trafficparrot-x-y-z/jms-mappings directory and follow the IBM MQ tutorial to learn how to replay IBM MQ JMS messages. Contact us for more details.
{ "mappingId" : "bf6abc54-dac1-4aa3-af9e-6e551ed909eb", "request" : { "destination" : { "name" : "REQ.QL", "type" : "QUEUE" }, "bodyMatcher" : { "matches" : "\u0001.* E2 AG unit 374653764dfhfgg AccountH app WMQIN \\[FIRCOSOFT X\\] FMT V1.0 GEN CoreEngine 5.5.2.3\r\n\\[UNIT X\\] UB\r\n\\[BUSINESS X\\] BUSINESS\r\n\\[APPLI X\\] UB\r\n\\[UUMID X\\] \r\n\\[ReqMsgId \\] 3746523dhf362635\r\n\\[MsgType \\] AccountHandler\r\n\\[CustCode \\] 345553322\r\n\\[Firstname \\] Bob\r\n\\[Surname \\] Smith\r\n\\[MiddleName \\] John\r\n\\[MaidenName \\] Smith\r\n\\[Nationlity \\] Polish\r\n\\[Address1 \\] \r\n\\[Address2 \\] \r\n\\[Address3 \\] \r\n\\[Address4 \\] \r\n\\[CFIncorpPr \\] \r\n\\[CFOriginPr \\] Poland\r\n\\[CFCtyznsip \\] \r\n\\[CFResidnce \\] Poland\r\n\\[DOB \\] 1990-07-10\r\n\\[PasprtORID \\] AP124567890\r\n\\[CustCodeEt \\] \r\n\\[EmplyrName \\] \r\n\\[EmplyrAdd1 \\] \r\n\\[EmplyrAdd2 \\] \r\n\\[EmplyrAdd3 \\] \r\n\\[EmplyrAdd4 \\] \r\n\\[EmplyrAdd5 \\] \r\n\\[RegistrdNm \\] \r\n\\[TradeName \\] \r\n\\[RegistrdNb \\] \r\n\\[CFIncorpEt \\] \r\n\\[CFOriginEt \\] \r\n\\[CFRsidncEt \\] .*" }, "bodyType" : "PRINTABLE_CHARACTERS", "jmsMessageType" : "javax.jms.BytesMessage" }, "response" : { "destination" : { "name" : "RSP.QL", "type" : "QUEUE" }, "jmsResponseTransformerClassName" : "NO_TRANSFORMER", "text" : "\u0001002ROOT {{regex request.body '.?([0-9A-Za-z]+Camel-[0-9]+).*'}} E2 AG unit app 001HITS Stop: 6, Nonblocking: 0 Filter Engine DIN20161117140172-00000-2337 ", "bodyType" : "PRINTABLE_CHARACTERS", "jmsMessageType" : "javax.jms.BytesMessage" } }
Typically this happens when Java is not installed or detected properly. You can download Java here.
If this does not solve your issue, please contact us for support.
Have a look at the User guide and the Quick start
Have look at the Supported platforms and the Proof of concept guide
Please see Running from Maven for the recommended solution.
We recently had a remote WebEx engagement with a Fortune 300 company where they had tools running tests on-site in 30 minutes.
One of our main differentiators to our competition is we make our tool as easy to use as possible requiring no to minimal amounts of training.
You can find the details What is the "concurrent floating license"? and How may licenses do I need to purchase for 10 users in a shared QA environment?. Please email us for more details sales@trafficparrot.com.
Traffic Parrot is priced based on the number of floating licenses and features, protocols and technologies used. Please confirm your requirements by answering the following questions and we will provide budgetary pricing. To get more details, please email sales@trafficparrot.com
You need to add your private key to Traffic Parrot JKS, for example:
$ cd trafficparrot-x.y.z/certificates
$ keytool -importkeystore -srckeystore /path/authclient.jks -srcalias authclient -destkeystore trafficparrot-keystore-and-truststore.jks -destalias authclient
$ keytool -keypasswd -alias authclient -keystore trafficparrot-keystore-and-truststore.jks
If running on Windows download and install OpenSSL. You will also need Java 8 JDK (JDK 7 keytool will not work).
You will need the server public key (to verify the server identity) and the client private key (to authenticate on the server). Then you can test the connection with OpenSSL.
Notice: if running on Windows you get messages like “unknown option ¡key” or similar, the copy and paste from this PDF might not have worked. Retype the commands instead of copying and pasting them.
$ openssl s_client -servername localhost -connect localhost:3000 2>errors.txt | openssl x509 -text > server.pem
$ keytool -importkeystore -srckeystore authclient_key.jks -destkeystore authclient_key.p12 -deststoretype pkcs12
Convert p12 to pem:
$ openssl pkcs12 -in authclient_key.p12 -out authclient.key.pem -nocerts -nodes
$ openssl pkcs12 -in authclient_key.p12 -out authclient.crt.pem -clcerts -nokeys
$ openssl s_client -key authclient.key.pem -keyform PEM -cert authclient.crt.pem -certform PEM -CAfile server.pem -connect localhost:3000
GET HTTP/1.1
Traffic Parrot now supports matching of requests and responses by correlation id for JMS and IBM®MQ.
Find out more here.
Go to release notes and changelog.
How is your tool different to CA Lisa, DevTest, WireMock, Hovefly, Charles Proxy, Parasoft, etc.? See the tools comparison.
If you would like to define custom mappings see how to use extensions.
Currently, whenever you add a new custom Java or Handlebars extension, you need to update trafficparrot.properties and specify the class name. We know this is inconvenient. We have a task on the roadmap to eliminate the need to define those properties, and search for extensions automatically.
If you have any issues or suggestions email us at support@trafficparrot.com.
2017-08-12 23:48:44 WARN qtp1995250556-40 Error for /jmsManagement/start java.lang.NoClassDefFoundError: com/ibm/msg/client/jms/JmsFactoryFactory at com.trafficparrot.jms.IbmMq75ConnectionFactory.create(IbmMq75ConnectionFactory.java:25) at com.trafficparrot.jms.ProducerConsumerFactory.createConsumer(ProducerConsumerFactory.java:46) at com.trafficparrot.jms.QueueTrafficRecordService.startMessageConsumerAndProducer(QueueTrafficRecordService.java:57) at com.trafficparrot.jms.QueueTrafficRecordService.start(QueueTrafficRecordService.java:44) at com.trafficparrot.jms.JmsQueueVirtualService.startRecordingServices(JmsQueueVirtualService.java:80) at com.trafficparrot.jms.JmsQueueVirtualService.startRecording(JmsQueueVirtualService.java:50) at com.trafficparrot.jms.JmsManagementServlet.queue(JmsManagementServlet.java:388) at com.trafficparrot.jms.JmsManagementServlet.start(JmsManagementServlet.java:297) at com.trafficparrot.jms.JmsManagementServlet.post(JmsManagementServlet.java:92) at com.trafficparrot.jms.JmsManagementServlet.doPost(JmsManagementServlet.java:74) at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:812) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:587) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:221) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) at org.eclipse.jetty.server.Server.handle(Server.java:499) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257) at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.ClassNotFoundException: com.ibm.msg.client.jms.JmsFactoryFactory at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 28 more
javax.servlet.ServletException: java.lang.IllegalStateException: Insufficient configured threads: required=212 < max=200 for QueuedThreadPool[qtp318353283]@12f9af83{STARTED,8<=168<=200,i=0,r=20,q=0}[ReservedThreadExecutor@71b3bc45{s=0/20,p=0}]
If you see the following error when starting up, please check that the distribution zip file you are using matches the operating system you are using. Note that running Docker on Mac typically counts as using a Linux OS from Docker perspective.
Distribution zip file naming convention prefixes:/opt/trafficparrot/functions.sh: line 29: /opt/trafficparrot/jre/bin/java: cannot execute binary file: Exec format error /opt/trafficparrot/functions.sh: line 29: /opt/trafficparrot/jre/bin/java: No error information
"Address already in use" means Traffic Parrot could not start a server because the address it wanted to start it on is already in use by another process, either another traffic parrot instance or a different application.
Any computer/laptop/server can have many applications communicating over a TCP network connection. Traffic Parrot is one of them. They use hostnames and port numbers as addresses. This error tells us that the TCP ports traffic parrot tried to start using, are already in use.
If you see that error in the logs here a few things to consider:If there are no other traffic parrot instances running, it is possible the port numbers are used by other applications on your system. For example, in the error message below you can see main FAILED ServerConnector@2805805d{HTTP/1.1}{0.0.0.0:8080}: java.net.BindException: Address already in use That means traffic parrot tied to use port number 8080 but it is already in use by another process. To find out which process is using that port on Linux follow these instructions, and on Windows these instructions.
The bottom line is, you have to make sure all the ports traffic parrot uses are free before starting it. For a list of all port numbers traffic parrot uses see the trafficparrot.properties file and look for "port".2017-09-05 15:59:17 WARN main FAILED ServerConnector@2805805d{HTTP/1.1}{0.0.0.0:8080}: java.net.BindException: Address already in use java.net.BindException: Address already in use at sun.nio.ch.Net.bind0(Native Method) at sun.nio.ch.Net.bind(Net.java:463) at sun.nio.ch.Net.bind(Net.java:455) at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223) at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74) at org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:321) at org.eclipse.jetty.server.AbstractNetworkConnector.doStart(AbstractNetworkConnector.java:80) at org.eclipse.jetty.server.ServerConnector.doStart(ServerConnector.java:236) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) at org.eclipse.jetty.server.Server.doStart(Server.java:366) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) at com.trafficparrot.TrafficParrotCommunityServer.startGui(TrafficParrotCommunityServer.java:327) at com.trafficparrot.TrafficParrotCommunityServer.start(TrafficParrotCommunityServer.java:169) at com.trafficparrot.TrafficParrotCommunityServer.main(TrafficParrotCommunityServer.java:82) at com.trafficparrot.TrafficParrotCommunityServer.main(TrafficParrotCommunityServer.java:77)
extra_hosts: - "host.docker.internal:host-gateway"
This documentation is for an old version of Traffic Parrot. There is a more recent Traffic Parrot version available for download at trafficparrot.com