I am playing around with LoadRunner to performance test a Sielbel CRM application. The protocol ( Siebel web) is selected before the run and also the .cor file is associated using the recording options dialog.
I have also copied the DLL ssdtcorr.dll to the bin folder. All is good and I am able to record the scripts.
While replaying the script, I am getting the below screen
Not sure what is the issue here...
I have gone through the script and observed that timestamp ,Siebel_SWECount , SiebelTimeStamp ,Siebel_SWEACn and Siebel_SWEVLC are correlated automatically.
Is there any other params which needs to be correlated.
Please let me know.
Thanks in advance for your help
PS: My application is a single session setup. It means, I cannot login simultaneously with the same credentials more than once in a given time. The later login will give a session warning message.
But while replaying the script, I made sure that there is no active session with the credential I am using with the script.
UPDATE 1
The below code is what is causing the issue
web_submit_data("start.swe_14",
"Action=http://XX.YYY.ZZZ.AA/SSS/start.swe",
"Method=POST",
"TargetFrame=",
"RecContentType=text/html",
"Referer=http://XX.YYY.ZZZ.AA/SSS/start.swe?SWECmd=Login&SWEPL=1&SRN=&SWETS={SiebelTimeStamp}",
"Snapshot=t17.inf",
"Mode=HTML",
"EncodeAtSign=YES",
ITEMDATA,
"Name=SWECmd", "Value=InvokeMethod", ENDITEM,
"Name=SWEService", "Value=Web Engine Client Preferences", ENDITEM,
"Name=SWEMethod", "Value=SetClientCapability", ENDITEM,
"Name=SWEIPS", "Value=#0`0`1`0``3``cpf`Mobile=false`", ENDITEM,
"Name=SWERPC", "Value=1", ENDITEM,
"Name=SRN", "Value=4FeDpVgxP8msdfbfdbbgdTGtzQbkLyoO0spzO8Ywb", ENDITEM,
"Name=SWEC", "Value={Siebel_SWECount}", ENDITEM,
"Name=SWETS", "Value={SiebelTimeStamp}", ENDITEM,
LAST);
The reason for the failure is that the SRN value is hardcoded and is not correlated.
"Name=SRN", "Value=4FeDpVgxP8msdfbfdbbgdTGtzQbkLyoO0spzO8Ywb", ENDITEM,
Could anyone please help me as how to fetch the SRN value automatically so that I am not using the hard coded SRN value.
SRN is Sesssion Random Number
Any pointers is very much helpful for me. Thanks in advance for your help.
When automated correlation fails, use manual correlation techniques. Using the same user credentials, record the same business process twice. Compare the generated code. It should become obvious what needs to be addressed. You can add a third recording session tied to a different user ID to validate your observations.
There is also the rule of thumb model. If you did not type it in or pick it off the screen then you need to look at either a correlated source or a local code generation source. in this case, SRN, is likely a value you did not type in or pick off the screen.
Manual correlation methods should confirm the dynamic nature of the value. Standard manual correlation techniques covered in training and the tutorial before automated correlation, should help you to identify the location of the information being sent back so you can add the appropriate manual correlation statements to capture the value/
Related
are few days that we are experiencing trouble with revolut api.
We use that library: https://github.com/useme-com/revolut-python
Now when we try to retrive a list of transactions we receive:
root## python3 transactions.py
HTTP 400 for https://b2b.revolut.com/api/1.0/transactions: Duplicate key User#XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX (attempted merging values XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXX and YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYY)
The code is pretty straightforward, to debug basically:
[...]
# Enable Session
session = RenewableSession(refreshtoken,clientid,jwttoken)
# Create API Client
revolut = Client(session)
# Transactions Display
for transaction in revolut.transactions():
print(transaction)
[...]
The same code, from our side, worked until 3 days ago, without errors.
Any ideas on what's going on?
Possible that exist a failure from revolut side?
They are not responding on this (already opened a ticket about).
ty
I got this issue while using a high count param
https://b2b.revolut.com/api/1.0/transactions?count=1000
Reducing count to 100 or 200 made me get a good response. I think Revolut has some issues when sending API response that includes a very old historical transaction due to changes in data structure/merging etc at their end
I'm triggering an Azure Logic App from an https webhook for a docker image in Azure Container Registry.
The workflow is roughly:
When a HTTP request is received
Queue a new build
Delay until
FinishTime of Queue a new build
See: Workflow image
The Delay until action doesn't work in that the queueried FinishTime is 0001-01-01T00:00:00.
It complains about the wrong format, so I manually added a Z after the FinishTime keyword.
Now the time stamp is in the right format, however, the timestamp 0001-01-01T00:00:00Z obviously doesn't make sense and subsequent steps are executed without delay.
Anything that I am missing?
edit: Queue a new build queues an Azure pipeline build. I.e. the FinishTime property comes from the pipeline.
You need to set a timestamp in future, the timestamp 0001-01-01T00:00:00Z you set to the "Delay until" action is not a future time. If you set a timestamp as 2020-04-02T07:30:00Z, the "Delay until" action will take effect.
Update:
I don't think the "Delay until" can do what you expect, but maybe you can refer to the operations below. Just add a "Condition" action to judge if the FinishTime is greater than current time.
The expression in the "Condition" is:
sub(ticks(variables('FinishTime')), ticks(utcNow()))
In a word, if the FinishTime is greater than current time --> do the "Delay until" aciton. If the FinishTime is less than current time --> do anything else which you want.(By the way you need to pay attention to the time zone of your timestamp, maybe you need to convert all of the time zone to UTC)
I've been in touch with an Azure support engineer, who has confirmed that the Delay until action should work as I intended to use it, however, that the FinishTime property will not hold a value that I can use.
In the meantime, I have found a workaround, where I'm using some logic and quite a few additional steps. Inconvenient but at least it does what I want.
Here are the most important steps that are executed after the workflow gets triggered from a webhook (docker base image update in Azure Container Registry).
Essentially, I'm initializing the following variables and queing a new build:
buildStatusCompleted: String value containing the target value completed
jarsBuildStatus: String value containing the initial value notStarted
jarsBuildResult: String value containing the default value failed
Then, I'm using an Until action to monitor when the jarsBuildStatus's value is switching to completed.
In the Until action, I'm repeating the following steps until jarsBuildStatus changes its value to buildStatusCompleted:
Delay for 15 seconds
HTTP request to Azure DevOps build, authenticating with personal access token
Parse JSON body of previous raw HTTP output for status and result keywords
Set jarsBuildStatus = status
After breaking out of the Until action (loop), the jarsBuildResult is set to the parsed result.
All these steps are part of a larger build orchestration workflow, where I'm repeating the given steps multiple times for several different Azure DevOps build pipelines.
The final action in the workflow is sending all the status, result and other relevant data as a build summary to Azure DevOps.
To me, this is only a workaround and I'll leave this question open to see if others have suggestions as well or in case the Azure support engineers can give more insight into the Delay until action.
Here's an image of the final workflow (at least, the part where I implemented the Delay until action):
edit: Turns out, I can simplify the workflow because there's a dedicated Azure DevOps action in the Logic App called Send an HTTP request to Azure DevOps, which omits the need for manual authentication (Azure support engineer pointed this out).
The workflow now looks like this:
That is, I can query the build status directly and set the jarsBuildStatus as
#{body('Send_an_HTTP_request_to_Azure_DevOps:_jar''s')['status']}
The code snippet above is automagically converted to a value for the Set variable action. Thus, no need to use an additional Parse JSON action.
I want to save 10k users from active directory and i am using auditing but I have a bug.
The column modified_by does not work well.
The error is
2016-04-04 14:49:27,353 DEBUG [ForkJoinPool.commonPool-worker-3] StateServiceImpl: Request to save userAD, 77879
2016-04-04 14:49:27,354 DEBUG [http-nio-80-exec-6] StateServiceImpl: Request to save userAD, 96459
As you can randomly it is using threads. When it is using ForkJoinPool.commonPool-worker-X in the modified_by column fill in with the name "system" and when it is called from http-nio-80-exec-X it filled by the name of the user who is logged in.
thanx
Please provide your .yo-rc.json file and JHipster version.
Indicate also how you load you 10k users: through REST API or something else?
Did you write/modify this code or is it the code generated by JHipster unmodified?
SecurityContextHolder probably uses a ThreadLocal variable to store current user and then if you start a thread you do not get this context copied to the execution thread which results in getting default user: system
I have this function to correlate icx_ticket in a LoadRunner script:
web_reg_save_param("WCSParam11",
"LB=icx_ticket='",
"RB/IC='resp",
"Ord=1",
"Search=Body",
LAST);
The parameter is not being captured and I am consistently getting this error.
Action.c(127): Error -26377: No match found for the requested parameter "WCSParam11". Check whether the requested boundaries exist in the response data. Also, if the data you want to save exceeds 10240 bytes, use web_set_max_html_param_len to increase the parameter size [MsgId: MERR-26377]
Action.c(127): Notify: Saving Parameter "WCSParam11 = ".
I can see in the data returned by the server icx_ticket appears as:
Action.c(79): GET /OA_HTML/txkObjectTag.js HTTP/1.1\r\n
Action.c(79): Referer: http://erpuat.safaricom.net:8010/forms/frmservlet?appletmode=nonforms&HTMLpageTit
Action.c(79): le=&HTMLpreApplet=&code=oracle/apps/fnd/formsClient/FormsLauncher.class&width=400&height=3
Action.c(79): 00&archive=/OA_JAVA/oracle/apps/fnd/jar/fndforms.jar,/OA_JAVA/oracle/apps/fnd/jar/fndforms
Action.c(79): i18n.jar,/OA_JAVA/oracle/apps/fnd/jar/fndewt.jar,/OA_JAVA/oracle/apps/fnd/jar/fndswing.jar
Action.c(79): ,/OA_JAVA/oracle/apps/fnd/jar/fndbalishare.jar,/OA_JAVA/oracle/apps/fnd/jar/fndaol.jar,/OA
Action.c(79): _JAVA/oracle/apps/fnd/jar/fndctx.jar,/OA_JAVA/oracle/apps/fnd/jar/fndlist.jar&jinit_applet
Action.c(79): cache=off&gp15=icx_ticket&gv15=Vg4ifaWvXEHX1nnuRaKLlg..&gp2=resp_app&gv2=SQLGL&gp3=resp&gv
Action.c(79): 3=GENERAL_LEDGER_SUPER_USER&gp4=sec_group&gv4=STANDARD&gp5=function&gv5=GLXJEPST&gp6=other
Action.c(79): _params&gv6=&gp7=jsp_agent&gv7=http%3A%2F%2Ferpuat.safaricom.net%3A8010%2FOA_HTML%2F&gp13=
Action.c(79): dbc&gv13=ERPUAT\r\n
Kindly assist me to correctly capture and save the icx_ticket parameter.
As from my experience you will not able to correlate any value in ORACLE.
For saving the dynamic value which comes from server you can use
nca_edit_get_text("Field_Name",Variable_Name);
Here Field name is the name of the field where this value is present/display and varable mane is the variable you create for storing the data.
lr_save_string(Variable_Name, "Any_Name");
After that you can save your variable into load-runner variable using above function.
As from my experience you will not able to correlate any value in ORACLE.
You have very limited experience then.
If a Value is returned then it can be captured. Here we have the example of an autocorrelated variable not being captured. One must first ask if the recommended autocorrelation left boundary and right boundary conditions are optimal? If not, then tune them to be more robust - this requires that the user have manual correlation skills to address the issue No manual correlation skills then "No joy" on a solution.
Next, let's look at process items that are very commonly paired with a failing autocorrelation, does the script include active examination of expected results from each and every request and then does the script branch execution when the expected result fails to appear. There is a very high statistical correlation between no check on expected results and a failed LoadRunner variable autocorrelation, on the order of greater than 95%.
I am using Apache Shiro in my webapp.
I store some parameters in the session notably the primary key of an object stored in the database.
When the user logs in, I load the object from the database and save the primary key in the session. Then within the app the user can edit the object's data and either hit a cancel or a save button.
Both buttons triggers a RPC that gets the updated data to the server. The object is then updated in the database using the primary key stored in the session.
If the user remains active in the app (making some RPCs) everything works fine. But if he stays inactive for 3 min and subsequently makes a RPC then Shiro's securityUtils.getSubject().getSession() returns null.
The session timeout is set to 1,200,000 ms (20 min) so I don't think this is the issue.
When I go through the sessions stored in the cache of my session manager I can see the user's session org.apache.shiro.session.mgt.SimpleSession,id=6de78f10-b58e-496c-b40a-e2a9a4ad069c but when I try to get the session ID from the cookie and to call SecurityUtils.getSecurityManager().getSession(key) to get the session (where key is a SessionKey implementation): I get an exception.
When I try building a new subject from the session ID I lose all the attributes saved in the session.
I am happy to post some code to help resolve the issue but I tried so many workarounds that I don't know where to start... So please let me know what you need.
Alternatively if someone knows a better documented framework than Shiro I am all ears (Shiro's lack of documentation makes it really too time consuming)
The issue was related to the session config in the ini file. As usual with shiro the order mattered and some of my lines were out of place.
Below is the config that worked for me:
sessionDAO = org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO
#sessionDAO.activeSessionsCacheName = dropship-activeSessionCache
sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager
sessionManager.sessionDAO = $sessionDAO
# cookie for single sign on
cookie = org.apache.shiro.web.servlet.SimpleCookie
cookie.name = www.foo.com.session
cookie.path = /
sessionManager.sessionIdCookie = $cookie
# 1,800,000 milliseconds = 30 mins
sessionManager.globalSessionTimeout = 1800000
sessionValidationScheduler =
org.apache.shiro.session.mgt.ExecutorServiceSessionValidationScheduler
sessionValidationScheduler.interval = 1800000
sessionManager.sessionValidationScheduler = $sessionValidationScheduler
securityManager.sessionManager = $sessionManager
cacheManager = org.apache.shiro.cache.ehcache.EhCacheManager
securityManager.cacheManager = $cacheManager
It sounds as if you have sorted out your problem already. As you discovered, the main thing to keep in mind with the Shiro INI file is that order matters; the file is parsed in order, which can actually be useful for constructing objects used in the configuration.
Since you mentioned Shiro's lack of documentation, I wanted to go ahead and point out two tutorials that I found helpful when starting:
http://www.javacodegeeks.com/2012/05/apache-shiro-part-1-basics.html
and
http://www.ibm.com/developerworks/web/library/wa-apacheshiro/.
There are quite a few other blog posts that provide good information to supplement the official documentation if you look around.
Good luck!