Wednesday 16 October 2013

SQL to pull Dynamic Test Summary Report from ALM ..Quick view about the Project Status!!!!

We often get Queries on the Status of the Execution /Project .Requirement Coverage ,test Case associated with it and Defect if any associated with it.
In ALM we do not have a Standardized Report in the form of Excel/Word doc which just pulls the Report.We end up doing a Manual Work ..Manually pick the Requirements Pick the test case ..then defects if any...Imagine a Project with Multiple Requirements and 1000 Test Cases ..this is almost a impossible task..So Solution??????????

Go to Dashboard in ALM ,Select a New Excel Report ....

Query...

   SELECT t1.RC_REQ_ID AS RequirementID,
  t1.RQ_REQ_NAME    AS REQUIREMENTDESC,
  t1.TS_NAME        AS TESTCASENAME,
  BG_BUG_ID         AS DEFECTID,
  BG_SUMMARY,
  BG_DESCRIPTION
FROM
  (SELECT *
  FROM REQ R,
    REQ_COVER RC,
    TEST T
  WHERE RC_ENTITY_ID=T.TS_TEST_ID
  AND Rq_req_product='PROJECT NAME'
  AND R.RQ_REQ_ID   =RC.RC_REQ_ID
  )T1
LEFT OUTER JOIN
  ( SELECT * FROM LINK L,BUG B WHERE L.LN_BUG_ID=B.BG_BUG_ID
  )T2
ON T1.TS_TEST_ID       =T2.LN_ENTITY_ID
AND T2.LN_ENTITY_TYPE IN ('TEST','TESTCYCL')
AND BG_PROJECT         ='PROJECT NAME'




Report Done!!!!!!!!!!!!!!
Let us know if you need any assistance.

Thursday 5 September 2013

Excel Handling in QTP

Hi Folks,
Handling Excel file is very impotant aspect of QTP coding .It is used in parameterization.
I am describing the process in below steps


1. Reference Object:     

 First step of excel handling is to create a reference object, as per below


Set myexcelObj=CreateObject("excel.application")

Now the myexcelObj is not actully holding anything , it is even not pointing to any excel file yet


2.Linking a workbooks(Excel File):

Second Step is to tell your excel reference object that it is gonna point to an excel file(Workbook, both is same thing).so our code will be as below 
.Please note that myexcelObj can point(Handle) more than 1 excel file.



Set myexcelObj=CreateObject("excel.application")
Set myexcelWorkBook =myexcelObj.workbooks.open(FilePATH)

3. Pointing to Worksheet:

Now the myexcelWorkbook object will point to the actual excel file , so the next step is to point the worksheet in that particular file.We can point the worksheet by index or by the sheetname as below

Set myexcelObj=CreateObject("excel.application")
Set myexcelWorkBook =myexcelObj.workbooks.open(FilePATH)
Set myexcelWorksheet=myexcelworkBook.worksheets(SheeetName)

4. Getting the Data:

Once we have reference of the workSheet , getting the data is quite easy .

Set myexcelObj=CreateObject("excel.application")
Set myexcelWorkBook =myexcelObj.workbooks.open(FilePATH)
Set myexcelWorksheet=myexcelworkBook.worksheets(SheeetName)

exceldata=myexcelWorksheet.cells(1,"A").value
             Or
exceldata=myexcelWorksheet.cells(1,1).value
 
 
Now we have received the data as "exceldata" .so the final code is as shown above
Hope this helped.






Monday 2 September 2013

N'th Highest salary in Employee Table

Hi Folks ,
What is the most common question in any of SQL development/DB Testing Interview.

write a query for
2'nd highest salary in employee table.

Generally we use a nested query approach for this question as per below

select employee_sal,employee_name 
from employee where employee_sal=(select max(employee_sal) 
from employee where employee_sal<(select max(employee_sal) 
from employee))


Now if I ask for 3rd highest salary , then again we have to add one more level of subquery...cool...?
but if i ask for 12th highest salary then hmm????
So obviously this is not the right way to wrtite this type of query .
below is generic for Nth highest salary.
lets see how
2nd higest salary
select employee_sal,employee_name from employee emp1 
where 1=(select count(distinct employee_sal) from employee emp2 where 
emp2.employee_sal>emp1.employee_sal)
 
