Ask a Question

Python speed

SOLVED
msaunders
Contributor

Python speed

I have found python to be extremely slow in test complete. I have created some timing tests iterating over arrays and doing actions with the array data.

I also wrote the exact same code and ran it in normal python command shell.

In test complete I am getting timing in the range of a few hundred ms all the way up to full second.

In command shell I am in the 1 ms range.

Are there any known issues with python and test complete? I am doing 0 interactions with my software's ui for this timing test as I wanted to rule out response time from my ui.

This all came about because tests just seem very show overall so going back to basics. I am using latest build of test complete.

I can share code snippets tomorrow when I am back in the office if that is necessary.

Thanks in advance for any feedback.
6 REPLIES 6
baxatob
Community Hero

Yes, you are right. Unfortunately Python scripts work slower than JS or VB (within TestComplete). However it became much faster from version 11 to 12. And I hope this trend will not be broken.

 

At the same time I can excuse some lack of speed during the run-time, because with Python I have a very powerful tool during test development.

msaunders
Contributor

Attached is the script(had to make txt to attach) that I am using, just need to set the print to be log in TC.

 

the output from TC is 360 and 858.

Run in python shell the output is 1 and 1.

 

This is shown in the second attachment image

 

I will make a support ticket as this is using straight python nothing TC, it seems crazy that it is that much slower!

 

This came up because it takes a really long time to run tests and the developers were asking me why.

 

Don't forget that TestComplete needs a time to launch its own Python interpreter.
In the case with the shell the interpreter is already launched.

msaunders
Contributor

Good point I think I accounted for that by having the timer only around the action not the entire function. Maybe python time.time does something I don't expect.

 

I believe I am ignoring the 2-3 seconds it takes before the test even starts. I consider that time acceptable but iteration on an array to be almost 1 second seems pretty slow. 

 

def test_timing():
    print("starting")
    start_num = time.time()
    numbers = create_permuted_ints(100)
    made_num = time.time()
    for i in range(50):
        for j in range(100):
            numbers[j] = (2 * numbers[j]) % 10000
    end_num = time.time()
    dt6 = int((made_num - start_num) * 1000)
    dt7 = int((end_num - start_num) * 1000)
    print(dt6)
    print(dt7)
    print("done")

msaunders
Contributor

Support said this is just speed within the api and can't say much more. They said it has gotten faster over time so maybe will get better in the future but for now there is not much one can do to speed it up.

We are going to move highs speed routines out of test complete for now as it seems like the better plan.

To add to this...you can certainly write a .NET DLL to do the heavy lifting (c# or whatever) and call its public methods from TestComplete (via CLR Bridge).

cancel
Showing results for 
Search instead for 
Did you mean: