Squish/Calculating Checksums

From Qt Wiki
Jump to: navigation, search


Calculating checksums

When you are testing e.g. a file transfer client, and you want to make sure the file transferred is the same on both the sender and the receiver side, one easy way of doing this is using checksums. And luckily for us, Python comes with a hashlib module, with support for exactly that! Problem? The Python code in your test script is being executed in the context of the squishrunner, which is a problem if your application (and hence your files) are being executed on another machine, e.g. an embedded system.

But as mentioned in the article on generating test data, Squish gives us access to most of the Qt API using the built-in Qt wrapper library. And whatever Qt code we put into our test script will be executed in the context of the AUT, even when the AUT is being executed on an embedded system. So combining the fact that the Qt code is being executed on the AUT side along with Python's hashlib module, we can generate checksums!

import hashlib
def calculateMd5(fileName):
  m = hashlib.md5()
  file = QFile("%s/%s" % (currentApplicationContext().cwd, fileName))
  if file.open(QIODevice.ReadOnly):
    mb = 1024*1024
    while not file.atEnd():
      data = file.read(mb)
      m.update(str(data))
    file.close()
  return m.hexdigest()

Usage:

sum = calculateMd5("test.txt")