3rd Highest salary
select employee_sal,employee_name from employee emp1 
where 2=(select count(distinct employee_sal) from employee emp2 where 
emp2.employee_sal>emp1.employee_sal)
 
 
I think now you have got the idea...now
Nth highest salary

select employee_sal,employee_name from employee emp1 
where (N-1)=(select count(distinct employee_sal) from employee emp2 where 
emp2.employee_sal>emp1.employee_sal)


Hope this helped

 
 Please subscribe for the Blog , if this helped you 
 
 

Friday 30 August 2013

String And Array Manipulations in VB Scripting: Part2: String Function

Most Useful String Functions:

Hello folks,, I will be discussing few string function which are very useful in our day to day automation coding.
1. InStr([start, ]string1, string2[, compare])
most use variant of this function is as below
Instr(str1,str2)..
This function searches the occurrence of the str2 in the string str1, and returns the first occurrence of the str2.

str1="This world is good world"
str2="world"
msgbox Instr(str1,str2)

:OutPut 6
Notice that it is the position not the index or the subscript as one can confuse it with arrays in which the base is 0.
Now the more advanced version

str1="This world is good world"
str2="world"
msgbox Instr(7,str1,str2)
:output 20
  
Here the first parameter '7' is optional, it shows the starting point of the search.So the first occurrence of "world " is ignored....
The second optional parameter  in below is for comparison mode(0,1).'0 ' means the exact matching(case sensitive, binary comp), '1' means textual comp(case insensitive,textual comp)

str1="This world is good world"
str2="World"
msgbox Instr(7,str1,str2,0)
msgbox Instr(7,str1,str2,1) 
:output 0
:ouput 20
 
 
This completes the Instr Function 

2. InStrRev([start, ]string1, string2[, compare]): Identical to Instr but the search is reversed it search the string from the right side, rest all is same.


Hope it helped..

3.Mid(string, start[, length]): It is one of the very very very important functions in VbScripting.
it gives any specific part of the string .

str1="Hello"

now i want to extract the second letter in it. As it is not a array so we cant use str(1).
So we use

str1="Hello" 
str2=mid(str1,2,1) 
msgbox str2

Output: e 
Now in this statement
mid(str1,2,1) 
Instructs the VB engine that it has to start from the second element(2 as second parameter) and extract the 1 element(1 as the third parameter) from the string str1(first parameter).

This function is used mostly in reversal of string without using reverse function.
see post.
Hope this helped




String And Array Manipulations in VB Scripting: Part1

Array Declaration: .Array declaration are of two types,depending upon the use of the array and the fact whether we know the size of array in advance.
Below are described these one by one.
Static Declaration: In this we must know the exact size of the Array we are gonna use.Below is syntax for the array declaration
Dim Ary(10)..

Array are zero based in VBScriptig so the total no of element in the above mentioned array is 10+1=11 elements.
During declaration of the array we mention the maximum subscript we are gonna use.

data can be assigned  using the indexed

Ary(0)=15

Ary(1)=50


and in same manner it can be retrieved too.
var1=Ary(1)
msgbox var1

Output: 50
 
Arrays can be multidimensional (maximum 60 dimensions). Below is an example of 2-D array with 10 rows and 11 columns.
Dim Ary(9,10)

Dynamic Array Declaration: In this we don't need to know the exact size of array we can change the size of array as we move further.
Dim DynamicAry()

Redim DynamicAry()


Now when we use dynamic array we dont mention sige subscript in Dim statement.
Instead each time while using we mentioned the increased size.
Dim DynamicAry()



Redim DynamicAry(0)
DynamicAry(0)=12
Redim Preserve DynamicAry(1)
DynamicAry(1)=13
msgbox DynamicAry(0)
msgbox DynamicAry(1)



:Output

12

13



Preserve is a keyword which tells the VBScript engine to use preserve the content the of array while changing the size of the array.

I will be posting more on String and Array manipulation in future posts.Keep watching.... :)
Please comment for any query or concerns.



Query to return only test sets with Non Closed defects

HI ,
Below query will give the result for all the test set , which will have linked defect status as non closed status.

Please  notice that this query will account the defects which are conntect to test set only. (there miight be some defect which are linked to test case or test step.)

