Exemple #1
0
    def __init__(self,
                 stream=sys.stdout,
                 error_stream=sys.stderr,
                 output_testresult=False,
                 output_summary=True):
        '''构造函数
        :param stream: 指定要输出的流设备
        :type stream: file
        :param output_testresult: 是否输出测试用例执行的日志
        :type output_testresult: boolean
        :param output_summary: 是否输出执行汇总信息
        :type output_summary: boolean
        '''
        super(StreamTestReport, self).__init__()
        self._stream, encoding = ensure_binary_stream(stream)
        self._err_stream, _ = ensure_binary_stream(error_stream)
        self._write = lambda x: self._stream.write(
            smart_binary(x, encoding=encoding))
        self._write_err = lambda x: self._err_stream.write(
            smart_binary(x, encoding=encoding))

        self._output_testresult = output_testresult
        self._output_summary = output_summary
        self._passed_testresults = []
        self._failed_testresults = []
Exemple #2
0
    def send_text(self, message):
        '''
        NOTES
        Fragmented(=continuation) messages are not being used since their usage
        is needed in very limited cases - when we don't know the payload length.
        '''

        # Validate message
        if isinstance(message, bytes):
            message = smart_binary(
                message)  # this is slower but assures we have UTF-8
            if not message:
                print("Can\'t send message, message is not valid UTF-8")
                return False
        elif isinstance(message, str) or isinstance(message, unicode):
            pass
        else:
            print(
                'Can\'t send message, message has to be a string or bytes. Given type is %s'
                % type(message))
            return False

        header = bytearray()
        payload = smart_binary(message)
        payload_length = len(payload)

        # Normal payload
        if payload_length <= 125:
            header.append(FIN | OPCODE_TEXT)
            header.append(payload_length)

        # Extended payload
        elif payload_length >= 126 and payload_length <= 65535:
            header.append(FIN | OPCODE_TEXT)
            header.append(PAYLOAD_LEN_EXT16)
            header.extend(struct.pack(">H", payload_length))

        # Huge extended payload
        elif payload_length < 18446744073709551616:
            header.append(FIN | OPCODE_TEXT)
            header.append(PAYLOAD_LEN_EXT64)
            header.extend(struct.pack(">Q", payload_length))

        else:
            raise Exception(
                "Message is too big. Consider breaking it into chunks.")
            return

        self.request.send(header + payload)
Exemple #3
0
 def test_smart_binary(self):
     s = u'11111\udce444444'
     result = util.smart_binary(s)
     if six.PY3:
         self.assertEqual(result, b"'11111\\udce444444'")
     else:
         self.assertEqual(result, '11111\xed\xb3\xa444444')
Exemple #4
0
 def get_file(self):
     file_name = '%s_%s.js' % (self._translated_name, get_time_str())
     if not path_exists(file_name):
         var_name = os.path.basename(file_name)
         var_name = os.path.splitext(file_name)[0].replace(".", "_")
         content = "var %s = %s" % (var_name, json.dumps(self._data))
         content = smart_binary(content)
         with codecs_open(file_name, mode="wb") as fd:
             fd.write(content)
     return file_name
Exemple #5
0
 def __init__(self, stream=sys.stdout):
     '''构造函数
     
     :param stream: 流对象
     :type stream: file
     '''
     super(StreamResult, self).__init__()
     self._stream, encoding = ensure_binary_stream(stream)
     self._write = lambda x: self._stream.write(smart_binary(x, encoding=encoding))
     self._step_results = []
Exemple #6
0
 def log_load_error(self, loader, name, error):
     """记录一个加载失败的用例或用例集
     :param loader: 用例加载器
     :type loader: TestLoader
     :param name: 名称
     :type name: str
     :param error: 错误信息
     :type error: str
     """
     line = ""
     for line in reversed(error.split("\n")):
         if line.strip():
             break
     self._write_err("load test failed: %s (error: %s)\n" % (name, line))
     self._write_err(smart_binary(error))
Exemple #7
0
 def log_test_result(self, testcase, testresult):
     '''记录一个测试结果
     :param testcase: 测试用例
     :type testcase: TestCase
     :param testresult: 测试结果
     :type testresult: XmlResult
     '''
     super(XMLTestReport, self).log_test_result(testcase, testresult)
     casemark = saxutils.escape(testcase.test_doc)
     nodestr = """<TestResult result="%s" log="%s" status="%s">%s</TestResult>
     """ % (testresult.passed, testresult.file_path, testcase.status, casemark)
     doc2 = dom.parseString(smart_binary(nodestr))
     resultNode = doc2.childNodes[0]
     resultNode.setAttribute("name", smart_text(saxutils.escape(testcase.test_name)))
     resultNode.setAttribute("owner", smart_text(saxutils.escape(testcase.owner)))
     self._runrstnode.appendChild(resultNode)
Exemple #8
0
 def log_load_error(self, loader, name, error):
     '''记录一个加载失败的用例或用例集
     :param loader: 用例加载器
     :type loader: TestLoader
     :param name: 名称
     :type name: str
     :param error: 错误信息
     :type error: str
     '''
     log_file = "%s.log" % name
     nodestr = """<LoadTestError name="%s" log="%s"></LoadTestError>
     """ % (
         smart_text(saxutils.escape(name)),
         log_file,
     )
     doc2 = dom.parseString(nodestr)
     errNode = doc2.childNodes[0]
     self._runrstnode.appendChild(errNode)
     with codecs_open(log_file, 'wb') as fd:
         fd.write(smart_binary(error))
Exemple #9
0
 def log_record(self, level, tag, msg, record={}):
     '''增加一个记录
     :param level: 日志级别
     :param msg: 日志消息
     :param tag: 日志标签
     :param record: 日志记录信息
     :type level: string
     :type tag: string
     :type msg: string
     :type record: dict
     '''
     if tag == 'LOADER' and level == EnumLogLevel.ERROR:
         if 'error_testname' in record and 'error' in record:
             testname = record['error_testname']
             mdfailsnode = self._xmldoc.createElement("LoadFailure")
             self._runrstnode.appendChild(mdfailsnode)
             logfile = '%s.log' % testname
             xmltpl = """<Module name="%s" log="%s"/>""" % (testname, logfile)
             mdfailsnode.appendChild(dom.parseString(xmltpl).childNodes[0])
             with codecs_open(logfile, 'wb') as fd:
                 fd.write(smart_binary(record['error']))
Exemple #10
0
def translate_test_name(testname):
    if six.PY2:
        translated_name = smart_binary(testname).translate(TRANS)
    else:
        translated_name = smart_text(testname).translate(TRANS)
    return translated_name
Exemple #11
0
 def format(self, record):
     s = super(_Formatter, self).format(record)
     return smart_binary(s, encoding=_encoding)