use output of standalone java file as jmeter parameter - jmeter-3.2

I have to create a load test for a post method and have to pass a token in the header manager. This token is generated by stand alone java file and is valid for 5 minutes only. For a manual run, I can generate the token separately and pass it on to jmeter, but want to configure the jmeter in jenkins.
I want to see if I can use that java file and jmeter together and pass that token as parameter. I need solutions for below:
How to implement java file and jmeter together?
As token is getting expired in 5 minutes so need a solution to check for token expiry and use new token.

Related

Pass credentials to Jmeter command line

How can one pass credentials to the Jmeter command line to be used as username/password for HTTP Authorization Manager username/password? I'm using Jmeter 5.4.
I need to be able to programmatically pull credentials from a vault or Jenkins credentials and pass to Jmeter. Hard coding or writing to a file is not an option.
Normal way of parameterizing a JMeter test using external data is:
Use __P() function in the HTTP Authorization Manager like:
${__P(username,)}
it will return the username property value
Pass the username property to JMeter via -J command-line argument like:
jmeter -Jusername=johndoe -n -t test.jmx ....
Another option is reading the value from an environment variable using __groovy() function:
${__groovy(System.getenv('username'),)}
or if you have Custom JMeter Functions plugin installed you can do the same using __env() function
${__env(username,,)}

DocuSign JWT access toke call fails in Dev environment while successful in Local

We are trying to integrate with DocuSign, and using JWT authorization in Spring Boot application.
When I am running my application locally (running in local Tomcat) I am able to connect to DocuSign and email documents successfully. However, once I deployed the code to our Development environment (running Websphere), the call to request JWT token is returning below Exception. Keep in mind I am using the same base URL and Integrator key in both environments:
Exception: Error while requesting server, received a non successful HTTP code 401 with response Body: '{
"errorCode": "PARTNER_AUTHENTICATION_FAILED",
"message": "The specified Integrator Key was not found or is disabled. An Integrator key was not specified."
}'
Call to request JWT token:
ApiClient apiClient = new ApiClient(BASE_URL);
apiClient.configureJWTAuthorizationFlow(currentDir + PUBLIC_KEY_FILENAME, currentDir + PRIVATE_KEY_FILENAME, OAUTH_BASE_URL, INTEGRATOR_KEY, USER_ID, expireIn);
BASE_URL = https://demo.docusign.net/restapi
OAUTH_BASE_URL = account-d.docusign.com
I have values set for the rest of the variables as well; I'm just showing variable names only here.
I have already granted access by making the following call and logging in the browser by making the following call in a test class:
String oauthLoginUrl = apiClient.getJWTUri(INTEGRATOR_KEY, REDIRECT_URI, OAUTH_BASE_URL);
Desktop.getDesktop().browse(URI.create(oauthLoginUrl));
I'd appreciate any help. Thank you.
After days of trying out different things finally resolved my issue, posting the answer here in case it helps someone else.
In my dev env even though file name was loaded correctly apiClient could not load the correct file, and in local tomcat server that was not the case. After seeing the same exception when I changed the fileName in for local server, made a guess that server is failing to read the correct key files.
Instead of passing the file name directly I had to use Thread.currentThread().getContextClassLoader().getResource(publicKeyFileName).getPath(); for both public and private keys and that resolved the issue.

Interacting with TFVC API from Build Task

I'm trying to use the TFVC API from a build task without using Personal Access Token.
I've read that if I'll use the Client SDK it should authenticate automatically but I'm failing to get it working.
Another alternative I'm considering is to run tf.exe but it requires authentication as well.
Basically I would like to get the changesets for a certain build using my Build Task with minimum info from the user (hence I don't want Personal Access Token or Username/Password).
Is that doable?
You should be able to authenticate with an OAuth token. It's populated in the build variable $(System.AccessToken) or the environment variable SYSTEM_ACCESSTOKEN.
You provide it to the REST API with the header Authorization set to Bearer [token], where [token] is the OAuth token value.
If you queue a build with TFVC repository and then check the logs for "Get Sources" step, you will find how to use TF.exe to get source during the build.And then you can copy the command and use it in a CommandLine/PowerShell task like following:
Make sure that "Allow Scripts to access token" option is enabled.

SoapUI + Groovy + RESTService + Access authorization for 3 different URLs

SoapUI + Groovy + RESTService
In my project, I have 3 different environments: Test1, Test2 and Test3. And now I have 3 different URLs, test data, and authorization. I am able to achieve different test data with respect to URL using groovy.
Now facing problem in Authorization How to change the authorization depending upon the URL?
Authorization is mentioned in Authorization box i.e. username and password.
Unfortunately in SoapUI open source it is not available but in SoapUI Pro there is a feature called 'Environments' - which is exactly for this purpose. You can set URLs, DB connections, Authorization for different environments and then you can run the test suite for a particular environment.

Pre-Authenticate Powershell WebClient requests to Team City 8.0 REST API

I'm trying to run Powershell scripts in my Team City build steps.
The scripts use WebClient to connect to Team City's REST API; currently, I have to login to Team City and hardcode a username and password as arguments in my Powershell build step.
I'm wondering if anyone knows a way to pass the credentials I am currently using to authenticate to Team City in my Powershell scripts without hardcoding any passwords
If you only need read access in the REST api (ie you don't want to do POST/PUT/DELETE, only GET) then use the teamcity generated user name and password.
This username/password pair is generated per each build and valid only during the build run. This is how you can access them in your powershell script:
read the $env:TEAMCITY_BUILD_PROPERTIES_FILE environment variable which holds the full path to the build properties file that are generated/valid for this build
this file is a simple key=value java prop file. You need to parse out the values for teamcity.auth.userId and teamcity.auth.password properties. Or better yet, parse all the props always in your script init phase and put them into a hash table in your powershell script.
If you need write access to the REST api, you can't use this uid/pwd pair. For this I am using a keychain on osx and a keepass db on windows. Keepass has a nice .net api that you can access from powershell. Create an new keepass db, make it unlockable with a key, not with a password, make sure your user running the build agent has access to this key and no one else, then use keepass api to unlock the db, read out your teamcity admin account and password who can do POST/PUT/DELETE in the rest api.
Thanks for the answer but we wound up providing the username and password as build parameters.
TeamCity's built in password protection helped us out here.
In this way, we're using one account to run our powershell scripts but we can still see who kicked off the build from the credentials they used to login to the web UI.
So we maintained traceable responsibility and stopped the constant entering of username and passwords.
More info: confluence.jetbrains.com/display/TCD7/Typed+Parameters