SO this will give us the name of the Test Set and Ensure that these Test Set have doesnt have any closed defect.
select cy_cycle_id as 'Test Set Name',BG_status 'BUG Status' from cycle,link,bug
where cy_cycle_id=LN_ENTITY_ID and LN_ENTITY_TYPE='CYCLE' and ln_bug_id=bg_bug_id
and cy_cycle_id not in (select ln_entity_id from link,bug
where LN_ENTITY_TYPE='CYCLE' and ln_bug_id=bg_bug_id and bg_status='Closed') 


Please comment if you have nay issue or the cpncern with the result set

Reversing a String: How to reverse a string without using a reverse function

Hi Folks,
I am certain the most of you have come accross the situation like this, This is one of the most common interview question of any programing interview(No matter whether it is Scripting Lang or Prog Lang, you are gonna get this question).

No  in my question I have below example

sampleString="softwareTestingPerfection"
 
Notice that the data is used in String and not in Array and this is where it gets intresting
Now I want the output as

outputString="noitcefrePgnitseTerawtfos"

Now in conventional way we would have the stirng stored in variable array but that is the main feature in this example.We will index the each element of the string without using the actual array.

sampleString="softwareTestingPerfection"

strlen= len(samplestring)
outputString=""
For i=1 to strlen
   outputString=mid(sampleString,i,1)&outputString
Next
msgbox outputString


Hope this will help!!!!!!

for any query/comment please write on the section below


Tuesday 27 August 2013

QTP Basics Part2: Recording modes:Analog Mode

Recording Mode Continued....

Analog Mode: This mode enables user to capture exact mouse movement and the action performed.
For an example if you are gonna click on submit button.It wont capture the submit button and the properties of the object ,instead it will capture the co-ordinate movement and the action performed .So it will capture the info that the a click action is performed at the location.(300,468).
Now again this mode has some drawbacks

Once the a script is recorded with analog mode , we cant edit the Analog Recorded Steps within the QTP.

Steps to use Analog mode:

1. Click on the Red recording button, as in Normal recording mode.
2. once the recording is started . Click on mouse like icon as shown in below screen shot.
Please notice this button is disabled by default.Once we click on the recording button then only it will be enabled.



3. After clicking on the analog Mode recording button. A new window will be    displayed with analog recording options as shown in below snapshot.This has two option.the first option lets QTP capture co-ordinates with reference to the screen itself.
If you want to make QTP store the script capture relative to any specific window(And yes this is more reliable, because you can run several window in this case and those wont conflict )SO it is good practice to use the second option and store analog mode for relative screen capture.(Click on the hand button to specify the window)
4. Once the Proper option is selected, click on the Start Analog Record.
5. perform the action you need to perform and record






6.After recording is done. Click on the stop recording button.



Now Please notice you have received just a one line of statement,instead of multiple line of code specifying each step like in Normal Recording Mode.It just shows a call statement for Analog Capture function, which store the entire story covered till now.
This statement may look as 

Desktop.RunAnalog "Track2" 

And yes we cant see the content of "Track2" .Actually the RunAnalog is a QTP Defined function
which stores the reference of the information storage of the screen capture.(This is similar to
references for checkpoints and sync keywords, but more on those will come in later posts)
And this is the reason we cant modify the steps recorded by Analog method.

Till you I believe you might have noticed that isn't very good technique for scripting as ,in real word 
scenarios You will need to modify the recorded step to a certain extent which is impossible in this 
approach. So advise is to use this   approach for very elementary steps(to capture a couple of basic
operation provided Normal mode is not working for that screen.) and continue rest of the code 
through normal mode.

Hope this Helped....

Please comment for any queries/suggestions regarding the above posts.









QTP Basics Part2: Recording modes:Normal Mode

One of major features of QTP is the ability to record the user's action and play those actions/modified actions back.
Now there are more then one recording mode available in QTP.

1 Normal  Mode
2 Analog Mode
3 Low Level Mode

Now I am going to discuss each of these in detail one by one.

Normal Mode: Record/Playback is one of basic functionality in QTP, and  similarly  Normal mode is the most basic normal mode in QTP.
for normal recording , user need to click on red button as shown in below snapshot.

This mode is the default recording mode of QTP.This mode uses fully the advantage of QTP's Object Test Model.
But again here comes some drawbacks too along with the simplicity of the normal mode.

