From: jykeon Date: Wed, 24 May 2023 03:41:49 +0000 (+0900) Subject: Add file for UI automation testing. X-Git-Tag: accepted/tizen/unified/20230613.170814~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ec26d3bbf01262660e906c7325838efac9d7d4bd;p=platform%2Fcore%2Fuifw%2Faurum.git Add file for UI automation testing. It is necessary install guide file and use testing python file. Signed-off-by: jykeon Change-Id: Id2383c4eb0b4ccec0f813026cf9e2dd829a0a27a Signed-off-by: jykeon --- diff --git "a/docs/script/01_Contents/002. LOVE SONG - \353\271\205\353\261\205.mp3" "b/docs/script/01_Contents/002. LOVE SONG - \353\271\205\353\261\205.mp3" new file mode 100644 index 0000000..72aad8a Binary files /dev/null and "b/docs/script/01_Contents/002. LOVE SONG - \353\271\205\353\261\205.mp3" differ diff --git a/docs/script/01_Contents/20220721_165923.mp4 b/docs/script/01_Contents/20220721_165923.mp4 new file mode 100644 index 0000000..c630a2f Binary files /dev/null and b/docs/script/01_Contents/20220721_165923.mp4 differ diff --git a/docs/script/01_Contents/IMG_8777.jpg b/docs/script/01_Contents/IMG_8777.jpg new file mode 100644 index 0000000..f3531bb Binary files /dev/null and b/docs/script/01_Contents/IMG_8777.jpg differ diff --git a/docs/script/requirements.txt b/docs/script/requirements.txt new file mode 100644 index 0000000..14a07d8 --- /dev/null +++ b/docs/script/requirements.txt @@ -0,0 +1,7 @@ +grpcio +grpcio-tools +protobuf +six +numpy +opencv-python +pillow diff --git a/docs/script/screenShot_vd_smoke_test.py b/docs/script/screenShot_vd_smoke_test.py new file mode 100755 index 0000000..46f863d --- /dev/null +++ b/docs/script/screenShot_vd_smoke_test.py @@ -0,0 +1,473 @@ +# test python script must be in same location as aurum_pb2.py + +# python3 -m venv v +# source v/bin/activate +# pip3 install grpcio grpcio-tools +# +# python3 -m grpc_tools.protoc --python_out=. --grpc_python_out=. --proto_path=. aurum.proto +# +# python3 .py +# deactivate + +from utils import * + +#4 Menu Control Test +def ST04_MENU_CONTROL(): + print("- Menu Test") + if SEND_KEY_WAIT_APP_LAUNCHING("XF86SysMenu", "org.tizen.menu", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_CONTENT_LOAD) == False: + return False + SEND_KEY("Down", WAIT_AFTER_KEY) + SEND_KEY("Down", WAIT_AFTER_KEY) + SEND_KEY("Down", WAIT_AFTER_KEY) + SEND_KEY("Down", WAIT_AFTER_KEY) + SEND_KEY("Return", WAIT_AFTER_KEY) + SEND_KEY("Return", WAIT_AFTER_KEY) + SEND_KEY("Return", WAIT_AFTER_KEY) + TAKE_SCREENSHOT(ST04_MENU_CONTROL.__name__ + '_Menu.png') + SEND_KEY("XF86Back", WAIT_AFTER_KEY) + SEND_KEY("XF86Back", WAIT_AFTER_KEY) + SEND_KEY("XF86Back", WAIT_AFTER_KEY) + + HOME() + + print("- Broadcasting Info Test") + if SEND_KEY_WAIT_APP_LAUNCHING("XF86ChannelGuide", "org.tizen.epg", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_LOAD) == False: + return False + SEND_KEY("Down", WAIT_AFTER_KEY) + SEND_KEY("Down", WAIT_AFTER_KEY) + SEND_KEY("Down", WAIT_AFTER_KEY) + TAKE_SCREENSHOT(ST04_MENU_CONTROL.__name__ + '_Broadcasting_Info.png') + + HOME() + + print("- Channel Info Test") + SEND_KEY_WAIT_EVENT("Return", "EVENT_WINDOW_ACTIVATE", WAIT_FOR_APP_TRANSFROM) + #Wait for automatically activated channel info disappear + time.sleep(WAIT_FOR_APP_CONTENT_LOAD) + if SEND_KEY_WAIT_APP_LAUNCHING("Return", "org.tizen.hbbtv", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_TRANSFROM) == False: + return False + SEND_KEY("Left", WAIT_AFTER_KEY) + SEND_KEY("Right", WAIT_AFTER_KEY) + TAKE_SCREENSHOT(ST04_MENU_CONTROL.__name__ + '_Channel_Info.png') + + return True + +#8 My content Test +def ST08_MY_CONTENT(): + print("- My Contents Launching") + SEND_KEY("Left", WAIT_AFTER_KEY) + SEND_KEY("Down", WAIT_AFTER_KEY) + SEND_KEY("Right", WAIT_AFTER_KEY) + SEND_KEY("Right", WAIT_AFTER_KEY) + SEND_KEY("Right", WAIT_AFTER_KEY) + if SEND_KEY_WAIT_APP_LAUNCHING("Return", "com.samsung.tv.mycontents", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_LOAD) == False: + RESET_TO_TVPLUS() + return False + TAKE_SCREENSHOT(ST08_MY_CONTENT.__name__ + '_Launched.png') + + print("- My Contents Video Play") + SEND_KEY("Return", WAIT_AFTER_KEY) + SEND_KEY("Right", WAIT_AFTER_KEY) + if SEND_KEY_WAIT_APP_LAUNCHING("Return", "org.tizen.mycontent-video-player-tv", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_CONTENT_LOAD) == False: + RESET_TO_TVPLUS() + return False + SEND_KEY("Right", WAIT_AFTER_KEY) + SEND_KEY("Left", WAIT_AFTER_KEY) + TAKE_SCREENSHOT(ST08_MY_CONTENT.__name__ + '_Video_Player.png') + SEND_KEY("XF86Back", WAIT_AFTER_KEY) + if SEND_KEY_WAIT_APP_LAUNCHING("XF86Back", "com.samsung.tv.mycontents", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_CONTENT_LOAD) == False: + RESET_TO_TVPLUS() + return False + + print("- My Contents Photo Play") + SEND_KEY("Down", WAIT_AFTER_KEY) + if SEND_KEY_WAIT_APP_LAUNCHING("Return", "org.tizen.mycontent-photo-player-tv", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_CONTENT_LOAD) == False: + RESET_TO_TVPLUS() + return False + TAKE_SCREENSHOT(ST08_MY_CONTENT.__name__ + '_Photo_Player.png') + if SEND_KEY_WAIT_APP_LAUNCHING("XF86Back", "com.samsung.tv.mycontents", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_CONTENT_LOAD) == False: + RESET_TO_TVPLUS() + return False + + print("- My Contents Music Play") + SEND_KEY("Left", WAIT_AFTER_KEY) + SEND_KEY_WAIT_EVENT("Return", "EVENT_WINDOW_IDLE", WAIT_FOR_APP_CONTENT_LOAD) #Wait till view transformed + TAKE_SCREENSHOT(ST08_MY_CONTENT.__name__ + '_Music_Play.png') + + #Back to default view + SEND_KEY("XF86Back", WAIT_AFTER_KEY) + SEND_KEY("Up", WAIT_AFTER_KEY) + SEND_KEY("Return", WAIT_FOR_APP_TRANSFROM) + + + return True + +#7, 9, 16, 17. App Download, install and run +def ST07_09_16_17_APP_INSTALL(): + print("- Apps Launching") + #FIXME: Use XPath to find APPS + SEND_KEY("Up", WAIT_AFTER_KEY) + SEND_KEY("Left", WAIT_AFTER_KEY) + SEND_KEY("Left", WAIT_AFTER_KEY) + + print("- Search TVING Application") + if SEND_KEY_WAIT_APP_LAUNCHING("Return", "com.samsung.tv.store", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_LOAD) == False: + RESET_TO_TVPLUS() + return False + SEND_KEY("Up", WAIT_AFTER_KEY) + SEND_KEY("Up", WAIT_AFTER_KEY) + SEND_KEY("Right", WAIT_AFTER_KEY) + SEND_KEY_WAIT_EVENT("Return", "EVENT_WINDOW_IDLE", WAIT_FOR_APP_TRANSFROM) #Wait till view transformed + #FIXME: Input text directly or other way :( + #FIXME: If keypboard already in English mode. it will fail :( + SEND_KEY("Left", WAIT_AFTER_KEY) + SEND_KEY("Down", WAIT_AFTER_KEY) + SEND_KEY("Down", WAIT_AFTER_KEY) + SEND_KEY("Return", WAIT_FOR_APP_TRANSFROM) #Change Lang + SEND_KEY("Left", WAIT_AFTER_KEY) + SEND_KEY("Left", WAIT_AFTER_KEY) + SEND_KEY("Return", WAIT_AFTER_KEY) #t + SEND_KEY("Right", WAIT_AFTER_KEY) + SEND_KEY("Right", WAIT_AFTER_KEY) + SEND_KEY("Right", WAIT_AFTER_KEY) + SEND_KEY("Down", WAIT_AFTER_KEY) + SEND_KEY("Return", WAIT_AFTER_KEY) #v + SEND_KEY("Up", WAIT_AFTER_KEY) + SEND_KEY("Up", WAIT_AFTER_KEY) + SEND_KEY("Right", WAIT_AFTER_KEY) + SEND_KEY("Return", WAIT_AFTER_KEY) #i + SEND_KEY("Up", WAIT_AFTER_KEY) + SEND_KEY("Up", WAIT_AFTER_KEY) + SEND_KEY("Up", WAIT_AFTER_KEY) + SEND_KEY_WAIT_EVENT("Return", "EVENT_WINDOW_IDLE", WAIT_AFTER_KEY) #Select TVING App + #FIXME: TVing isInstalled is not working + print("- Install TVing") + if SEND_KEY_WAIT_APP_LAUNCHING("Return", "com.samsung.tv.notification-app", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_TRANSFROM) == False: + return False + TAKE_SCREENSHOT(ST07_09_16_17_APP_INSTALL.__name__ + '_Install_Notification.png') + if SEND_KEY_WAIT_APP_LAUNCHING("XF86Exit", "com.samsung.tv.store", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_TRANSFROM) == False: + return False + print("- Launch TVing") + if SEND_KEY_WAIT_APP_LAUNCHING("Return", TVING_APP, WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_LOAD) == False: + return False + TAKE_SCREENSHOT(ST07_09_16_17_APP_INSTALL.__name__ + '_TVing_Launch.png') + print("- Delete TVing") + if SEND_KEY_WAIT_APP_LAUNCHING("XF86Exit", "com.samsung.tv.csfs", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_CONTENT_LOAD) == False: + return False + if SEND_KEY_WAIT_APP_LAUNCHING("Return", "com.samsung.tv.store", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_CONTENT_LOAD) == False: + return False + SEND_KEY("XF86Back", WAIT_FOR_APP_TRANSFROM) + SEND_KEY("XF86Back", WAIT_FOR_APP_TRANSFROM) + SEND_KEY("Up", WAIT_AFTER_KEY) + SEND_KEY("Up", WAIT_AFTER_KEY) + SEND_KEY("Right", WAIT_AFTER_KEY) + SEND_KEY("Right", WAIT_AFTER_KEY) + SEND_KEY("Return", WAIT_FOR_APP_TRANSFROM) + SEND_KEY("Down", WAIT_AFTER_KEY) + SEND_KEY("Return", WAIT_FOR_APP_TRANSFROM) + SEND_KEY("Left", WAIT_AFTER_KEY) + SEND_KEY("Return", WAIT_FOR_APP_TRANSFROM) + TAKE_SCREENSHOT(ST07_09_16_17_APP_INSTALL.__name__ + '_TVing_Delete.png') + + #FIXME: Check app is not installed + return True + +def ST10_11_12_CHANNEL_VOLUME_CHANGE(): + #Csfs -> DTV or TV Plus (tv-viewer) + if SEND_KEY_WAIT_APP_LAUNCHING("Return", "org.tizen.tv-viewer", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_TRANSFROM) == False: + return False + + #Volume Changes + SEND_KEY_WAIT_EVENT("XF86AudioRaiseVolume", "EVENT_WINDOW_RAISE", WAIT_AFTER_KEY) + StubSingleton.get_stub().sendKey(ReqKey(type="XF86", actionType="REPEAT", XF86keyCode="XF86AudioRaiseVolume", durationMs=2000, intervalMs=500)) + TAKE_SCREENSHOT(ST10_11_12_CHANNEL_VOLUME_CHANGE.__name__ + '_Volume_Up.png') + + SEND_KEY_WAIT_EVENT("XF86AudioLowerVolume", "EVENT_WINDOW_RAISE", WAIT_AFTER_KEY) + StubSingleton.get_stub().sendKey(ReqKey(type="XF86", actionType="REPEAT", XF86keyCode="XF86AudioLowerVolume", durationMs=2000, intervalMs=500)) + TAKE_SCREENSHOT(ST10_11_12_CHANNEL_VOLUME_CHANGE.__name__ + '_Volume_Down.png') + + if SEND_KEY_WAIT_APP_LAUNCHING("XF86Home", "com.samsung.tv.csfs", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_TRANSFROM) == False: + return False + + #Csfs -> DTV or TV Plus (tv-viewer) + if SEND_KEY_WAIT_APP_LAUNCHING("Return", "org.tizen.tv-viewer", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_TRANSFROM) == False: + return False + + #Channel Changes + SEND_KEY_WAIT_EVENT("XF86RaiseChannel", "EVENT_WINDOW_RAISE", WAIT_AFTER_KEY) + StubSingleton.get_stub().sendKey(ReqKey(type="XF86", actionType="REPEAT", XF86keyCode="XF86RaiseChannel", durationMs=2000, intervalMs=500)) + TAKE_SCREENSHOT(ST10_11_12_CHANNEL_VOLUME_CHANGE.__name__ + '_Channel_Up.png') + + SEND_KEY_WAIT_EVENT("XF86LowerChannel", "EVENT_WINDOW_RAISE", WAIT_AFTER_KEY) + StubSingleton.get_stub().sendKey(ReqKey(type="XF86", actionType="REPEAT", XF86keyCode="XF86LowerChannel", durationMs=2000, intervalMs=500)) + TAKE_SCREENSHOT(ST10_11_12_CHANNEL_VOLUME_CHANGE.__name__ + '_Channel_Down.png') + + return True + +def ST13_BROWSER(): + CHECK_APP_INSTALLED() + print("- Launch browser") + SEND_KEY("Up", WAIT_AFTER_KEY) + SEND_KEY("Right", WAIT_AFTER_KEY) + SEND_KEY("Right", WAIT_AFTER_KEY) + SEND_KEY("Right", WAIT_AFTER_KEY) + SEND_KEY("Right", WAIT_AFTER_KEY) + SEND_KEY("Right", WAIT_AFTER_KEY) + SEND_KEY("Right", WAIT_AFTER_KEY) + if SEND_KEY_WAIT_APP_LAUNCHING("Return", "org.tizen.browser", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_LOAD) == False: + RESET_TO_TVPLUS() + return False + TAKE_SCREENSHOT(ST13_BROWSER.__name__ + '_Launched.png') + + print("- TV On/OFF Test in Browser") + SEND_KEY("XF86PowerOff", WAIT_AFTER_KEY) + time.sleep(10) + SEND_KEY("XF86PowerOff", WAIT_AFTER_KEY) + if SEND_KEY_WAIT_APP_LAUNCHING("", "org.tizen.browser", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_LOAD): + return False + CHECK_NOTI_POPUP() + TAKE_SCREENSHOT(ST13_BROWSER.__name__ + '_After_Turn_Off.png') + + RESET_TO_TVPLUS() + + return True + +def ST14_15_YOUTUBE(): + CHECK_APP_INSTALLED() + print("- Launch youtube") + SEND_KEY("Up", WAIT_AFTER_KEY) + SEND_KEY("Right", WAIT_AFTER_KEY) + SEND_KEY("Right", WAIT_AFTER_KEY) + SEND_KEY("Right", WAIT_AFTER_KEY) + if SEND_KEY_WAIT_APP_LAUNCHING("Return", "com.samsung.tv.cobalt-yt", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_LOAD) == False: + RESET_TO_TVPLUS() + return False + TAKE_SCREENSHOT(ST14_15_YOUTUBE.__name__ + '_Launched.png') + + print("- TV On/OFF Test in Youtube") + SEND_KEY("XF86PowerOff", WAIT_AFTER_KEY) + time.sleep(10) + SEND_KEY("XF86PowerOff", WAIT_AFTER_KEY) + if SEND_KEY_WAIT_APP_LAUNCHING("", "com.samsung.tv.cobalt-yt", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_LOAD): + return False + CHECK_NOTI_POPUP() + TAKE_SCREENSHOT(ST14_15_YOUTUBE.__name__ + '_After_Turn_Off.png') + + RESET_TO_TVPLUS() + + return True + +def ST18_MULTITASKING(): + print("- Launch youtube") + SEND_KEY("Up", WAIT_AFTER_KEY) + SEND_KEY("Right", WAIT_AFTER_KEY) + SEND_KEY("Right", WAIT_AFTER_KEY) + SEND_KEY("Right", WAIT_AFTER_KEY) + if SEND_KEY_WAIT_APP_LAUNCHING("Return", "com.samsung.tv.cobalt-yt", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_LOAD) == False: + RESET_TO_TVPLUS() + return False + TAKE_SCREENSHOT(ST18_MULTITASKING.__name__ + '_Youtube_Launched.png') + SEND_KEY("Return", WAIT_AFTER_KEY) + time.sleep(10) #Play video + + print("- Launch csfs") + if SEND_KEY_WAIT_APP_LAUNCHING("XF86Home", "com.samsung.tv.csfs", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_TRANSFROM) == False: + return False + TAKE_SCREENSHOT(ST18_MULTITASKING.__name__ + '_csfs_Launched.png') + + print("- Launch browser") + SEND_KEY("Up", WAIT_AFTER_KEY) + SEND_KEY("Right", WAIT_AFTER_KEY) + SEND_KEY("Right", WAIT_AFTER_KEY) + SEND_KEY("Right", WAIT_AFTER_KEY) + SEND_KEY("Right", WAIT_AFTER_KEY) + SEND_KEY("Right", WAIT_AFTER_KEY) + SEND_KEY("Right", WAIT_AFTER_KEY) + if SEND_KEY_WAIT_APP_LAUNCHING("Return", "org.tizen.browser", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_LOAD) == False: + for i in range(6): + SEND_KEY("Left", WAIT_AFTER_KEY) + SEND_KEY("Return", WAIT_FOR_APP_TRANSFROM) + return False + TAKE_SCREENSHOT(ST18_MULTITASKING.__name__ + '_browser_Launched.png') + RESET_TO_TVPLUS() + + return True + +def ST19_20_NETFLIX(): + CHECK_APP_INSTALLED() + print("- Launch netflix") + SEND_KEY("Up", WAIT_AFTER_KEY) + SEND_KEY("Right", WAIT_AFTER_KEY) + #nexflix + if SEND_KEY_WAIT_APP_LAUNCHING("Return", "org.tizen.netflix-app", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_LOAD) == False: + RESET_TO_TVPLUS() + return False + TAKE_SCREENSHOT(ST19_20_NETFLIX.__name__ + '_Netflix_Launched.png') + + print("- TV On/OFF Test in Netflix") + SEND_KEY("XF86PowerOff", WAIT_AFTER_KEY) + time.sleep(10) + SEND_KEY("XF86PowerOff", WAIT_AFTER_KEY) + if SEND_KEY_WAIT_APP_LAUNCHING("", "org.tizen.netflix-app", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_LOAD): + return False + CHECK_NOTI_POPUP() + TAKE_SCREENSHOT(ST19_20_NETFLIX.__name__ + '_After_Turn_Off.png') + + RESET_TO_TVPLUS() + + return True + +def ST21_22_AMBIENT(): + print("- Run Ambient") + SEND_KEY("Left", WAIT_AFTER_KEY) + SEND_KEY("Up", WAIT_AFTER_KEY) + SEND_KEY("Up", WAIT_AFTER_KEY) + SEND_KEY_WAIT_EVENT("Return", "EVENT_WINDOW_IDLE", WAIT_AFTER_KEY) + TAKE_SCREENSHOT(ST21_22_AMBIENT.__name__ + '_Ambient_Start.png') + + print("- Launch Art-app") + SEND_KEY("Right", WAIT_AFTER_KEY) + SEND_KEY("Down", WAIT_AFTER_KEY) + SEND_KEY("Down", WAIT_AFTER_KEY) + if SEND_KEY_WAIT_APP_LAUNCHING("Return", "org.tizen.art-app", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_LAUNCH) == False: + return False + TAKE_SCREENSHOT(ST21_22_AMBIENT.__name__ + '_Artapp_Launched.png') + + #FIXME: We need to test ST_22 but embient key is not exist. + #Back to csfs home view + SEND_KEY("XF86Exit", WAIT_FOR_APP_LOAD) + SEND_KEY("Left", WAIT_AFTER_KEY) + SEND_KEY("Down", WAIT_AFTER_KEY) + SEND_KEY("Down", WAIT_AFTER_KEY) + SEND_KEY_WAIT_EVENT("Return", "EVENT_WINDOW_IDLE", WAIT_AFTER_KEY) + + return True + +def ST23_MULTIVIEW(): + SEND_KEY("Left", WAIT_AFTER_KEY) + SEND_KEY("Down", WAIT_AFTER_KEY) + SEND_KEY("Down", WAIT_AFTER_KEY) + SEND_KEY("Right", WAIT_AFTER_KEY) + SEND_KEY("Return", WAIT_FOR_APP_TRANSFROM) + SEND_KEY("Right", WAIT_AFTER_KEY) + if SEND_KEY_WAIT_APP_LAUNCHING("Return", "com.samsung.tv.multiscreen", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_LOAD) == False: + return False + TAKE_SCREENSHOT(ST23_MULTIVIEW.__name__ + '_Multiview_Launched.png') + + RESET_TO_TVPLUS() + + return True + +def ST24_ROTATION(): + print("- Device rotation to 90, 180, 270, 0") + degrees = [90, 180, 270, 0] + + for degree in degrees: + DEVICE_ROTATION(degree) + time.sleep(WAIT_FOR_APP_TRANSFROM) + TAKE_SCREENSHOT(ST24_ROTATION.__name__ + '_' + str(degree) + '.png') + + return True + +def ST25_SEARCH(): + SEND_KEY("Left", WAIT_AFTER_KEY) + SEND_KEY("Up", WAIT_AFTER_KEY) + SEND_KEY("Up", WAIT_AFTER_KEY) + SEND_KEY("Up", WAIT_AFTER_KEY) + if SEND_KEY_WAIT_APP_LAUNCHING("Return", "com.samsung.tv.searchall", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_LOAD) == False: + return False + TAKE_SCREENSHOT(ST25_SEARCH.__name__ + '_Searchall_Launched.png') + SEND_KEY("Up", WAIT_AFTER_KEY) + SEND_KEY("Return", WAIT_FOR_APP_TRANSFROM) + SEND_KEY("Return", WAIT_FOR_APP_TRANSFROM) #a + SEND_KEY("Right", WAIT_AFTER_KEY) + SEND_KEY("Return", WAIT_FOR_APP_CONTENT_LOAD) #b + TAKE_SCREENSHOT(ST25_SEARCH.__name__ + '_Searchall_Searching.png') + + #Return to Korean Keyboard + SEND_KEY("Left", WAIT_AFTER_KEY) + SEND_KEY("Left", WAIT_AFTER_KEY) + SEND_KEY("Down", WAIT_AFTER_KEY) + SEND_KEY("Down", WAIT_AFTER_KEY) + SEND_KEY("Return", WAIT_FOR_APP_TRANSFROM) + + return True + +def ST26_CSFS(): + print("- CSFS test") + SEND_KEY("Up", WAIT_AFTER_KEY) + StubSingleton.get_stub().sendKey(ReqKey(type="XF86", actionType="REPEAT", XF86keyCode="Right", durationMs=5000, intervalMs=50)) # long press key + TAKE_SCREENSHOT(ST26_CSFS.__name__ + '_LongPress_Move.png') + + SEND_KEY("Down", WAIT_AFTER_KEY) + SEND_KEY("Down", WAIT_AFTER_KEY) + SEND_KEY("Down", WAIT_AFTER_KEY) + TAKE_SCREENSHOT(ST26_CSFS.__name__ + '_Thumbnail_Move.png') + + SEND_KEY("Left", WAIT_AFTER_KEY) + SEND_KEY("Down", WAIT_AFTER_KEY) + SEND_KEY("Down", WAIT_AFTER_KEY) + StubSingleton.get_stub().sendKey(ReqKey(type="XF86", actionType="REPEAT", XF86keyCode="Right", durationMs=5000, intervalMs=50)) # long press key + TAKE_SCREENSHOT(ST26_CSFS.__name__ + '_Setting_Move.png') + + return True + +def PRE_TEST(): + CHECK_NOTI_POPUP() + HOME() + +def POST_TEST(): + HOME() + +def runTest(testFunc): + global SUCCESS + global FAIL + global TEST_RESULT + print("Test Start : ", testFunc) + PRE_TEST() + ret = testFunc() + POST_TEST() + print("Test Finish Result = " + str(ret) + "\n") + if ret: + SUCCESS += 1 + else: + FAIL += 1 + + TEST_RESULT += [ + { + 'test_name' : str(testFunc).split(' ')[1], + 'test_result': str(ret) + } + ] + +def run(): + startTime = time.time() + + INIT_VD_SMOKE_TEST() + + #Start TV Smoke Test + if CHECK_USB_PLUGGED(): + runTest(ST08_MY_CONTENT) + runTest(ST10_11_12_CHANNEL_VOLUME_CHANGE) + runTest(ST26_CSFS) + runTest(ST24_ROTATION) + runTest(ST13_BROWSER) + runTest(ST19_20_NETFLIX) + runTest(ST14_15_YOUTUBE) + runTest(ST18_MULTITASKING) + runTest(ST23_MULTIVIEW) + runTest(ST21_22_AMBIENT) + runTest(ST04_MENU_CONTROL) + runTest(ST07_09_16_17_APP_INSTALL) + runTest(ST25_SEARCH) + + CREATE_HTML_FILE() + + print("--- Total Cases : {} [ Success : {} Fail : {} ] ---\n".format(SUCCESS+FAIL, SUCCESS, FAIL)) + print("--- Test takes " + f"{time.time() - startTime: .3f} sec ---\n") + + print("--- Exist CS file list ---") + CHECK_CRASH_REPORT() + +if __name__ == '__main__': + run() diff --git a/docs/script/tvSetup.py b/docs/script/tvSetup.py new file mode 100644 index 0000000..8df3cbe --- /dev/null +++ b/docs/script/tvSetup.py @@ -0,0 +1,15 @@ +import os +import subprocess +import re +import sys +import time + +def run_command(command): + stream = os.popen(command) + output = stream.read() + +# Start scrip here +run_command("sdb forward tcp:50051 tcp:50051") +run_command("sdb shell app_launcher -s org.tizen.aurum-bootstrap") +# Wait 1 sec till bootstrap launched +time.sleep(1) diff --git a/docs/script/utils.py b/docs/script/utils.py new file mode 100644 index 0000000..539cf78 --- /dev/null +++ b/docs/script/utils.py @@ -0,0 +1,365 @@ +from __future__ import print_function +import os +import subprocess +import re +import sys +import time +import datetime +from aurum_pb2 import * +from aurum_pb2_grpc import BootstrapStub +import grpc +import numpy as np +import cv2 +from PIL import Image + +#Defined values +WAIT_AFTER_KEY = 1 +WAIT_FOR_APP_TRANSFROM = 3 +WAIT_FOR_APP_CONTENT_LOAD = 5 +WAIT_FOR_APP_LOAD = 10 +WAIT_FOR_APP_LAUNCH = 30 +WAIT_FOR_CONTENT_DOWNLOAD = 40 +TIMEOUT_MS = 5000 +LOGIN = 0 +TVING_APP = "HLoFAbhj6Q.TVING" +SUCCESS = 0 +FAIL = 0 + +global DEVICE_INFO +global FOLDER_NAME +TEST_RESULT = [] + +#Class for Stub singleton +class StubSingleton: + _instance = None + + @classmethod + def get_stub(cls): + if cls._instance is None: + cls._instance = BootstrapStub(grpc.insecure_channel('127.0.0.1:50051', options=[ ('grpc.max_send_message_length', 1920*1080*4+5), ('grpc.max_receive_message_length', 1920*1080*4+5)])) + return cls._instance + +#Check given applicaiton running state +def CHECK_APP_RUNNING(app): + return StubSingleton.get_stub().getAppInfo(ReqGetAppInfo(packageName=app)).isFocused + +#Please given message and back to home +def IS_APP_LAUNCHING_FAIL(app): + if CHECK_APP_RUNNING(app) == False: + print(app +" launching fail Back to home") + SEND_KEY_WAIT_EVENT("XF86Home", "EVENT_WINDOW_ACTIVATE", WAIT_FOR_APP_TRANSFROM) + return False + return True + +#Send key and wait event untill waitSec then sleep for delay time +def SEND_KEY_WAIT_APP_LAUNCHING(key, app, waitSec, delay): + launch_request = time.time() + SEND_KEY(key, WAIT_AFTER_KEY) + while 1: + time.sleep(0.1) + if CHECK_APP_RUNNING(app) == True: + time.sleep(delay) + print(app + " Launched") + break + if time.time() - launch_request > waitSec: + print(app + " Launch Fail") + return False + +#Take screenshot with given file name +def TAKE_SCREENSHOT(name): + global FOLDER_NAME + responses = StubSingleton.get_stub().takeScreenshot(ReqTakeScreenshot(getPixels=True)) + for response in responses: + buf = np.frombuffer(response.image, dtype=np.uint8).reshape(1080,1920,4) + image = cv2.cvtColor(buf, cv2.COLOR_RGBA2RGB) + save_location = f"{FOLDER_NAME}/{name}" + cv2.imwrite(save_location, image) + #with open(name, 'wb') as fout: + # cv2.imwrite(name, image) + +#Run command in device shell +def RUN_COMMAND(command): + stream = os.popen(command) + output = stream.read() + return output + +#Login samsung account +def SAMSUNG_ACCOUNT_LOGIN(): + global LOGIN + if LOGIN: + print("Already setup samsung account\n") + else: + RUN_COMMAND("sdb shell ssoscmd -c 4 -d iottest0909@gmail.com@SSOSVCAPI@1q2w3e") + print("Samsung account login\n") + LOGIN = 1 + time.sleep(10) + +#Device Rotation with given degree +def DEVICE_ROTATION(degree): + RUN_COMMAND("sdb shell winfo -rotation set " + str(degree)) + +#Send given key event and wait given specific event till @TIMEOUT_MS then wait some time +""" + EVENT_WINDOW_ACTIVATE + EVENT_WINDOW_DEACTIVATE + EVENT_WINDOW_MINIMIZE + EVENT_WINDOW_RAISE + EVENT_WINDOW_IDLE + EVENT_STATE_CHANGED_FOCUSED +""" +def SEND_KEY_WAIT_EVENT(key, event, delay): + StubSingleton.get_stub().actionAndWaitEvent(ReqActionAndWaitEvent(type="KEY", XF86keyCode=key, eventType=event, timeoutMs=TIMEOUT_MS)) + time.sleep(delay) + +#Send key event and wait some time +def SEND_KEY(key, delay): + StubSingleton.get_stub().sendKey(ReqKey(type="XF86", actionType="STROKE", XF86keyCode=key)) + time.sleep(delay) + +#Back to home +def HOME(): + SEND_KEY_WAIT_EVENT("XF86Home", "EVENT_WINDOW_ACTIVATE", WAIT_FOR_APP_TRANSFROM) + +#Check notification popup activated or not it also can test "7 Global Notification Test" +def CHECK_NOTI_POPUP(): + if StubSingleton.get_stub().getAppInfo(ReqGetAppInfo(packageName='com.samsung.tv.notification-app')).isRunning: + TAKE_SCREENSHOT('ST7_NOTI_POPUP.png') + print("#7. Global Notification") + SEND_KEY_WAIT_EVENT("Return", "EVENT_WINDOW_DEACTIVATE") + time.sleep(WAIT_FOR_APP_TRANSFROM) + +#Check sdb connected or not +def CHECK_SDB(): + stream = os.popen("command -v sdb") + output = stream.read() + if len(output) > 0: + return True + else: + print("Error - Can't run sdb") + return False + +#Reset to TVPlus +def RESET_TO_TVPLUS(): + print("Reset to TVPlus") + if SEND_KEY_WAIT_APP_LAUNCHING("XF86Home", "com.samsung.tv.csfs", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_LOAD) == False: + return False + SEND_KEY("Up", WAIT_AFTER_KEY) + if SEND_KEY_WAIT_APP_LAUNCHING("Return", "org.tizen.tv-viewer", WAIT_FOR_APP_LAUNCH, WAIT_FOR_APP_TRANSFROM) == False: + return False + +#Print testing device env +def GET_DEVICE_INFO(): + global DEVICE_INFO + print("--- Test Device Info ---") + stream = os.popen("sdb shell cat /etc/info.ini") + output = stream.read() + DEVICE_INFO = output + print(DEVICE_INFO) + +#Check aurum ready or not +def CHECK_AURUM_READY(): + stream = os.popen("sdb shell 'ps -e | grep aurum-bootstrap'") + output = stream.read() + if len(output) > 0: + return True + else: + print("Error - aurum-bootstrap not launched on target") + print("Try to launch aurum-bootstrap") + stream = os.popen("sdb shell app_launcher -s org.tizen.aurum-bootstrap") + output = stream.read() + time.sleep(1) + if len(output) > 0: + print("Success to launch aurum-bootstrap") + return True + + print("Error - Can't launch aurum-bootstrap") + return False + +#Create folder to save imgs +def CREATE_FOLDER_TO_SAVE_CAPTURES(): + now = datetime.datetime.now() + global FOLDER_NAME + FOLDER_NAME = now.strftime("VD_ST_%Y-%m-%d_%H-%M-%S") + os.mkdir(FOLDER_NAME) + +def CHECK_APP_INSTALLED(): + print("--- Check needed app installed") + + while True: + netflix = StubSingleton.get_stub().getAppInfo(ReqGetAppInfo(packageName='org.tizen.netflix-app')).isInstalled + youtube = StubSingleton.get_stub().getAppInfo(ReqGetAppInfo(packageName='com.samsung.tv.cobalt')).isInstalled + browser = StubSingleton.get_stub().getAppInfo(ReqGetAppInfo(packageName='org.tizen.browser')).isInstalled + if netflix and youtube and browser: + break + print("Waiting app installed [ netflix: {} , youtube: {} , browser: {} ] ".format(netflix, youtube, browser)) + time.sleep(5) + + HOME() + +def CHECK_CRASH_REPORT(): + print(RUN_COMMAND("sdb shell ls /opt/share/crash/report")) + +def CHECK_ELM_ATSPI_MODE(): + output = RUN_COMMAND("sdb shell cat /etc/profile.d/efl.sh") + target_string = "ELM_ATSPI_MODE" + + if target_string in output: + return True + else: + print("Error - Need to add 'ELM_ATSPI_MODE=1' in /etc/profile.d/efl.sh then reboot please. ") + return False + +def CHECK_USB_PLUGGED(): + output = RUN_COMMAND("sdb shell lsblk") + target_string = "USB" + + if target_string in output: + return True + else: + print("NOTICE - USB is not Plugged. Test can generated except ST08_MY_CONTENT\n") + return False + +def FIND_IMAGE_WITH_PREFIX(folder_name, prefix): + image_files = [] + + for file_name in os.listdir(folder_name): + file_path = os.path.join(folder_name, file_name) + + if file_name.startswith(prefix): + image_files.append(file_path) + + image_files.sort() + return image_files + +def FILTER_ITEMS_WITH_STRING(arr, search_string): + filtered_arr = [item for item in arr if search_string in item] + return filtered_arr + +def CREATE_HTML_FILE(): + sorted_result = sorted(TEST_RESULT, key=lambda x: x['test_name']) + expected_imgs = GET_EXPECTED_IMAGE_LIST() + + html_content = f''' + + + + Test Results +
Test device info :
{DEVICE_INFO}
+ + + +

