Get API request not working in Jmeter with a "+" sign - java

There is a get request which is filtering through + while trying to access from the browser and its working.
But when trying to do the same in case of Jmeter or postman its not working.
The request which is working from the browser is in below format.
/jon/doe/foo/baar/Number+123456789
How can I achieve the same in Jmeter?

If you can successfully execute the request in browser you should be able to record it using JMeter's HTTP(S) Test Script Recorder
Prepare JMeter for recording. The easiest way of doing this is using JMeter Templates Feature
From JMeter's main menu choose File -> Templates -> Recording and click "Create"
Select HTTP(S) Test Script Recorder and click "Start"
Prepare your browser for recording. Refer its documentation with regards to how to configure it to use proxy. I would recommend going for Mozilla Firefox, just like JMeter it's free and open source, moreover it has separate proxy configuration which is not derived from the operating system.
From ☰ menu choose `Preferences -> General -> Network Proxy -> Settings
Use localhost as the proxy host and 8888 as the proxy port. Use the proxy for all protocols with no exceptions like
Execute your request in browser
JMeter will save the relevant HTTP Request under the Recording Controller
Inspect request and response details using View Results Tree listener

'+' is a special symbol and you need to encode it: /jon/doe/foo/baar/Number%2B123456789
Jemeter has a function to do it in runtime, documentation:
__urlencode : Function to encode a string to a application/x-www-form-urlencoded
string.
For example, the string ${__urlencode(Word "school" is "école" in french)}
returns Word+%22school%22+is+%22%C3%A9cole%22+in+french.

Related

invoke Informatica PC wf from Java and read the response to resume java program

I need to invoke my Informatica PC wf through Java and once the WF is completed or failed give the response to java program to continue it process.
I tried command line but java is not reading response. Looking for detail suggestion on Java and as well as on informatica end
it does not matter if the informatica job is failed or succeeded it need to give the response back to Java
Note that there are many ways to do this--perhaps the easiest is to have Java touch a file somewhere that your workflow is monitoring, and then have the workflow put a result in a database or file that Java can see.
However, a more formal approach is to use web services.
See if your Informatica administrator can enable Web Service Hub and then read up on it in the PowerCenter documentation. I have provided the best information I can here from a document I wrote some years back.
There may be better ways of doing this, but Informatica hasn't changed much over the years, and WSH was the way to go some years back if you wanted to launch a workflow remotely from Java or any other language and monitor its progress.
Once the admin has enabled WSH, you then can navigate to a console (likely at /wsh) that shows various actions that can be performed and various objects.
Here's a quick-and-dirty go at running a workflow using web services from the WSH console:
Open Web Services Hub and navigate to Batch WebService and Integration WebService
Click the Try-It button (the WSDL for the Integration web service is available here as well)
Select the login operation on the left side
Fill in the Domain, Repository, Username, and Password and click Send
Obtain the Session ID in the SOAP response
Select the startWorkflow operation on the left
Provide the SessionId value obtained from the login
Provide FolderName, WorkflowName, RequestMode, DomainName, ServiceName
Click Send
At this point you should receive a successful response.
The web service does not wait until the workflow completes.
Once you can use the web services to control workflows, you can use a Java web service framework like Axis to generate web service client classes for the generic batch-processing.
This approach is covered well in the Informatica documentation
Unfortunately it is a somewhat cumbersome process, but it works. Web services can be invoked as follows from Java:
Create a new Data Integration Service Locator and use that to obtain the Data Integration Interface. This is used to execute all Informatica WS calls. This is based on the service location embedded in the WSDL.
Log in to Informatica and obtain a session ID for the connection
Create a session header, holding the session ID, and place in the Data Integration Interface.
Create a Service Info object that identifies the Informatica Domain Name and Service Name.
Create an object to hold workflow, folder, run mode, and Service Info object
Launch workflow using startWorkflowEx in order to return the run ID
Build a WorkflowRequest object with all of the same workflow information in order to wait for completion
Call waitTillWorkflowComplete in order to block until the Informatica workflow completes
Other features are available, so you should be able to check return codes and such.
You should try something like this.
String cmd="C:\\Informatica\\9.6.1\\clients\\PowerCenterClient\\CommandLineUtilities\\PC\\server\\bin\\pmcmd.exe";
final Process cmdProcess;
cmdProcess = Runtime.getRuntime().exec(new String[]{cmd,""});
OutputStream out = cmdProcess.getOutputStream();
out.write("connect -sv IS_NAME -d DOMAIN_NAME -u USER -p PWD".getBytes());
out.close;

How to upload file in a JSF application using JMeter

I've been asked this time to also create a test script for file upload in a JSF application using JMeter. The generated script from blazemeter is as follows:
generated script for input form
The encircled value is the file name. I have noticed that the parameter was not created under "Files Upload" tab, so I have also tried to move the parameter to File Upload tab, using the generated content type in our application logs when uploading as Mime Type in JMeter:
Jmeter file upload tab
Generated content type
But it has the same result when I first tried the script where the file name parameter was still under "Parameters" tab (file name is null according to localhost application logs):
Application log indicating that file name is null
The UI of the file upload is this. The user clicks browse button, picks a file then the name of the file is displayed in the input field (Import File). The user would then click the Import button to submit the form:
File upload UI
Am I missing a step or doing something incorrectly?
Thank you in advance! Any help would be greatly appreciated.
Your way of building a file upload request might be wrong, if you want to continue manual experiments I would recommend comparing requests which are being sent by JMeter and the real browser using a sniffer tool like Wireshark. Apart from ${VIEWSTATE} the requests should be exactly the same.
An easier option would be just re-recording the request (you can record only one single request) using HTTP(S) Test Script Recorder.
Prepare JMeter for recording. The easiest way of doing this is using JMeter Templates feature
from JMeter main menu choose File -> Templates -> Recording and click "Create"
expand HTTP(S) Test Script Recorder and click "Start"
Prepare your browser for recording, refer your browser documentation in order to set up proxy using localhost as the proxy host and 8888 as the proxy port, the proxy needs to be set for all protocols with no exclusions. The relevant configuration for Mozilla Firefox (the only free and open source popular browser, moreover it has separate proxy configuration which does not derive from the operating system) would be:
Copy the file you will be recording to the "bin" folder of your JMeter installation. If you omit this step JMeter will not be able to properly record the request. See Recording File Uploads with JMeter article for more details if needed
Execute the request in browser - the relevant HTTP Request sampler will be generated under the Recording Controller

USSD app automation testing

I am very new to automation and API testing. My current project is USSD based for banking. I am currently testing manually by giving inputs on browser simulator and reading the console output (ssh into the server). The basic function of the API is to generate POST requests with all the parameters and send it to respective bank. I am looking to to automate this process and validate the request sent and the response received. I was thinking of using Selenium for browser automation but I have no idea how would I extract the response from the terminal to validate.
Please suggest as how I should go about this and if this is the right process. If there is any other way to handle this please suggest.
If you're testing REST API You should use REST Assured for automated testing (postman tool) for manual testing. If You should test end to end - then Selenium is the right tool.

How to run jmeter requests with application/x-www-form-urlencoded; charset=UTF-8" (like postman's) setting

I am trying to set an http head manager element with application/x-www-form-urlencoded; charset=UTF-8"; param. I get the needed result from postman but there is a checkbox for this setting. I need to use JMeter for the rest api project.
You need to set up HTTP Header Manager to send Content-Type header with the value of application/x-www-form-urlencoded; charset=UTF-8
Actually you can just record Postman requests instead of building them manually.
Prepare JMeter for recording. The easiest way is using JMeter Templates Feature, from JMeter's main menu choose File - Templates - Recording - Create
Kick off JMeter proxy. Expand Workbench - HTTP(S) Test Script Recorder and click "Start"
Run Postman using JMeter as a proxy: Postman.exe --proxy-server=localhost:8888
Execute requests in Postman - JMeter will be recording them.

Is there a way to modify an HTTP request in Chrome or Firefox?

Is there a way to modify an HTTP request using Chrome dev tools or Firebug? For example when developing locally and testing in Chrome, I have a page that needs an HTTP request to fill some data. Because it's local, that service isn't available.
Currently the only way of getting around the problem is configuring a proxy pass in Apache so it hits a QA environment for that call. I'm looking or a simpler way to achieve this because I use Jetty to test the app and can't configure a proxy pass (or that I know of).
In other words, is there a way to create a temporary proxy pass for the current session when testing an app locally?
This might help in some cases - use fetch command to send another, tampered, request. here's how to do it in Chrome:
open DevTools, tab Network
clear
create your request normally
right click that request and select Copy > Copy as fetch
go to Console tab and paste
tamper the data and hit Enter
You can use tweak chrome extension and you'll be able to do exactly that, intercept and modify HTTP requests.

Categories

Resources