Maximum Number of User Per Mapping In ODI12c - etl

I am new to ODI. While working i ODI Project, I am facing one issue.
I have 10 mappings In ODI12c,and all are using same target table,but due to some performance issue, I want that at a time only max 2 users can Execute mappings(Max 2 mappings), since they are using same target table. If more then 2 user uses that same target then it should not execute.
How should I implement this in ODI12c?

You can do something, but not exactly what you said. You can setup and option called "Concurrent Execution Controller" and tell a scenario to wait until it's previous execution it's finished.
So, you can do the next:
1.create a package
2.create scenarios for all the mappings
3.create a variable
2.inside the package call a scenario (no matter what scenario) and at the scenario name, put the variable (see image below)
3.generate scenario for package
4.double click on the scenario of the package and choose "Limit Concurrent Executions" then choose Wait to Execute and then setup the Wait Polling interval to X seconds to wait
5.execute the package scenario and when the variable it's prompted, complete the name of the mapping you want to be executed
Please tell me if you need more info.

Related

jMeter how to make user wait until the previous loop is done

I am new to jmeter, so please bare with me if I have asked a silly question. I have a thread where I want to run that thread like 100 times. In the thread I have scripts like
Add a member to a mailbox,
Get the mailbox details and confirm the member added was displayed
update the member role in that mailbox
Delete the member from that mailbox
I am using same mailbox and user for my test for my loop. Here the issue is the same member cannot be added to the same mailbox unless we delete that member from that mailbox.
So when I run the test with just 5 iterations, the add script for first iteration was passed and next 4 iterations for that add script getting failed. Because the first thread already added the user to that mailbox and while the second user tries to add the same user it fails, that's expected.
Steps I tried:
I even tried using constant timer in my add script to wait for 4secs so my previous user actions should be done. That's my understanding. Please correct me if that's wrong.
The other thing I tried was ramp-up time to 8 secs and then the script for 5 users ran fine. But when I increase the users to 50 then almost 50% of the scripts failed.
Here comes my problem. How do I make the second user to wait until the first user done with the delete script, so second user can use the same data and so on.
Attached are some screens of my scripts
Please let me know if you need any other information.
Thanks
Each JMeter thread (virtual user) should represent a real user with its own credentials and mailbox. Credentials and/or mailbox can be parameterized, normally people use CSV Data Set Config to provide test data for JMeter scripts
If you have only one user/mailbox - you won't be able to use more than 1 thread (virtual user) in the Thread Group, to wit if you need to run the scenario 100 times - you need to set it up like:
Another option is using Critical Section Controller. But be aware that there will be no concurrency (only 1 user will be running the test at a time), if you need to have more - you will need to use different credentials for different users

Multiple thread groups affecting each other