Test Results

+ + + + + + + + ''' + + for test in sorted_result: + test_name = test['test_name'] + test_result = test['test_result'] + test_expected_imgs = FILTER_ITEMS_WITH_STRING(expected_imgs, test_name) + test_images = FIND_IMAGE_WITH_PREFIX(FOLDER_NAME, test_name) + + html_content += f''' + + + + ''' + + for idx in range(len(test_expected_imgs)): + if idx != 0: + html_content += f''' + + ''' + + html_content += f''' + + ''' + + if idx < len(test_images): + html_content += f''' + + ''' + + html_content += f''' + + ''' + + html_content += ''' +
Test NameTest ResultExpected Image - Tizen 7.0 230516Test Image
{test_name}{test_result}
{test_name} Image{test_name} Image
+ + + ''' + + result = f"{FOLDER_NAME}_Test_Result.html" + with open(result, 'w') as file: + file.write(html_content) + +def GET_EXPECTED_IMAGE_LIST(): + img_list = [ + 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST04_MENU_CONTROL_Broadcasting_Info.png', + 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST04_MENU_CONTROL_Channel_Info.png', + 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST04_MENU_CONTROL_Menu.png', + 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST07_09_16_17_APP_INSTALL_Install_Notification.png', + 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST07_09_16_17_APP_INSTALL_TVing_Delete.png', + 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST07_09_16_17_APP_INSTALL_TVing_Launch.png', + 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST08_MY_CONTENT_Launched.png', + 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST08_MY_CONTENT_Music_Play.png', + 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST08_MY_CONTENT_Photo_Player.png', + 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST08_MY_CONTENT_Video_Player.png', + 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST10_11_12_CHANNEL_VOLUME_CHANGE_Channel_Down.png', + 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST10_11_12_CHANNEL_VOLUME_CHANGE_Channel_Up.png', + 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST10_11_12_CHANNEL_VOLUME_CHANGE_Volume_Down.png', + 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST10_11_12_CHANNEL_VOLUME_CHANGE_Volume_Up.png', + 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST13_BROWSER_After_Turn_Off.png', + 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST13_BROWSER_Launched.png', + 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST14_15_YOUTUBE_After_Turn_Off.png', + 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST14_15_YOUTUBE_Launched.png', + 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST18_MULTITASKING_Youtube_Launched.png', + 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST18_MULTITASKING_browser_Launched.png', + 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST18_MULTITASKING_csfs_Launched.png', + 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST19_20_NETFLIX_After_Turn_Off.png', + 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST19_20_NETFLIX_Netflix_Launched.png', + 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST21_22_AMBIENT_Ambient_Start.png', + 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST21_22_AMBIENT_Artapp_Launched.png', + 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST23_MULTIVIEW_Multiview_Launched.png', + 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST24_ROTATION_0.png', + 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST24_ROTATION_180.png', + 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST24_ROTATION_270.png', + 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST24_ROTATION_90.png', + 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST25_SEARCH_Searchall_Launched.png', + 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST25_SEARCH_Searchall_Searching.png', + 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST26_CSFS_LongPress_Move.png', + 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST26_CSFS_Setting_Move.png', + 'https://pages.github.sec.samsung.net/NUI/AurumTestScript/ReleaseTest/VDSmokeTest/Expected_Images/ST26_CSFS_Thumbnail_Move.png' + ] + + return img_list + +#Configure Smoke Test +def INIT_VD_SMOKE_TEST(): + # Command Timeout Setting + StubSingleton.get_stub().setTimeout(ReqSetTimeout(timeout = TIMEOUT_MS)) + if not CHECK_ELM_ATSPI_MODE(): + sys.exit() + if not CHECK_SDB(): + sys.exit() + if not CHECK_AURUM_READY(): + sys.exit() + GET_DEVICE_INFO() + SAMSUNG_ACCOUNT_LOGIN() + CREATE_FOLDER_TO_SAVE_CAPTURES()