Actually, when we use the normal mode the complete hihierarchy of the complete Object tree .Which makes the OR unnecessarily bulky.So instead of using this recording mode( as matter of fact we don't prefer using any of the recording modes), we manually add the objects.











Monday 26 August 2013

Understanding Descriptive Programming: Part 2


Continuing from... Understanding Descriptive Programming: Part 1
Now till this moment I expect reader are aware of the Objects and how the object are stored in OR(Object Repositories). Now it is time to come to real point.
Till now we were referring the Object by indicating the QTP that the definition of the particular object is stored in OR  
Idea Behind DP: The basic idea behind DP is to access Object without referring to OR.

How to implement: To implement such feature we describe the properties with which the object can be defined within the code instead of storing those in ORs.

Where to use DP/Why not Object Repositories: It can be used to perform operation on the objects which aren't stored in OR or to perform operation on the object whose properties matches a set of description properties which we can determine at run time.

Ways to implement DP  : DP can be implemented by two way. Static and Dynamic Descriptive Programing.

Static Descriptive Programing: In this type of DP, we mention the description properties within
 the Vb Script statement.

sampleObject("Property1:=Value1",.......,"PropertyN:=Value")

Please notice we have used ":=" instead of usual "=".
This is the General Syntax.Please notice that each "property:=value" must be separated by comma.

Below is a sample Vb Script statement which uses static DP, and a practical use of the static DP

MyVar="Submit"
Browser("BrowserName").Page("PageName").Webtable("TableNAme").Webedit("name:="&MyVar).Set "SampleText"

Now please notice that in above statement we have used a variable Myvar for sting. *a very imporatant thing in static DP is that u cant have static DP object in middle of OR based statment.Means
 
Browser("BrowserName").Page("PageName").Webtable("TableNAme").Webedit("name:=Submit").Set "SampleText"
is prefectly valid syntax , but we cant use
 
Browser("BrowserName").Page("PageName").Webtable("htmlid:=inventroyform").Webedit("Submit").Set "SampleText"
is an invalid syntax, as we cant get reference for the Submit button from DP based object as it is expecting OR based reference.
I will be discussing on dynamic DP in later posts

How to use Increment/Decrement Operator feature in QTP using VBScript

Hi friends, I have been involved with Software Testing and QTP automation for almost 3 years , and I have noticed that in Vb scripting we don't use increment and decrement operator.

We don't have any language support form VB Script itself for increment/decrement operator.It means we cant use below

i=5 
j=i++
or 
msgbox i++

we need to do i=i+1 and sometime when writing long chunk of modules this lack of feature is quite trouble some.
For this we can implement feature by using OOPS architecture.

Step1.
1. Create a new .qfl file (A New function Library) .you can use the existing qfl too, but i recommend to use a new qfl for all CLASS related code.(We say the file name as modifiedOperator.qfl)

2. Now We will create a new Class which will support the this feature, add the below code in your .QFL file.


Class GenericNumber

 Private numberValue

 //Below function will handle the code for PreIncrement function
 Public function [++]()
    numberValue=numberValue+1
    [++]=numberValue
 End Function


 //Below function will handle the code for Predecrement function
 Public function [--]()
    numberValue=numberValue-1
    [--]=numberValue
 End Function


 Public default property get result()
  result=numberValue
 End Property

 Public property let result(n)
  numberValue=n
 End Property

 Sub Class_Initialize()
  numberValue=0
 End Sub

End Class

Now the Above mentioned code will handle the operation for PreIncrement/Predecrement Operations. now we need to implement a constructor like operations so that we can actually use this class

Function [customOperation](x)
   Set [customOperation]=New GenericNumber
   If isnumeric(n) Then
    [customOperation].result=x
   End If
End Function
The Function [customOperation] actually enable the user to use the Class we used now store both class and Function customOperation in modifiedOperator.qfl file Step 2. Now we are goin to use the code we written into our tests/programes.Please remember that we need to include the qfl file into your test ,Application area to use this feature now instead of using a normal integer variable we use a GenericNumber type variable.(We make an object of class GenericNumber for which we use the function customOperation . ) this functions returns the object of the class GenericNumber
// the variable num will hold the a object of type GenericNumber  with value as 5
Set  num=[As Num](5)


msgbox num.[++]
//We use .[++] instead of ++ as was in c/c++ languages.

//now run this code and the answer will be 6 
msgbox num.[--]
//now run this code and the answer will be 5

I hope this helped.

Sunday 25 August 2013

Understanding Descriptive Programming: Part 1

HI Folks..
In This Post I will be describing what is descriptive Programming in using VBScript(QTP), and define the various types of descriptive programming.

What is Descriptive Programing(DP):   Before understanding the DP, we must first know what is Object.
In QTP , Object is anything with a set of properties and methods(functions).
It can be any visual entity displayed on the screen as WebPage,Button,Dropdown(Weblist), all of these are type of Objects.(Although it is not necessary that each object should be visual too, this is done with a specific property .)
Now every object has a set of property with which it is defined, such as a WeButton named as "Submit" will have a set of propertys such as 'name', 'htmlid','innertext','outertext',etc
QTP understanding the entire given script in terms of Objects and the operation performed upon them .
Such as click on the submit button, then within the code we specfiy the object and perform the operation.


now the code might look as

Set buttonObj=Browser("sampleBrowser").page("samplePage").WebButton("Submit")
buttonObj.click

OR
Browser("sampleBrowser").page("samplePage").WebButton("Submit")

both of the statments are virtually same.

now if we are not using the DP methods then the properties of the submit button are  stored in Object repositories.and we can directly specify the name and the location of the object.The properties of the submit button are specified within the OR itself and user does not require to provide the information regarding submit button in code .(As shown in the code above).

But When we use the DP the properties through which object is described in the application(Description properties) will be specified within the code.(Without using the OR)


We will be looking deep into the DP in later parts of the Post.

QTP Basics Part1: Features and Usability of QTP

Hi folks !!!!!

In this series I am gonna describe the basics of the QTP step by step.

First I will be covering the QTP basics then I will be moving to more advanced step.


What is QTP (Quick Test Professional)?:

QTP is software testing automation tool provided by HP.
Main advantages/Reason for using QTP for automation as per below......

1.Fast test creation.(By Use of Keyword views,as well as the provision of modularity)
2.Easier maintenance.
3. Extremely powerful data validation capabilities within the tool.(features provided from the tool it self  in form of checkpoints*).
4 Smart Identification* support from tool.
5. Tool Based provision for recovery scenarios*.
6.Auto documentation*.


* Will be explained in later posts

How to use ByRef parameter calling in Vb Scripting.

Most of the time automation personnel don't use the ByRef parameter functionality.
They use normal function calling with which is by default byVal.

Now actually most of the time tester don't know these two feature.so first I m gonna explain there two one by one.

1.ByVal Function calling.

Syntax:

var1=ADD(parameter1,parameter2)




Function ADD(val1,val2)

 val1=val1+1
  ADD=val1+val2


End Function


Function ADD(ByVal val1,ByVal val2)

 val1=val1+1
  ADD=val1+val2


End Function


now in this case the parameter calling is ByVal.In fact both of the statements are identical.

when we byval prefix , it means only a copy of the parameter is going within the function.Any Changes made within  the parameter wont reflect the in the actual called value.
but if we use below syntax


var1=ADD(parameter1,parameter2)
Function ADD(ByRef val1,val2)

 val1=val1+1
  ADD=val1+val2


End Function


in this case any changes made in val1 will reflect in parameter1 too.



QTP Tutorial

Hi Folks  a page is getting launched , which will be dedicated to QTP Tutorials
This is collect step by step process to learn QTP Automation, within BPT Framework.

A New Page Dedicated to DataBase Testing

Hi Folks this is a page which will be dedicated to Database Testing

A New Page Dedicated to HP-Quality Center

Hi Folks this is a page which will be dedicated to HP-Quality Center .
We will discuss about HP-QC/HP-ALM along with HP OTA related topics here

Function Calling In VB Scripting, use of parenthesis

In VB scripting we notice two type function call syntex as per below

syntex1
Object.func1 parm1,param2

syntex2
Object.func2(param1,param2)

Now the question is what is difference between these two syntax.The answer is quite simple , it depends on the context . NO matter what the function is , if you are going to assign the return value to some variable or the result of the function call is used as input for some other function then the function should have the parameters in parenthesis.

example
msgbox "Hi"
msgbox trim(" Hi ")

Tuesday 11 June 2013

How to Get Column No for any field/ColumnName in WebTable

Below is a piece of code which should be part of ur .QFL file.this will return the column no for specfic cell text(in specfic row).
this is very essential function as by defect VBScript/QTP lib provide only row no not column for cell data


Function gettingColNo( tbleObj,ColName,RowNo) 
 colcount= tbleObj.ColumnCount(row)
  For colNum =1 To colcount
   ColHeader = tbleObj.GetCellData(RowNo,colNum)
   If inStr(Lcase(ColHeader),Lcase(ColName)) > 0 Then
    blnResult = True
    gettingColNo= colNum
    Exit For
   End If
  Next        
  If  colNum > colcount  Then
    blnResult = False
    'your custom code to hadle false condtion, like reporting to parent function or qc
  End If
End Function


How to Get a unique row in a webTable Object with Defined column Names

Recently I came across the situation where I need to insert a row in a table and then the validate the
same in the table, whether the row is successfully added or not.
I have written a piece of code which i think will be usefull for u guys in your projects as well.
This is a very common feature of PRPC framework based applications.In which almost everything is composed of Tables
Now there are the few thing we need to make sure that the row is added .

1. We need to check the row count of the table before the row is inserted.Which we can later
    compare  to the row count after the insertion.
2. Once we are sure that the row is added. we need to make sure we have the exact row added which
     we were supposed to .

now for this step 2 we can write a func. which we can use in projects.

I believe it will be usefull for u guys.






 Function Fn_UniqueFirstRow(tblObj,strColNames,strValues)

strRowNum="-1"
aryColNames=Split( strColNames,";")
aryValues=Split(strValues,";")
rowFound=False
rowCount=tblObj.GetROProperty("rows")
If rowCount>0 Then
 If UBound(aryColNames)=UBound(aryValues) Then
  colCount=UBound(aryColNames)
  For rowCounter=1 to rowCount
   '---compile the actual row Value for each row and compare
   MsgSTR=""
   For colCounter=0 to  colCount
    colName=Trim(aryColNames(colCounter))
    '----Now here I m expecting that you have some function to get column   
    '---number, 'if not i will be posting that as well later
    colNumber=Fn_ColumnNumber( colName,tblObj,1)
    colData=Trim(tblObj.GetCellData(rowCounter,colNumber))
      If colCounter=0 Then
        MsgSTR=colData
      Else
        MsgSTR=MsgSTR&";"&colData
     End If
    Next
    If StrComp(Trim(MsgSTR),Trim(strValues)) = 0 Then
     rowFound=True
     strRowNum=rowCounter&";"&" Unique is row found with given values"
     Exit For
    End If
  Next
   If  Not rowFound Then
    strRowNum="-1"&";"&"Unique row doesnt exist"
   End If    
   Else
    strRowNum="-3"&";"&"Col Names and col Values arent in same number"
   End If
  Else
   stRowNum="-2"&";"&"Table has no rows"
  End If
   Fn_UniqueFirstRow=strRowNum
 End Function 

Thursday 25 April 2013

QTP: Handling WebEdit in WebTable Object.

Using web table in conventional WebApps Testing is quite uncommon.\
As we know all the WebButton, Webedits ,WebLists are ususallu linked with a webtable in webpage.
If we direct object validation for WebEdit as it may look like as below
UserName:  [     ]
Here [] represents the webedit.
Normally what people do is they add this webedit obj in there rep and do their validations. But in my opinion this is not a smart work.

We should access them from User Name field because this is how a Manual SME will see the Username name webedit. Because in approve stated approch webedit can be any where in page but next to username field and it will still be passed.

SO what should we do?????? Hmmm

right a function which handle the webtable it will get the value /Child tiem next to given cell data (In this case UserName)
Now when u pass the value "User Name" to func it you can access anything which is next to this field. By the use of functions u can get the falue /fill the value etc..
yes yes .. i know it will take alot of time to right the func for all cases.
but once it is written it is quite easy to use those in daily scripts.. and belive me your Test Case will req very low maintainence, as it wont be tackling webedit directly it is hadling the webtable, so it wont matter if the prop of Webedit chnages in future.







Tuesday 23 April 2013

About the Blog.....Starting a new journey

Software Testing can be boring as well as a lot of fun, both altogether,  depending totally upon your perspective.Here at this blog I will be  going to share  ideas and the new techniques  in Software Testing.
Unlike the title says this blog is not just about Automation Testing, it will comprise various Testing methodologies , Tools such as QTP,QC and Selenium, as well as manual Testing.