Wednesday, August 13, 2014

Scheduled Load Test

Automating the execution of load tests is actually quite easy. Typically, a load test would be scheduled to run overnight, over a weekend, or even over the course of a few weeks.

The easiest way to accomplish this is to simply have a batch file that executes the load test, and to use the NT Scheduler that comes with all current versions of Windows to schedule when this batch file is executed.


 An example load test start script may look something like this:

  "C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\mstest.
  exe" /TestContainer:ProdLoadTest.loadtest /RunConfig:"C:\Source
  Code\LoadTest\PerfTestRun.testrunconfig"


In this example, the arguments below are passed to MSTest.
TestContainer

Represents the load test that should be executed. This contains all the details, such as Network Mix, run details, and so on, required to execute the test.

RunConfig

Represents the current test configuration which lists the controller to use, deployment options, test naming standards, etc., discussed earlier.
 

VS 2013 Web Load Test Most Common Mistake Using Property StringBody with Content Type Json

Introduction

Every time you deal with data driven web load test in Visual studio remember to follow the correct format for content type. Otherwise one ends up looking into different areas while troubleshooting the issue related to data bind data source . Sequential, Unique and random
 
Load Runner Vs Visual Studio Load test :-
 
It can be my ignorance....please spare me if you see any discrepancies in my thought or understanding process.
 
It reminds how load runner used to work- I used to work with performance test team who shared their screen with me to show the progress of the load run and the failed transactions. There is a threshold limit for number for transactions that is permissible to fail above which test was used to marked as RED or failed. Now coming back to what I understand, this something not about stress test but the test related to number of users that must be loaded to run the test. We used to provide the test data for each scenario and users in excel. Once recording is done during load test this data is picked by each users and constant user load or ramp up of users( step up) applied to generate real time scenario.
 
UNLIKE load runner, webtest in VS records the scenario and runs for all data users at once which is kind of non realistic procedure. What I mean here is, the user data is not bind during load test but it is available as complete run in web test which makes it in complacent or absurd for real time scenario.
 
Its like say login functionality.. I have userid and password for say 10 users in excel. I did recording of webtest with datasource bind to this excel which picks up 10 users at one go. When I apply say load test on this webtest for say 2 users it don't picks up 2 user input data but rather runs one webtest with all 10 users in one set and then subsequent round 2 with set of 10 users input.
 
Visual Studio Load test
[1 webtest -10 user input data]- load test -2 users = 1 Users [1webtest 10 user input data run] +1 users[1webtest 10 user input data run] 
 
Load Runner
[1 webtest]- load test -10 users input data feed = 10 user runs with 10 data inputs =10 run
 
this is perfect and concur to real time scenario
 
Please correct me, if you think this is not the behavior because I spend almost a month understanding this aspect , I research lot but none of the available information talk about this nitty gritties.
 

 

Do remember to apply right format structure, even missing quotes in semantics will lead you to spend lot of time solving the datasource issue..
 
