__init__.py 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import json
  2. import os
  3. import datetime
  4. import atexit
  5. from ssat_sdk.uiautomator2 import UIAutomatorServer
  6. from ssat_sdk.uiautomator2.ext.info import conf
  7. class Info(object):
  8. def __init__(self, driver, package_name=None):
  9. self._driver = driver
  10. self.output_dir = 'report/'
  11. self.pkg_name = package_name
  12. self.test_info = {}
  13. atexit.register(self.write_info)
  14. def read_file(self, filename):
  15. try:
  16. with open(self.output_dir + filename, 'r') as f:
  17. return f.read()
  18. except IOError as e:
  19. print(os.strerror(e.errno))
  20. def get_basic_info(self):
  21. device_info = self._driver.device_info
  22. app_info = self._driver.app_info(self.pkg_name)
  23. # query for exact model info
  24. if device_info['model'] in conf.phones:
  25. device_info['model'] = conf.phones[device_info['model']]
  26. self.test_info['basic_info'] = {'device_info': device_info, 'app_info': app_info}
  27. def get_app_icon(self):
  28. icon = self._driver.app_icon(self.pkg_name)
  29. icon.save(self.output_dir + 'icon.png')
  30. def get_record_info(self):
  31. record = json.loads(self.read_file('record.json'))
  32. steps = len(record['steps'])
  33. start_time = datetime.datetime.strptime(record['steps'][0]['time'],
  34. '%H:%M:%S')
  35. end_time = datetime.datetime.strptime(
  36. record['steps'][steps - 1]['time'], '%H:%M:%S')
  37. total_time = end_time - start_time
  38. self.test_info['record_info'] = {
  39. 'steps': steps,
  40. 'start_time': record['steps'][0]['time'],
  41. 'total_time': str(total_time)
  42. }
  43. def get_result_info(self):
  44. log = self.read_file('log.txt')
  45. trace_list = []
  46. if log:
  47. log = log.splitlines()
  48. for i in range(len(log)):
  49. if 'Traceback' in log[i]:
  50. new_trace = log[i]
  51. i += 1
  52. while 'File' in log[i]:
  53. new_trace += '\n' + log[i]
  54. i += 1
  55. new_trace += '\n' + log[i]
  56. trace_list.append(new_trace)
  57. self.test_info['trace_info'] = {
  58. 'trace_count': len(trace_list),
  59. 'trace_list': trace_list
  60. }
  61. def start(self):
  62. self.get_basic_info()
  63. self.get_app_icon()
  64. def write_info(self):
  65. # self.get_basic_info()
  66. self.get_record_info()
  67. self.get_result_info()
  68. with open(self.output_dir + 'info.json', 'wb') as f:
  69. f.write(json.dumps(self.test_info))