14514f5e3Sopenharmony_ci#!/usr/bin/env python 24514f5e3Sopenharmony_ci# -*- coding: utf-8 -*- 34514f5e3Sopenharmony_ci 44514f5e3Sopenharmony_ci# Copyright (c) 2023 Huawei Device Co., Ltd. 54514f5e3Sopenharmony_ci# 64514f5e3Sopenharmony_ci# HDF is dual licensed: you can use it either under the terms of 74514f5e3Sopenharmony_ci# the GPL, or the BSD license, at your option. 84514f5e3Sopenharmony_ci# See the LICENSE file in the root of this repository for complete details. 94514f5e3Sopenharmony_ci 104514f5e3Sopenharmony_ciimport os 114514f5e3Sopenharmony_ciimport shutil 124514f5e3Sopenharmony_cifrom http.server import SimpleHTTPRequestHandler 134514f5e3Sopenharmony_ciimport socketserver 144514f5e3Sopenharmony_ciimport threading 154514f5e3Sopenharmony_cifrom selenium import webdriver 164514f5e3Sopenharmony_cifrom selenium.webdriver.common.action_chains import ActionChains 174514f5e3Sopenharmony_ciimport time 184514f5e3Sopenharmony_ciimport easyocr 194514f5e3Sopenharmony_ciimport nltk 204514f5e3Sopenharmony_ciimport cv2 214514f5e3Sopenharmony_ciimport tempfile 224514f5e3Sopenharmony_ciimport pytest 234514f5e3Sopenharmony_ciimport subprocess 244514f5e3Sopenharmony_ci 254514f5e3Sopenharmony_ciweb_path = os.path.realpath("../dist") 264514f5e3Sopenharmony_ci 274514f5e3Sopenharmony_ci 284514f5e3Sopenharmony_ciclass MyHttpRequestHandler(SimpleHTTPRequestHandler): 294514f5e3Sopenharmony_ci def __init__(self, *args, **kwargs): 304514f5e3Sopenharmony_ci super().__init__(*args, directory=web_path, **kwargs) 314514f5e3Sopenharmony_ci 324514f5e3Sopenharmony_ci 334514f5e3Sopenharmony_cihttpd = socketserver.TCPServer(("", 9999), MyHttpRequestHandler) 344514f5e3Sopenharmony_cidriver = webdriver.Chrome() 354514f5e3Sopenharmony_ciactions = ActionChains(driver) 364514f5e3Sopenharmony_cireader = easyocr.Reader(['ch_sim', 'en'], verbose=False) 374514f5e3Sopenharmony_ciwindow_width = -1 384514f5e3Sopenharmony_ciwindow_height = -1 394514f5e3Sopenharmony_citemp_image_file = os.path.join(tempfile.gettempdir(), "test.png") 404514f5e3Sopenharmony_ci 414514f5e3Sopenharmony_ci 424514f5e3Sopenharmony_cidef cut_image(image, x, y, w, h): 434514f5e3Sopenharmony_ci x = int(x) 444514f5e3Sopenharmony_ci y = int(y) 454514f5e3Sopenharmony_ci return image[y:y + h, x:x + w] 464514f5e3Sopenharmony_ci 474514f5e3Sopenharmony_ci 484514f5e3Sopenharmony_cioldx = 0 494514f5e3Sopenharmony_cioldy = 0 504514f5e3Sopenharmony_ci 514514f5e3Sopenharmony_ci 524514f5e3Sopenharmony_cidef click_on_page(x, y): 534514f5e3Sopenharmony_ci global oldx, oldy 544514f5e3Sopenharmony_ci actions.move_by_offset(x - oldx, y - oldy).click().perform() 554514f5e3Sopenharmony_ci oldx = x 564514f5e3Sopenharmony_ci oldy = y 574514f5e3Sopenharmony_ci time.sleep(1) 584514f5e3Sopenharmony_ci 594514f5e3Sopenharmony_ci 604514f5e3Sopenharmony_cidef setup(): 614514f5e3Sopenharmony_ci os.chdir("..") 624514f5e3Sopenharmony_ci 634514f5e3Sopenharmony_ci print("setup : 编译项目") 644514f5e3Sopenharmony_ci subprocess.run(["npm", "run", "dist"]) 654514f5e3Sopenharmony_ci 664514f5e3Sopenharmony_ci print("setup : 拷贝测试文件") 674514f5e3Sopenharmony_ci shutil.copy("examples/log_loop.txt", "dist/test.txt") 684514f5e3Sopenharmony_ci 694514f5e3Sopenharmony_ci print("setup : 启动web服务") 704514f5e3Sopenharmony_ci threading.Thread(target=httpd.serve_forever).start() 714514f5e3Sopenharmony_ci 724514f5e3Sopenharmony_ci print("setup : selenium打开测试页面") 734514f5e3Sopenharmony_ci driver.implicitly_wait(10) 744514f5e3Sopenharmony_ci driver.get("http://127.0.0.1:9999") 754514f5e3Sopenharmony_ci global window_width, window_height 764514f5e3Sopenharmony_ci window_width = driver.execute_script("return document.body.clientWidth") 774514f5e3Sopenharmony_ci window_height = driver.execute_script("return document.body.clientHeight") 784514f5e3Sopenharmony_ci 794514f5e3Sopenharmony_ci 804514f5e3Sopenharmony_cidef teardown(): 814514f5e3Sopenharmony_ci print("teardown : 关闭selenium") 824514f5e3Sopenharmony_ci driver.close() 834514f5e3Sopenharmony_ci 844514f5e3Sopenharmony_ci print("teardown : 关闭web服务") 854514f5e3Sopenharmony_ci httpd.shutdown() 864514f5e3Sopenharmony_ci 874514f5e3Sopenharmony_ci 884514f5e3Sopenharmony_cidef test_loading(): # 验证载入中画面 894514f5e3Sopenharmony_ci driver.get_screenshot_as_file(temp_image_file) 904514f5e3Sopenharmony_ci image = cv2.imread(temp_image_file) 914514f5e3Sopenharmony_ci result = reader.readtext(cut_image(image, window_width / 2 - 100, window_height / 2 - 20, 200, 40)) 924514f5e3Sopenharmony_ci assert result[0][1][:7] == "Loading" 934514f5e3Sopenharmony_ci 944514f5e3Sopenharmony_ci 954514f5e3Sopenharmony_cidef test_start(): # 验证主画面显示 964514f5e3Sopenharmony_ci time.sleep(5) 974514f5e3Sopenharmony_ci driver.get_screenshot_as_file(temp_image_file) 984514f5e3Sopenharmony_ci image = cv2.imread(temp_image_file) 994514f5e3Sopenharmony_ci result = reader.readtext(cut_image(image, 10, 100, 60, 20)) 1004514f5e3Sopenharmony_ci assert result[0][1] == "隐藏选中" 1014514f5e3Sopenharmony_ci 1024514f5e3Sopenharmony_ci 1034514f5e3Sopenharmony_cidef find_string_in_result(s, result): 1044514f5e3Sopenharmony_ci dis = 999 1054514f5e3Sopenharmony_ci p = -1 1064514f5e3Sopenharmony_ci for i, r in enumerate(result): 1074514f5e3Sopenharmony_ci d = nltk.edit_distance(r[1], s) 1084514f5e3Sopenharmony_ci if d < dis: 1094514f5e3Sopenharmony_ci dis = d 1104514f5e3Sopenharmony_ci p = i 1114514f5e3Sopenharmony_ci if dis < len(s) / 2: 1124514f5e3Sopenharmony_ci return result[p] 1134514f5e3Sopenharmony_ci return False 1144514f5e3Sopenharmony_ci 1154514f5e3Sopenharmony_ci 1164514f5e3Sopenharmony_cidef test_selectfunc(): # 点击优化类型切换下拉菜单,选择优化类型 1174514f5e3Sopenharmony_ci click_on_page(420, 50) 1184514f5e3Sopenharmony_ci click_on_page(420, 150) 1194514f5e3Sopenharmony_ci 1204514f5e3Sopenharmony_ci driver.get_screenshot_as_file(temp_image_file) 1214514f5e3Sopenharmony_ci image = cv2.imread(temp_image_file) 1224514f5e3Sopenharmony_ci result = reader.readtext(image) 1234514f5e3Sopenharmony_ci ret = find_string_in_result("0,CIRCUIT_ROOT", result) 1244514f5e3Sopenharmony_ci assert ret != False 1254514f5e3Sopenharmony_ci 1264514f5e3Sopenharmony_ci 1274514f5e3Sopenharmony_cidef test_hide(): # 点击state和root按钮,隐藏0,CIRCUIT_ROOT 1284514f5e3Sopenharmony_ci click_on_page(40, 80) 1294514f5e3Sopenharmony_ci click_on_page(350, 80) 1304514f5e3Sopenharmony_ci 1314514f5e3Sopenharmony_ci driver.get_screenshot_as_file(temp_image_file) 1324514f5e3Sopenharmony_ci image = cv2.imread(temp_image_file) 1334514f5e3Sopenharmony_ci result = reader.readtext(image) 1344514f5e3Sopenharmony_ci ret = find_string_in_result("0,CIRCUIT_ROOT", result) 1354514f5e3Sopenharmony_ci assert ret == False 1364514f5e3Sopenharmony_ci 1374514f5e3Sopenharmony_ci 1384514f5e3Sopenharmony_cidef test_wait(): 1394514f5e3Sopenharmony_ci time.sleep(10) 140