Sometimes webtest runs fine with hardcoded login userid and password but when we bind the data source to bodystring( it is when login is in popup JS) you need to be extra careful with format.
  1. In main content panel of WebTest1.webtest
  2. Right click WebTest1 > Add Web Service Request
    1. Right click http://localhost/ > Properties
    2. Set the url to the web service end point
      1. Set Url: http://localhost:64093/api/user
    3. Expand the url http://localhost:64093/api/user
      1. Right ClickString Body > Properties
      2. Set Content Type : application/json
      3. String Body > Click Ellipsis ...
        {
        "UserId": "{{DataSource1.UserId#csv.UserId}}"
        }
        (NOTE: Using {{DataSource1.UserId#csv.UserId}} will set the value from the CSV.)
  3. Click Save 
 
 
 

Tuesday, August 12, 2014

Parse IIS Log Logparser to filter request to prevent SQL injection.


Problem Scenario

We can reduce traffic by using URL rewrite at the same time making use of Request filtering will ensure unnecessary requests are stopped at IIS web server level itself thus not hitting any database server for further processing. To a greater extent increasingly different combination of useless querystring for given url also a cause of sql server performance degradation.

Parse IIS log using Logparser tool


Using the query below I could see the most frequently used querystring values and it was obvious the site experiencing a SQL Injection attack.

logparser.exe -i:iisw3c “select top 20 count(*),cs-uri-query from ex140702.log
group by cs-uri-query order by count(*) desc” -rtp:-1 >file.txt
 
By viewing the output we can add rules for request that is coming in for webserver in IIS request filtering.
We can keyword for querystring which are identified in the logs by doing this in a way we can restrict unnecessary request and provide access denied to such request. Status code 404.
 
SELECT STRCAT(TO_STRING(sc-status), STRCAT(‘.’, TO_STRING(sc-substatus))) AS Status, COUNT(*)
AS Total FROM w3svc.log to TopStatusCodes.txt GROUP BY Status ORDER BY Total DESC
 
 
Some important areas to be looked for performance stats
 
  1. SQL Profiler
  2. Database Tuning Advisor
For more details
http://www.peterviola.com/solving-sql-server-high-cpu-with-iis-request-filtering/

SQL Server Performance Tips: Top Queries by total CPU Time

SQL Server: Inbuilt Reports

 
 
 

 
 
 
Reference:

My Repository and source of information

Server Configuration

FILE
PATH
DESCRIPTION
machine.config
%windir%\Microsoft.NET\Framework\\config\
Contains most of the .NET Framework sections and settings.
web.config (root)
%windir%\Microsoft.NET\Framework\\config\
Contains more of the ASP. NET-specific sections and settings.
applicationHost.config
%windir%\System32\inetsrv\config (by default)
Contains the IIS global web server, configuration sections, and site settings using location tags.
administration.config
%windir%\System32\inetsrv\config (by default)
Contains the configuration for IIS Manager and the IIS Manager users.
redirection.config
%windir%\System32\inetsrv\config
This is used for shared configuration, which allows applicationHost.config and administration.config to be relocated.

Debugging and Troubleshooting Sources

  1. Windows Event log.
  2. Task Manager process Check
  3. Perfmon performance monitor
  4. Perfview
  5. Http.sys error log
  6. IIS log - Log parser, google analytic tool
  7. Network Connectivity :Ping, tracert and pathping
  8. Port Connectivity telnet
  9. SQL Profiler - tuning option to be selected.
  10. .net CLR profiler
  11. Visual studio Tier Interaction
 

Monday, August 11, 2014

System Level Jargons

  1. Thick Client
  2. Thin Client
  3. Smart Client
  4. Rich Client
  5. Agent
  6. Upstream application
  7. Downstream application
  8. Back door entries
  9. Backend
  10. Frontend
  11. OLTP- Online transaction Processing
  12. Master- Transaction tables
  13. OLAP
  14. MOLAP
  15. Datawarehourse
  16. Datamart
  17. Reporting
  18. Staging Database
  19. ETL- Extract Transform Load
  20. Load balanced.
  21. Custom Development vs Packaged Application
  22. Reverse Engineering/forward engineering

 

Wednesday, August 6, 2014

AngularJs -Directive with Template and TemplateUrl

Directive example here is kind of Widget that is reused . Example of book widget

View

<html data-ng-app="app" id="ng-app" lang="sv">

<div data-ng-controller="ControllerWithScope">

<my-books book="maths"></my-books>

<my-books book="science"></my-books>

</div>
 
Controller and directive:

Here if we use template: "put html element"
if we use templateUrl: provide url

Very Very important:
app.directive('myBooks', function () {
Here 'myBooks' is case sensitive ..it will fail if used mybooks.

 
 

Sunday, August 3, 2014

Web Capacity Analysis Tool (WCAT)

This tool comes very handy if you want to check some specific page level performance w.r.t requests processed in IIS.

Say for e.g, you want to check response time of any page as compared to baseline response time this tools comes as a quick rescue.

Download Tool

http://www.iis.net/downloads/community/2007/05/wcat-63-(x86)

Steps to run this tool.
http://blogs.msdn.com/b/alikl/archive/2008/03/09/stress-test-asp-net-web-application-with-free-wcat-tool.aspx

http://www.iis.net/learn/manage/managing-performance-settings/walkthrough-iis-output-caching

I find this very useful when you don't have to configure heavy duty software , server to just test simple or troubled page.