def run_test_group(self):
        self.results = []
        self.extensions = []

        # set the OS we're running on
        os_string = platform.uname()[2] + " " + platform.uname()[3]
        if os_string.find("Darwin") > -1:
            os_string = "Mac OS X " + platform.mac_ver()[0]
        if platform.uname()[0].find("Linux") > -1:
            os_string = "Linux " + platform.uname()[5]
        if platform.uname()[0].find("Win") > -1:
            os_string = "Windows " + platform.uname()[3]

        # reset number of passed/failed tests
        self.numpassed = 0
        self.numfailed = 0

        # build our tps.xpi extension
        self.extensions.append(os.path.join(self.extensionDir, 'tps'))
        self.extensions.append(os.path.join(self.extensionDir, "mozmill"))

        # build the test list
        try:
            f = open(self.testfile)
            jsondata = f.read()
            f.close()
            testfiles = json.loads(jsondata)
            testlist = testfiles['tests']
        except ValueError:
            testlist = [os.path.basename(self.testfile)]
        testdir = os.path.dirname(self.testfile)

        self.mozhttpd = MozHttpd(port=4567, docroot=testdir)
        self.mozhttpd.start()

        # run each test, and save the results
        for test in testlist:
            result = self.run_single_test(testdir, test)

            if not self.productversion:
                self.productversion = result['productversion']
            if not self.addonversion:
                self.addonversion = result['addonversion']

            self.results.append({
                'state': result['state'],
                'name': result['name'],
                'message': result['message'],
                'logdata': result['logdata']
            })
            if result['state'] == 'TEST-PASS':
                self.numpassed += 1
            else:
                self.numfailed += 1

        self.mozhttpd.stop()

        # generate the postdata we'll use to post the results to the db
        self.postdata = {
            'tests': self.results,
            'os': os_string,
            'testtype': 'crossweave',
            'productversion': self.productversion,
            'addonversion': self.addonversion,
            'synctype': self.synctype,
        }