tags:

views:

438

answers:

3

I have a datadriven unit test which reads from an access database and execute for all rows in the database.When I add this to a load test and execute with 5 concurrent users,all the records in the databse are executed 5 times.the problem I face here is when there are more records in the database the test takes more time for execution.instead is there a way to restrict a test to execute only one data row?

+1  A: 

Are you trying to just run the test one time per row in the database and then stop? If so, you should probably avoid using your web test as a load test.

I think you have two options but I don't have my work computer in front of me to confirm.

Option 1: Create the web test like you've already done including wiring it up to the access database like you probably already have. Then convert the test to a coded web test. And change the code so that it runs once for each record in the datasource (in other words, add an outer loop to the coded webtest).

Option 2: Edit your local test run config to run the test N number of times. From the main menu go to Test/Edit Test Run Configurations, choose your test config, Select Web Test from the left pane, then change Fixed Run Count to 5. I can't confirm this right now but I believe each time the test runs it will advance to the next record as opposed to staying on the first.

Atoms
A: 

I assume you only want data tests to run when there is a row of data available.

I would change the data driving the test to read a stored procedure with an atomic transation such as this SQL code:

BEGIN TRANSACTION

DECLARE @Id UNIQUEIDENTIFIER

SET @Id = (SELECT top 1 ID from #TestData WHERE TestRun = 0)
SELECT top 1 * FROM #TestData WHERE ID = @Id
UPDATE #TestData SET TestRun = 1 WHERE ID = @ID

COMMIT TRANSACTION

This will get you a unique datarow each time the test is run, allowing the test to be used in a load test.

You will have to use SQL Express instead of access as I don't think it can handle the concurrency so well (open to correction here).

If you need more control over what happens during the load test, consider creating a load test plugin that will allow you to implement code from the following load test events:

  • LoadTestStarting
  • LoadTestFinished
  • LoadTestWarmupComplete
  • TestStarting
  • TestFinished
  • ThresholdExceeded
  • HeartBeat
  • LoadTestAborted
Nat
A: 

later I figured out the test iterations property of the scenario in a load test to control the number of times you want to run a test for each user.

in the run settings,set Use test iterations = true test iterations = xxx(the number of iterations you need)

also to have pause between each iterations, in the scenario properties of you load test,set the below properties

1)Think Profile = On 2)Think Time between test iterations = 1

Sen