I have created a test plan with multiple thread groups that I want to execute simultaneously.
One group (A) involves tagging a folder with 1000 images in it, so it takes approx 10 seconds to respond.
The other group (B) is real quick.
What I've found is that group B seems to "stick" and wait for thread A to complete. Now all the reading I've done says that thread groups should be totally independant, but this doesn't seem to be the case in my test plan.
I have an HTTP defaults manager, cookie manager and user defined variables that are shared between groups (but have tried adding them in the separate thread groups).
Anyone got any idea why this should be?
Script is here: https://www.dropbox.com/sh/fhdof4ynjt73s2p/mkrphWcfHK
(likely will not run or stick though as this uses internal URL's)
This issue is not in JMeter, it is the application that is locking.
Looking at your test, you seem to use one user to do your load test, this clearly explains your issue and makes your test unrealistic as you have around 20 Users logged with the same user/password.

Call function in user parameter definition

I'm running a set of thread groups (consecutively) and I need to reset a number of parameters at the start of each thread group so that they have a unique value.
Presently I'm referencing a User Paramaters node using a test fragment, and setting the value to value-${__time()}. Unfortunately, this results in the value being used verbatim (without resolving the time).
Is there a better way to achieve per-thread group variables that include function calls?
Works fine for me (Jmeter 2.5.1), as per below example.
Sample params set to ${__time(HMS,)} and value-${__time()} successfully resolved, generated and updated (once per iteration) for each thread (in this case:3 Thread Groups, 5 threads # 3 loops).
Can you please answer why are you using User Parameters via Test Fragment (as per your post)?
...And several articles, just fyi:
Parametrization in JMeter with user parameter
JMeter Variables vs. Properties. vs. Parameters
UPDATED:
Please find below results for example with both User Params and test logic put into Test Fragment and called from Module Controllers.
Works the same way as in sample above: successfully resolved, preserved between samplers in separate loop and updated (once per iteration) between loops for each thread (well, I 've commented in screen the rest of thread groups to get output for the first only; works fine with all TGs enabled too).
I think you could also try to put User Params config from Test Fragment to each thread group and leave in Test Fragment only test logic - if the above schema will still not work for you:
It's not very nice but both the Module Controller and Include Controller are still quite "buggy" and sometimes unpredictable.
You could also try to debug problem controllers in your scenario: select controller > click Help in jmeter's main menu > click Enable Debug > look into jmeter.log for details after execution.
You could also look onto custom Parameterized Controller - maybe it will work better.

Specify test end condition in Visual Studio Load Test

I'm testing a large BizTalk system using Visual Studio Load Test. Load Test to pushes messages into MQ, these are picked up by BizTalk and then processed.
Rather than having the test finish (and all performance counters ending) as soon as Visual Studio has finished injecting messages to MQ, I want the test to end if and only if some condition is met (in my case if (SELECT COUNT(*) FROM BizTalkMsgBoxDb.dbo.Spool) == 4).
I can see a bunch of ways to run stuff after the test is complete, but no obvious way to extend the test and continue monitoring unless some user-defined exit condition is met.
Is this possible, or if not, does anyone have an idea for a good work-around/hack to achieve this?
You'll want to write a custom load test plugin. Details begin at this URL: http://msdn.microsoft.com/en-us/library/ms243153.aspx
The plugin can manipulate the scenario, extending the duration of the test until your condition is met.
I imagine you want to keep the load test running after queueing up a bunch of requests in order to continue to monitor the performance while the requests are processed. Although we can't control the load test duration, there is a way to achieve this.
Don't limit the test duration: Set the load test duration (or number of iterations) to a very large value -- larger than you anticipate (or know) it will take for the end condition to be satisfied.
Limit the scenario that queues up requests: In the load test scenario properties, in the Options section, set the Maximum Test Iterations so that the user load will drop to zero after sending the desired number of requests. If setting an iteration limit is not possible for some reason, you can instead write a load test plugin that sets the user load to zero in a specified scenario after a certain amount of test time has elapsed.
Check for end condition: Write a web test plugin that checks the database for your end condition. Attach this plugin to a new webtest in a new scenario and set Think Time Between Test Iterations on the scenario so that the test runs only as often as needed (60 seconds?). When the condition is reached, the plugin should write a predetermined value into the user context (the user context is accessible in the web test context as $LoadTestUserContext, and is only available in a load test, not when running a webtest standalone).
Abort the test: Write a load test plugin that looks for the flag value in the user context in the TestFinished event. When the value is found, the plugin calls LoadTest.Abort().
There is one minor disadvantage to this method: the test state is marked as Aborted in the results database.
At time of writing there is (still) no way to extend the duration of the test using a custom load test plugin, nor by having a virtual user type that refused to exit, nor by locking the close-down period of the test and preventing it from exiting that way.
The only way we managed to do something like this was to directly manipulate the LoadTest database and inject performance counter data in afterwards from log files, but this is neither smart nor recommended.
Oh well..

Windows Workflows - While Activity for creating multiple tasks not working

I am using a while activity for creating multiple tasks for a workflow. The code is executed fine and the task is created when the loop runs only once. But when the loop runs twice or more, only one task is getting created. Also the WF status shows as Error Occured.
All I want to do here is create multiple tasks (no of tasks depends on an entered column value) for the same user. Is it posible to use 'while' in this scenario? Or is there any other way to go ahead?
NB: I am using state machine workflow.
You may want to use a Replicator Activity which will in turn "clone" its child-activities. It can be run parallel or sequentially.
I found Working with the Replicator Activity and an Until Condition useful.
Otherwise without the Replicator, there is just one Task Activity.
In either case, make sure to assign a new Guid to the TaskId property. However, as an annoying "feature": it will not work if you just assign the TaskId property (I know, I tried and was like "Wth?!?"). Instead, bind the TaskId to a Field/Property and then assign to that.

Resources