I am trying to benchmark the time taken for a transaction to execute, can anybody advise me is there anyway I can record the time taken for smart contract transaction to complete?
On one of the major test nets, it's impossible to know the precise time that a block is generated because miners' clocks don't have to be perfectly accurate nor do the timestamps included in blocks need to be correct (they do need to be non-monotonic-decreasing from the last timestamp and less than 900s in the future). However, you can put an upper bound on the time when a block was generated by looking at the time you receive the associated block. Thus, you can note the time you submit the block and the time the including-block is received by monitoring the transaction post-broadcast.
There's probably a better way, but the simplest way to me is to write a program that connects to a node, submits the signed transaction, stores the time, and polls the node for when the transaction is included in a block and noting that time as well. It probably doesn't make sense to poll more than about 10 times a second since statistical variance in block mining times and network propagation delays are going to have a very large effect on the measured values.