diff --git "a/\351\242\204\345\256\232\347\263\273\347\273\237/\346\265\213\350\257\225\346\225\260\346\215\256/\344\274\232\350\256\256\351\242\204\345\256\232\346\265\213\350\257\225\347\224\250\344\276\213.xlsx" "b/\351\242\204\345\256\232\347\263\273\347\273\237/\346\265\213\350\257\225\346\225\260\346\215\256/\344\274\232\350\256\256\351\242\204\345\256\232\346\265\213\350\257\225\347\224\250\344\276\213.xlsx" index 92a79b141750e5b54ddd0289223ce41bf75598f4..3c64db68b35abeb250f393c04763f1b67ad38c24 100644 Binary files "a/\351\242\204\345\256\232\347\263\273\347\273\237/\346\265\213\350\257\225\346\225\260\346\215\256/\344\274\232\350\256\256\351\242\204\345\256\232\346\265\213\350\257\225\347\224\250\344\276\213.xlsx" and "b/\351\242\204\345\256\232\347\263\273\347\273\237/\346\265\213\350\257\225\346\225\260\346\215\256/\344\274\232\350\256\256\351\242\204\345\256\232\346\265\213\350\257\225\347\224\250\344\276\213.xlsx" differ diff --git "a/\351\242\204\345\256\232\347\263\273\347\273\237/\346\265\213\350\257\225\346\225\260\346\215\256/\351\225\277\345\256\211\345\244\247\345\255\246\346\265\213\350\257\225\347\224\250\344\276\213.xlsx" "b/\351\242\204\345\256\232\347\263\273\347\273\237/\346\265\213\350\257\225\346\225\260\346\215\256/\351\225\277\345\256\211\345\244\247\345\255\246\346\265\213\350\257\225\347\224\250\344\276\213.xlsx" index 64dc4f7dace65ba708053ed33a6296189571dfe0..9e8368a4fd34b5ed33564436c0649a3a79497aec 100644 Binary files "a/\351\242\204\345\256\232\347\263\273\347\273\237/\346\265\213\350\257\225\346\225\260\346\215\256/\351\225\277\345\256\211\345\244\247\345\255\246\346\265\213\350\257\225\347\224\250\344\276\213.xlsx" and "b/\351\242\204\345\256\232\347\263\273\347\273\237/\346\265\213\350\257\225\346\225\260\346\215\256/\351\225\277\345\256\211\345\244\247\345\255\246\346\265\213\350\257\225\347\224\250\344\276\213.xlsx" differ diff --git "a/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/Base/__pycache__/app_base.cpython-310.pyc" "b/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/Base/__pycache__/app_base.cpython-310.pyc" index c82d57050f1f98c1a214f897f0bcec79a2e3f0c6..4b0298f3725b32f41a21e6b7057043a0c20e890f 100644 Binary files "a/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/Base/__pycache__/app_base.cpython-310.pyc" and "b/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/Base/__pycache__/app_base.cpython-310.pyc" differ diff --git "a/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/Base/app_base.py" "b/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/Base/app_base.py" index f9b711b142296b428001f13b89073d969d54e443..14738c0c043e4775399a1c62d60351ec538a783d 100644 --- "a/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/Base/app_base.py" +++ "b/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/Base/app_base.py" @@ -907,4 +907,129 @@ def click_with_retry(element, max_retries=3, retry_delay=5): logging.warning(f"ç‚¹å‡»å…ƒç´ å¤±è´¥ï¼Œé‡è¯•ä¸... ({e})") sleep(retry_delay) # 如果所有é‡è¯•都失败,抛出异常 - raise Exception(f"多次å°è¯•ç‚¹å‡»å…ƒç´ å¤±è´¥: {element}") \ No newline at end of file + raise Exception(f"多次å°è¯•ç‚¹å‡»å…ƒç´ å¤±è´¥: {element}") + +# 枚举类型转æ¢å‡½æ•° +def app_get_by_enum(type_str): + """ + å°†å—符串类型的定ä½å™¨ç±»åž‹è½¬æ¢ä¸º selenium.webdriver.common.AppiumBy.By 枚举类型。 + + 傿•°: + type_str (str): 定ä½å™¨ç±»åž‹å—符串,例如 'XPATH'。 + + 返回: + selenium.webdriver.common.by.By: 对应的 By 枚举类型。 + """ + # 将输入的定ä½å™¨ç±»åž‹å—符串转æ¢ä¸ºå¤§å†™ï¼Œä»¥åŒ¹é… By 枚举类型的命å + type_str = type_str.upper() + + # æ ¹æ®è¾“入的å—符串类型返回对应的 By 枚举类型 + if type_str == 'XPATH': + return AppiumBy.XPATH + elif type_str == 'ID': + return AppiumBy.ID + else: + # 如果输入的定ä½å™¨ç±»åž‹å—符串ä¸åŒ¹é…任何已知的 By 枚举类型,抛出 ValueError 异常 + raise ValueError(f"未知的定ä½å™¨ç±»åž‹: {type_str}") + +# app输入框事件函数 +def input_text_with_retry(app_driver, by, value, text, max_retries=3, retry_delay=5): + """ + 使用é‡è¯•机制在指定的输入框ä¸è¾“入文本。 + + 在WebDriver(app_driver)ä¸é€šè¿‡ç»™å®šçš„æŸ¥æ‰¾æ–¹å¼ï¼ˆby)和值(valueï¼‰æ¥æŸ¥æ‰¾é¡µé¢ä¸Šçš„输入框。 + 如果在指定的最大é‡è¯•次数(max_retries)内ä»ç„¶æ‰¾ä¸åˆ°å…ƒç´ ,则抛出异常。 + æ¯æ¬¡é‡è¯•之间会有指定的延迟时间(retry_delay)。 + + 傿•°: + - app_driver: WebDriver实例,用于执行查找和输入æ“作。 + - by: æŸ¥æ‰¾å…ƒç´ çš„æ–¹å¼ï¼Œå¦‚XPathã€IDç‰ã€‚ + - value: å…ƒç´ çš„å€¼ï¼Œæ ¹æ®'by'傿•°æŒ‡å®šçš„æŸ¥æ‰¾æ–¹å¼å¯¹åº”的具体值。 + - text: è¦è¾“入到输入框ä¸çš„æ–‡æœ¬ã€‚ + - max_retries: 最大é‡è¯•次数,默认为3次。 + - retry_delay: æ¯æ¬¡é‡è¯•之间的延迟时间,默认为5秒。 + + 异常: + - 如果超过最大é‡è¯•æ¬¡æ•°ä»æœªæ‰¾åˆ°å…ƒç´ ,则抛出异常。 + """ + for _ in range(max_retries): + try: + # å°è¯•查找输入框并输入文本 + element = app_driver.find_element(by, value) + element.send_keys(text) + return # æˆåŠŸè¾“å…¥åŽé€€å‡ºå‡½æ•° + except Exception as e: + # 如果æ“作失败,记录日志并ç‰å¾…一段时间åŽé‡è¯• + logging.warning(f"输入文本失败,é‡è¯•ä¸... ({e})") + sleep(retry_delay) + # 如果达到最大é‡è¯•æ¬¡æ•°ä»æœªæˆåŠŸï¼Œåˆ™æŠ›å‡ºå¼‚å¸¸ + raise Exception(f"多次å°è¯•输入文本失败: {by}={value}") + +# app点击事件函数 +def click_element_with_retry(app_driver, by, value, max_retries=3, retry_delay=5): + """ + 使用é‡è¯•æœºåˆ¶ç‚¹å‡»æŒ‡å®šçš„å…ƒç´ ã€‚ + + 在WebDriver(app_driver)ä¸é€šè¿‡ç»™å®šçš„æŸ¥æ‰¾æ–¹å¼ï¼ˆby)和值(valueï¼‰æ¥æŸ¥æ‰¾é¡µé¢ä¸Šçš„å¯ç‚¹å‡»å…ƒç´ 。 + 如果在指定的最大é‡è¯•次数(max_retries)内ä»ç„¶æ‰¾ä¸åˆ°å…ƒç´ 或点击失败,则抛出异常。 + æ¯æ¬¡é‡è¯•之间会有指定的延迟时间(retry_delay)。 + + 傿•°: + - app_driver: WebDriver实例,用于执行查找和点击æ“作。 + - by: æŸ¥æ‰¾å…ƒç´ çš„æ–¹å¼ï¼Œå¦‚XPathã€IDç‰ã€‚ + - value: å…ƒç´ çš„å€¼ï¼Œæ ¹æ®'by'傿•°æŒ‡å®šçš„æŸ¥æ‰¾æ–¹å¼å¯¹åº”的具体值。 + - max_retries: 最大é‡è¯•次数,默认为3次。 + - retry_delay: æ¯æ¬¡é‡è¯•之间的延迟时间,默认为5秒。 + + 异常: + - 如果超过最大é‡è¯•æ¬¡æ•°ä»æœªæˆåŠŸç‚¹å‡»å…ƒç´ ï¼Œåˆ™æŠ›å‡ºå¼‚å¸¸ã€‚ + """ + for _ in range(max_retries): + try: + # å°è¯•æŸ¥æ‰¾å…ƒç´ å¹¶ç‚¹å‡» + element = app_driver.find_element(by, value) + element.click() + return # æˆåŠŸç‚¹å‡»åŽé€€å‡ºå‡½æ•° + except Exception as e: + # 如果点击失败,记录日志并ç‰å¾…一段时间åŽé‡è¯• + logging.warning(f"ç‚¹å‡»å…ƒç´ å¤±è´¥ï¼Œé‡è¯•ä¸... ({e})") + sleep(retry_delay) + # 如果达到最大é‡è¯•æ¬¡æ•°ä»æœªæˆåŠŸï¼Œåˆ™æŠ›å‡ºå¼‚å¸¸ + raise Exception(f"多次å°è¯•ç‚¹å‡»å…ƒç´ å¤±è´¥: {by}={value}") + +# appèŽ·å–æ–‡æœ¬äº‹ä»¶å‡½æ•° +def get_text_with_retry(app_driver, by, value, max_retries=3, retry_delay=5): + """ + 使用é‡è¯•æœºåˆ¶ä»ŽæŒ‡å®šå…ƒç´ ä¸èŽ·å–æ–‡æœ¬å†…容。 + + 在WebDriver(app_driver)ä¸é€šè¿‡ç»™å®šçš„æŸ¥æ‰¾æ–¹å¼ï¼ˆby)和值(valueï¼‰æ¥æŸ¥æ‰¾é¡µé¢ä¸Šçš„å…ƒç´ ï¼Œ + å¹¶å°è¯•ä»Žä¸æå–æ–‡æœ¬å†…容。如果在指定的最大é‡è¯•次数(max_retries)内ä»ç„¶æ‰¾ä¸åˆ°å…ƒç´ 或获å–失败, + åˆ™æŠ›å‡ºå¼‚å¸¸ã€‚æ¯æ¬¡é‡è¯•之间会有指定的延迟时间(retry_delay)。 + + 傿•°: + - app_driver: WebDriverå®žä¾‹ï¼Œç”¨äºŽæ‰§è¡ŒæŸ¥æ‰¾å’ŒèŽ·å–æ“作。 + - by: æŸ¥æ‰¾å…ƒç´ çš„æ–¹å¼ï¼Œå¦‚XPathã€IDç‰ã€‚ + - value: å…ƒç´ çš„å€¼ï¼Œæ ¹æ®'by'傿•°æŒ‡å®šçš„æŸ¥æ‰¾æ–¹å¼å¯¹åº”的具体值。 + - max_retries: 最大é‡è¯•次数,默认为3次。 + - retry_delay: æ¯æ¬¡é‡è¯•之间的延迟时间,默认为5秒。 + + 返回: + - æˆåŠŸèŽ·å–åˆ°çš„å…ƒç´ æ–‡æœ¬å†…å®¹ã€‚ + + 异常: + - 如果超过最大é‡è¯•æ¬¡æ•°ä»æœªæˆåŠŸèŽ·å–æ–‡æœ¬ï¼Œåˆ™æŠ›å‡ºå¼‚常。 + """ + for _ in range(max_retries): + try: + # å°è¯•æŸ¥æ‰¾å…ƒç´ å¹¶èŽ·å–æ–‡æœ¬ + element = app_driver.find_element(by, value) + text = element.text + if text: # ç¡®ä¿æ–‡æœ¬éžç©º + return text + logging.warning("获å–到空文本,é‡è¯•ä¸...") + sleep(retry_delay) + except Exception as e: + logging.warning(f"èŽ·å–æ–‡æœ¬å¤±è´¥ï¼Œé‡è¯•ä¸... ({e})") + sleep(retry_delay) + # 如果达到最大é‡è¯•æ¬¡æ•°ä»æœªæˆåŠŸï¼Œåˆ™æŠ›å‡ºå¼‚å¸¸ + raise Exception(f"多次å°è¯•获å–å…ƒç´ æ–‡æœ¬å¤±è´¥: {by}={value}") \ No newline at end of file diff --git "a/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/README.md" "b/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/README.md" index fbe1d56e038d56f6985f4268509f092684a7fc7c..58eea5f4bd06600d18331fe2762041539b6e7cea 100644 --- "a/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/README.md" +++ "b/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/README.md" @@ -1,2 +1,5 @@ 1. 2025-04-14 - - 补充预定é…套件的项目目录,并补充公用方法类,以åŠè°ƒè¯•é—¨å£å±çš„功能。 \ No newline at end of file + - 补充预定é…套件的项目目录,并补充公用方法类,以åŠè°ƒè¯•é—¨å£å±çš„功能。 +2. 2025-05-06 + - 补充app_baseä¸app_get_by_enumã€input_text_with_retryã€click_element_with_retryã€get_text_with_retry函数用以自动化测试调用。 + - å¢žåŠ é—¨å£å±é¦–次安装部署的自动化测试æµç¨‹åŠJSONæ•°æ®ã€‚ \ No newline at end of file diff --git "a/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\344\270\255\346\216\247\351\227\250\345\217\243\345\261\217/cases/01\351\227\250\345\217\243\345\261\217\351\246\226\346\254\241\345\256\211\350\243\205\351\203\250\347\275\262/__pycache__/__st__.cpython-310.pyc" "b/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\344\270\255\346\216\247\351\227\250\345\217\243\345\261\217/cases/01\351\227\250\345\217\243\345\261\217\351\246\226\346\254\241\345\256\211\350\243\205\351\203\250\347\275\262/__pycache__/__st__.cpython-310.pyc" new file mode 100644 index 0000000000000000000000000000000000000000..824b67e2499df7e5a4b7ae156fac549652de8405 Binary files /dev/null and "b/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\344\270\255\346\216\247\351\227\250\345\217\243\345\261\217/cases/01\351\227\250\345\217\243\345\261\217\351\246\226\346\254\241\345\256\211\350\243\205\351\203\250\347\275\262/__pycache__/__st__.cpython-310.pyc" differ diff --git "a/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\344\270\255\346\216\247\351\227\250\345\217\243\345\261\217/cases/01\351\227\250\345\217\243\345\261\217\351\246\226\346\254\241\345\256\211\350\243\205\351\203\250\347\275\262/__pycache__/\345\256\211\350\243\205\351\203\250\347\275\262\346\265\201\347\250\213.cpython-310.pyc" "b/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\344\270\255\346\216\247\351\227\250\345\217\243\345\261\217/cases/01\351\227\250\345\217\243\345\261\217\351\246\226\346\254\241\345\256\211\350\243\205\351\203\250\347\275\262/__pycache__/\345\256\211\350\243\205\351\203\250\347\275\262\346\265\201\347\250\213.cpython-310.pyc" new file mode 100644 index 0000000000000000000000000000000000000000..8367ef1bddeac86b036a056019e54ba9a1814038 Binary files /dev/null and "b/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\344\270\255\346\216\247\351\227\250\345\217\243\345\261\217/cases/01\351\227\250\345\217\243\345\261\217\351\246\226\346\254\241\345\256\211\350\243\205\351\203\250\347\275\262/__pycache__/\345\256\211\350\243\205\351\203\250\347\275\262\346\265\201\347\250\213.cpython-310.pyc" differ diff --git "a/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\344\270\255\346\216\247\351\227\250\345\217\243\345\261\217/cases/\346\265\213\350\257\225\347\233\256\345\275\225/__st__.py" "b/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\344\270\255\346\216\247\351\227\250\345\217\243\345\261\217/cases/01\351\227\250\345\217\243\345\261\217\351\246\226\346\254\241\345\256\211\350\243\205\351\203\250\347\275\262/__st__.py" similarity index 75% rename from "\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\344\270\255\346\216\247\351\227\250\345\217\243\345\261\217/cases/\346\265\213\350\257\225\347\233\256\345\275\225/__st__.py" rename to "\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\344\270\255\346\216\247\351\227\250\345\217\243\345\261\217/cases/01\351\227\250\345\217\243\345\261\217\351\246\226\346\254\241\345\256\211\350\243\205\351\203\250\347\275\262/__st__.py" index b04644fb7cf03cb7e6555352a3d415b4333b61ea..1cd04fdf1ea3f4ece5c6634fcadc19529c1a3496 100644 --- "a/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\344\270\255\346\216\247\351\227\250\345\217\243\345\261\217/cases/\346\265\213\350\257\225\347\233\256\345\275\225/__st__.py" +++ "b/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\344\270\255\346\216\247\351\227\250\345\217\243\345\261\217/cases/01\351\227\250\345\217\243\345\261\217\351\246\226\346\254\241\345\256\211\350\243\205\351\203\250\347\275\262/__st__.py" @@ -1,6 +1,6 @@ import sys import os -from venv import logger +from time import sleep # 获å–当å‰è„šæœ¬çš„ç»å¯¹è·¯å¾„ current_dir = os.path.dirname(os.path.abspath(__file__)) @@ -10,25 +10,24 @@ current_dir = os.path.dirname(os.path.abspath(__file__)) sys.path.append(预定é…套件_path) # å¯¼å…¥æ¨¡å— try: - from 预定é…套件.Base.app_base import * from 预定é…套件.Base.base import * + from 预定é…套件.Base.app_base import * except ModuleNotFoundError as e: print(f"ModuleNotFoundError: {e}") print("å°è¯•使用ç»å¯¹è·¯å¾„导入") - from 预定é…套件.Base.app_base import * from 预定é…套件.Base.base import * + from 预定é…套件.Base.app_base import * def suite_setup(): - STEP(1, "åˆå§‹åŒ–设备adb连接") - device_ip = '192.168.1.160' - app_init(device_ip) - # 检查设备adbè¿žæŽ¥çŠ¶æ€ - CHECK_POINT("设备1çš„adb连接åˆå§‹åŒ–检测", app_init(device_ip) == True) + STEP(1, "åˆå§‹åŒ–设备1çš„adb连接") + device_ip1 = '192.168.1.128' + CHECK_POINT("设备1çš„adb连接åˆå§‹åŒ–检测", app_init(device_ip1) == True) browser_init("展厅预定巡检") wd = GSTORE['wd'] def suite_teardown(): - device_ip = '192.168.1.160' - app_quit(device_ip) + device_ip1 = '192.168.5.156' + app_quit(device_ip1) + browser_quit() \ No newline at end of file diff --git "a/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\344\270\255\346\216\247\351\227\250\345\217\243\345\261\217/cases/01\351\227\250\345\217\243\345\261\217\351\246\226\346\254\241\345\256\211\350\243\205\351\203\250\347\275\262/\345\256\211\350\243\205\351\203\250\347\275\262\346\265\201\347\250\213.py" "b/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\344\270\255\346\216\247\351\227\250\345\217\243\345\261\217/cases/01\351\227\250\345\217\243\345\261\217\351\246\226\346\254\241\345\256\211\350\243\205\351\203\250\347\275\262/\345\256\211\350\243\205\351\203\250\347\275\262\346\265\201\347\250\213.py" new file mode 100644 index 0000000000000000000000000000000000000000..c033bc27fad63560be0ee00c0d91b5d6ad7af4bf --- /dev/null +++ "b/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\344\270\255\346\216\247\351\227\250\345\217\243\345\261\217/cases/01\351\227\250\345\217\243\345\261\217\351\246\226\346\254\241\345\256\211\350\243\205\351\203\250\347\275\262/\345\256\211\350\243\205\351\203\250\347\275\262\346\265\201\347\250\213.py" @@ -0,0 +1,83 @@ +import sys +import os + +from 预定é…套件.Base.app_base import find_element_with_retry + +# 获å–当å‰è„šæœ¬çš„ç»å¯¹è·¯å¾„ +current_dir = os.path.dirname(os.path.abspath(__file__)) +# 构建预定系统的ç»å¯¹è·¯å¾„ +预定é…套件_path = os.path.abspath(os.path.join(current_dir, '..', '..', '..','..')) +# æ·»åŠ è·¯å¾„ +sys.path.append(预定é…套件_path) +# å¯¼å…¥æ¨¡å— +from 预定é…套件.Base.base import * +from 预定é…套件.Base.app_base import * + +# 获å–当å‰è„šæœ¬æ‰€åœ¨çš„ç›®å½• +current_dir = os.path.dirname(os.path.abspath(__file__)) + +# 构建XLSX文件的ç»å¯¹è·¯å¾„ +xlsx_file_path = os.path.join(current_dir, '..', '..', '..', '测试数æ®', 'é—¨å£å±5.0测试用例.xlsx') + +class DoorScreenDeployment: + tags = ['é—¨å£å±é¦–次部署测试'] + """ + 执行指令是: + 1.cd .\预定é…套件\䏿ާ闍å£å±\ + 2.hytest --report_title é—¨å£å±é¦–次部署测试报告 --report_url_prefix http://nat.ubainsyun.com:31133 --tag é—¨å£å±é¦–次部署测试 + """ + ddt_cases = read_xlsx_data(xlsx_file_path, sheet_name='首次安装部署',case_type="æ ‡å‡†ç‰ˆ") + # 测试开始å‰è°ƒç”¨clear_columns_in_xlsx函数,将测试用例ä¸çš„æµ‹è¯•结果和日志截图置空 + clear_columns_in_xlsx(xlsx_file_path, sheet_name='首次安装部署', columns_to_clear=['测试结果', '测试频次', '日志截图']) + + def teststeps(self): + """ + 执行测试æ¥éª¤å‡½æ•°ï¼Œä¸»è¦ç”¨äºŽæ‰§è¡Œè¯»å–çš„æµ‹è¯•ç”¨ä¾‹å¹¶è¿›è¡Œä¼šè®®é¢„å®šç•Œé¢æ“作 + """ + # 从全局å˜å‚¨ä¸èŽ·å–webdriver对象 + wd = GSTORE['wd'] + name = self.name + sleep(1) + + # åˆå§‹åŒ–应用驱动,连接到指定的设备和应用 + app_drive = app_setup_driver("Android", "11", "DoorScreen", "com.ubains.local.gviewer", + "com.ubains.ub.gview.SplashActivity", "192.168.1.128:5555") + app_drive.implicitly_wait(60) # 设置缺çœç‰å¾…æ—¶é—´ + + # 使用显å¼ç‰å¾…æ¥ç‰å¾…å…ƒç´ å‡ºçŽ° + logging.info("ç‰å¾…é¦–é¡µåŠ è½½...") + + for step in self.para: + # 赋值页é¢ç±»åž‹page + page_type = step.get('page') + # èµ‹å€¼å…ƒç´ å®šä½ç±»åž‹ï¼Œå¹¶å°†å—符串转为Enum类型 + locator_type = app_get_by_enum(step.get('locator_type')) + # èµ‹å€¼å…ƒç´ å€¼ + locator_value = step.get('locator_value') + # èµ‹å€¼å…ƒç´ ç±»åž‹ï¼Œä¾‹å¦‚ï¼šclick点击ã€inputè¾“å…¥æ¡†ç‰ + element_type = step.get('element_type') + # èµ‹å€¼å…ƒç´ å€¼ï¼Œä¾‹å¦‚è¾“å…¥æ¡†çš„è¾“å…¥å€¼ + element_value = step.get('element_value') + # 赋值预期结果 + expented_result = step.get('expented_result') + # 赋值ç¯å¸¦æ—¶é—´ + sleep_time = step.get('sleep_time') + + # 判æ–页é¢åŠŸèƒ½ç±»åž‹ + if page_type == "Deployment": + + if element_type == "input": + # 调用app输入函数 + input_text_with_retry(app_drive,locator_type, locator_value,element_value) + sleep(sleep_time) + + elif element_type == "click": + # 调用app点击函数 + click_element_with_retry(app_drive, locator_type, locator_value) + sleep(sleep_time) + + elif element_type == "getText": + # 调用appèŽ·å–æ–‡æœ¬å‡½æ•° + element_text = get_text_with_retry(app_drive, locator_type, locator_value) + INFO(f"APP获å–到的文本信æ¯ï¼š{element_text}") + sleep(sleep_time) \ No newline at end of file diff --git "a/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\344\270\255\346\216\247\351\227\250\345\217\243\345\261\217/cases/02\351\227\250\345\217\243\345\261\217\344\274\232\350\256\256\346\230\276\347\244\272\347\225\214\351\235\242/__st__.py" "b/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\344\270\255\346\216\247\351\227\250\345\217\243\345\261\217/cases/02\351\227\250\345\217\243\345\261\217\344\274\232\350\256\256\346\230\276\347\244\272\347\225\214\351\235\242/__st__.py" new file mode 100644 index 0000000000000000000000000000000000000000..1cd04fdf1ea3f4ece5c6634fcadc19529c1a3496 --- /dev/null +++ "b/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\344\270\255\346\216\247\351\227\250\345\217\243\345\261\217/cases/02\351\227\250\345\217\243\345\261\217\344\274\232\350\256\256\346\230\276\347\244\272\347\225\214\351\235\242/__st__.py" @@ -0,0 +1,33 @@ +import sys +import os +from time import sleep + +# 获å–当å‰è„šæœ¬çš„ç»å¯¹è·¯å¾„ +current_dir = os.path.dirname(os.path.abspath(__file__)) +# 构建预定系统的ç»å¯¹è·¯å¾„ +预定é…套件_path = os.path.abspath(os.path.join(current_dir, '..','..','..','..')) +# æ·»åŠ è·¯å¾„ +sys.path.append(预定é…套件_path) +# å¯¼å…¥æ¨¡å— +try: + from 预定é…套件.Base.base import * + from 预定é…套件.Base.app_base import * +except ModuleNotFoundError as e: + print(f"ModuleNotFoundError: {e}") + print("å°è¯•使用ç»å¯¹è·¯å¾„导入") + from 预定é…套件.Base.base import * + from 预定é…套件.Base.app_base import * + +def suite_setup(): + STEP(1, "åˆå§‹åŒ–设备1çš„adb连接") + device_ip1 = '192.168.1.128' + CHECK_POINT("设备1çš„adb连接åˆå§‹åŒ–检测", app_init(device_ip1) == True) + + browser_init("展厅预定巡检") + wd = GSTORE['wd'] + +def suite_teardown(): + device_ip1 = '192.168.5.156' + app_quit(device_ip1) + + browser_quit() \ No newline at end of file diff --git "a/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\344\270\255\346\216\247\351\227\250\345\217\243\345\261\217/cases/\346\265\213\350\257\225\347\233\256\345\275\225/__pycache__/__st__.cpython-310.pyc" "b/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\344\270\255\346\216\247\351\227\250\345\217\243\345\261\217/cases/\346\265\213\350\257\225\347\233\256\345\275\225/__pycache__/__st__.cpython-310.pyc" deleted file mode 100644 index 676fcb28e23f25cc55ef5895106f892a0b0c2e98..0000000000000000000000000000000000000000 Binary files "a/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\344\270\255\346\216\247\351\227\250\345\217\243\345\261\217/cases/\346\265\213\350\257\225\347\233\256\345\275\225/__pycache__/__st__.cpython-310.pyc" and /dev/null differ diff --git "a/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\344\270\255\346\216\247\351\227\250\345\217\243\345\261\217/cases/\346\265\213\350\257\225\347\233\256\345\275\225/__pycache__/\351\227\250\345\217\243\345\261\217\346\265\213\350\257\225.cpython-310.pyc" "b/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\344\270\255\346\216\247\351\227\250\345\217\243\345\261\217/cases/\346\265\213\350\257\225\347\233\256\345\275\225/__pycache__/\351\227\250\345\217\243\345\261\217\346\265\213\350\257\225.cpython-310.pyc" deleted file mode 100644 index bc3868034c5a0af94fa088390424a48660d75092..0000000000000000000000000000000000000000 Binary files "a/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\344\270\255\346\216\247\351\227\250\345\217\243\345\261\217/cases/\346\265\213\350\257\225\347\233\256\345\275\225/__pycache__/\351\227\250\345\217\243\345\261\217\346\265\213\350\257\225.cpython-310.pyc" and /dev/null differ diff --git "a/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\344\270\255\346\216\247\351\227\250\345\217\243\345\261\217/cases/\346\265\213\350\257\225\347\233\256\345\275\225/\351\227\250\345\217\243\345\261\217\346\265\213\350\257\225.py" "b/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\344\270\255\346\216\247\351\227\250\345\217\243\345\261\217/cases/\346\265\213\350\257\225\347\233\256\345\275\225/\351\227\250\345\217\243\345\261\217\346\265\213\350\257\225.py" deleted file mode 100644 index d434f30654d302750bdcf74400d2cee3b3cd12b9..0000000000000000000000000000000000000000 --- "a/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\344\270\255\346\216\247\351\227\250\345\217\243\345\261\217/cases/\346\265\213\350\257\225\347\233\256\345\275\225/\351\227\250\345\217\243\345\261\217\346\265\213\350\257\225.py" +++ /dev/null @@ -1,26 +0,0 @@ -from appium.webdriver.common.appiumby import AppiumBy -from 预定系统.Base.app_base import * -import logging -from time import sleep -from hytest import * - -# é…置日志记录 -logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s') - -class DoorScreen: - """ - 执行指令: - 1.cd 预定系统 - 2. - """ - tags = ['é—¨å£å±æµ‹è¯•'] - - def teststeps(self): - app_drive = None - wd = GSTORE['wd'] - try: - app_drive = app_setup_driver("Android", "11", "é—¨å£å±æµ‹è¯•", "com.ubains.local.gviewer", "com.ubains.ub.gview.SplashActivity","192.168.1.160:5555") - app_drive.implicitly_wait(20) # 设置缺çœç‰å¾…æ—¶é—´ - - except Exception as e: - logging.error(f"å‘生错误: {e}", exc_info=True) \ No newline at end of file diff --git "a/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\344\270\255\346\216\247\351\227\250\345\217\243\345\261\217/log/testresult.log" "b/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\344\270\255\346\216\247\351\227\250\345\217\243\345\261\217/log/testresult.log" index 5b388e45b9120eb105d59d102c33f18547f6c387..8abd3ed5ae86567893e7616b9bcc20cfea9ddd14 100644 --- "a/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\344\270\255\346\216\247\351\227\250\345\217\243\345\261\217/log/testresult.log" +++ "b/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\344\270\255\346\216\247\351\227\250\345\217\243\345\261\217/log/testresult.log" @@ -3,11 +3,97 @@ === [ 收集测试用例 ] === -== cases\测试目录\__st__.py - - -== cases\测试目录\é—¨å£å±æµ‹è¯•.py - +== cases\01é—¨å£å±é¦–次安装部署\__st__.py + + +== cases\01é—¨å£å±é¦–次安装部署\安装部署æµç¨‹.py + +行 4 çš„ JSON æ•°æ®: { + "name": "首次安装部署功能", + "para": [{ + "page": "Deployment", + "locator_type": "XPATH", + "locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.EditText", + "element_type": "input", + "element_value": "192.168.5.235", + "expented_result": "", + "sleep_time":2 + }, + { + "page": "Deployment", + "locator_type": "XPATH", + "locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.Button[2]", + "element_type": "click", + "element_value": "", + "expented_result": "", + "sleep_time": 10 + }, + { + "page": "Deployment", + "locator_type": "XPATH", + "locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.EditText", + "element_type": "input", + "element_value": "测试会议室", + "expented_result": "", + "sleep_time":2 + }, + { + "page": "Deployment", + "locator_type": "XPATH", + "locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.Button[1]", + "element_type": "click", + "element_value": "", + "expented_result": "", + "sleep_time":2 + }, + { + "page": "Deployment", + "locator_type": "XPATH", + "locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.FrameLayout/androidx.recyclerview.widget.RecyclerView/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.TextView", + "element_type": "getText", + "element_value": "", + "expented_result": "测试会议室", + "sleep_time":2 + }, + { + "page": "Deployment", + "locator_type": "XPATH", + "locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.FrameLayout/androidx.recyclerview.widget.RecyclerView/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.FrameLayout", + "element_type": "click", + "element_value": "", + "expented_result": "", + "sleep_time":2 + }, + { + "page": "Deployment", + "locator_type": "XPATH", + "locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.Button[3]", + "element_type": "click", + "element_value": "", + "expented_result": "", + "sleep_time":2 + }, + { + "page": "Deployment", + "locator_type": "XPATH", + "locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[3]/android.widget.Button[2]", + "element_type": "click", + "element_value": "", + "expented_result": "", + "sleep_time":2 + }, + { + "page": "Deployment", + "locator_type": "XPATH", + "locator_value": "", + "element_type": "click", + "element_value": "", + "expented_result": "", + "sleep_time":10 + } + ] +} +XLSXæ–‡ä»¶å·²è¯»å– === [ 执行测试用例 ] === @@ -16,22 +102,19 @@ - ========= 测试开始 : 20250414_181647 ========= + ========= 测试开始 : 20250506_174611 ========= ->>> cases\测试目录\ +>>> cases\01é—¨å£å±é¦–次安装部署\ -[ suite setup ] cases\测试目录\ +[ suite setup ] cases\01é—¨å£å±é¦–次安装部署\ --- 第 1 æ¥ -- åˆå§‹åŒ–设备adb连接 +-- 第 1 æ¥ -- åˆå§‹åŒ–设备1çš„adb连接 '----------' æ£åœ¨åˆå§‹åŒ–ADB连接 '----------' -å°è¯•连接到设备: 192.168.1.160:5555 -设备 192.168.1.160:5555 已连接并å¯ç”¨ -'----------' æ£åœ¨åˆå§‹åŒ–ADB连接 '----------' -å°è¯•连接到设备: 192.168.1.160:5555 -设备 192.168.1.160:5555 已连接并å¯ç”¨ +å°è¯•连接到设备: 192.168.1.128:5555 +设备 192.168.1.128:5555 已连接并å¯ç”¨ ** 检查点 ** 设备1çš„adb连接åˆå§‹åŒ–检测 ----> 通过 @@ -39,38 +122,9 @@ '----------' æµè§ˆå™¨åˆå§‹åŒ–å®Œæˆ '----------' ->>> cases\测试目录\é—¨å£å±æµ‹è¯•.py +>>> cases\01é—¨å£å±é¦–次安装部署\安装部署æµç¨‹.py -* DoorScreen - 2025-04-14 18:16:49 +* 首次安装部署功能 - 2025-05-06 17:46:13 [ case execution steps ] - PASS - -[ suite teardown ] cases\测试目录\ -ADB 连接已æ–å¼€: 192.168.1.160:5555 -清除æµè§ˆå™¨ - - - ========= æµ‹è¯•ç»“æŸ : 20250414_181732 ========= - - - 耗时 : 44.542 ç§’ - - - é¢„å¤‡æ‰§è¡Œç”¨ä¾‹æ•°é‡ : 1 - - å®žé™…æ‰§è¡Œç”¨ä¾‹æ•°é‡ : 1 - - 通过 : 1 - - 失败 : 0 - - 异常 : 0 - - 套件åˆå§‹åŒ–失败 : 0 - - 套件清除 失败 : 0 - - 用例åˆå§‹åŒ–失败 : 0 - - 用例清除 失败 : 0 +APP获å–到的文本信æ¯ï¼šæµ‹è¯•会议室 diff --git "a/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\344\270\255\346\216\247\351\227\250\345\217\243\345\261\217/log/testresult.log.1" "b/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\344\270\255\346\216\247\351\227\250\345\217\243\345\261\217/log/testresult.log.1" index 670bf869574c03194cb40bdb2b050cf022b4e5d5..368ec4e268ab831ce2f0ca1f106e5ff1037c3e25 100644 --- "a/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\344\270\255\346\216\247\351\227\250\345\217\243\345\261\217/log/testresult.log.1" +++ "b/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\344\270\255\346\216\247\351\227\250\345\217\243\345\261\217/log/testresult.log.1" @@ -3,11 +3,97 @@ === [ 收集测试用例 ] === -== cases\测试目录\__st__.py - - -== cases\测试目录\é—¨å£å±æµ‹è¯•.py - +== cases\01é—¨å£å±é¦–次安装部署\__st__.py + + +== cases\01é—¨å£å±é¦–次安装部署\安装部署æµç¨‹.py + +行 4 çš„ JSON æ•°æ®: { + "name": "首次安装部署功能", + "para": [{ + "page": "Deployment", + "locator_type": "XPATH", + "locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.EditText", + "element_type": "send", + "element_value": "192.168.5.235", + "expented_result": "", + "sleep_time":2 + }, + { + "page": "Deployment", + "locator_type": "XPATH", + "locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.Button[2]", + "element_type": "click", + "element_value": "", + "expented_result": "", + "sleep_time": 10 + }, + { + "page": "Deployment", + "locator_type": "XPATH", + "locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.EditText", + "element_type": "send", + "element_value": "测试会议室", + "expented_result": "", + "sleep_time":2 + }, + { + "page": "Deployment", + "locator_type": "XPATH", + "locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.Button[1]", + "element_type": "click", + "element_value": "", + "expented_result": "", + "sleep_time":2 + }, + { + "page": "Deployment", + "locator_type": "XPATH", + "locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.FrameLayout/androidx.recyclerview.widget.RecyclerView/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.TextView", + "element_type": "getText", + "element_value": "", + "expented_result": "测试会议室", + "sleep_time":2 + }, + { + "page": "Deployment", + "locator_type": "XPATH", + "locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.FrameLayout/androidx.recyclerview.widget.RecyclerView/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.FrameLayout", + "element_type": "click", + "element_value": "", + "expented_result": "", + "sleep_time":2 + }, + { + "page": "Deployment", + "locator_type": "XPATH", + "locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.Button[3]", + "element_type": "click", + "element_value": "", + "expented_result": "", + "sleep_time":2 + }, + { + "page": "Deployment", + "locator_type": "XPATH", + "locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[3]/android.widget.Button[2]", + "element_type": "click", + "element_value": "", + "expented_result": "", + "sleep_time":2 + }, + { + "page": "Deployment", + "locator_type": "XPATH", + "locator_value": "", + "element_type": "click", + "element_value": "", + "expented_result": "", + "sleep_time":10 + } + ] +} +XLSXæ–‡ä»¶å·²è¯»å– === [ 执行测试用例 ] === @@ -16,22 +102,19 @@ - ========= 测试开始 : 20250414_181532 ========= + ========= 测试开始 : 20250506_174427 ========= ->>> cases\测试目录\ +>>> cases\01é—¨å£å±é¦–次安装部署\ -[ suite setup ] cases\测试目录\ +[ suite setup ] cases\01é—¨å£å±é¦–次安装部署\ --- 第 1 æ¥ -- åˆå§‹åŒ–设备adb连接 +-- 第 1 æ¥ -- åˆå§‹åŒ–设备1çš„adb连接 '----------' æ£åœ¨åˆå§‹åŒ–ADB连接 '----------' -å°è¯•连接到设备: 192.168.1.160:5555 -设备 192.168.1.160:5555 已连接并å¯ç”¨ -'----------' æ£åœ¨åˆå§‹åŒ–ADB连接 '----------' -å°è¯•连接到设备: 192.168.1.160:5555 -设备 192.168.1.160:5555 已连接并å¯ç”¨ +å°è¯•连接到设备: 192.168.1.128:5555 +设备 192.168.1.128:5555 已连接并å¯ç”¨ ** 检查点 ** 设备1çš„adb连接åˆå§‹åŒ–检测 ----> 通过 @@ -39,38 +122,8 @@ '----------' æµè§ˆå™¨åˆå§‹åŒ–å®Œæˆ '----------' ->>> cases\测试目录\é—¨å£å±æµ‹è¯•.py +>>> cases\01é—¨å£å±é¦–次安装部署\安装部署æµç¨‹.py -* DoorScreen - 2025-04-14 18:15:34 +* 首次安装部署功能 - 2025-05-06 17:44:29 [ case execution steps ] - PASS - -[ suite teardown ] cases\测试目录\ -ADB 连接已æ–å¼€: 192.168.1.160:5555 -清除æµè§ˆå™¨ - - - ========= æµ‹è¯•ç»“æŸ : 20250414_181539 ========= - - - 耗时 : 6.960 ç§’ - - - é¢„å¤‡æ‰§è¡Œç”¨ä¾‹æ•°é‡ : 1 - - å®žé™…æ‰§è¡Œç”¨ä¾‹æ•°é‡ : 1 - - 通过 : 1 - - 失败 : 0 - - 异常 : 0 - - 套件åˆå§‹åŒ–失败 : 0 - - 套件清除 失败 : 0 - - 用例åˆå§‹åŒ–失败 : 0 - - 用例清除 失败 : 0 diff --git "a/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\344\270\255\346\216\247\351\227\250\345\217\243\345\261\217/log/testresult.log.2" "b/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\344\270\255\346\216\247\351\227\250\345\217\243\345\261\217/log/testresult.log.2" index d25f5db0e302c1a5f6e6add3880e271f9dd8dacc..d0c34e12698af2f5a247974a488abfc038425ba9 100644 --- "a/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\344\270\255\346\216\247\351\227\250\345\217\243\345\261\217/log/testresult.log.2" +++ "b/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\344\270\255\346\216\247\351\227\250\345\217\243\345\261\217/log/testresult.log.2" @@ -3,11 +3,97 @@ === [ 收集测试用例 ] === -== cases\测试目录\__st__.py - - -== cases\测试目录\é—¨å£å±æµ‹è¯•.py - +== cases\01é—¨å£å±é¦–次安装部署\__st__.py + + +== cases\01é—¨å£å±é¦–次安装部署\安装部署æµç¨‹.py + +行 4 çš„ JSON æ•°æ®: { + "name": "首次安装部署功能", + "para": [{ + "page": "Deployment", + "locator_type": "xpath", + "locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.EditText", + "element_type": "send", + "element_value": "192.168.5.235", + "expented_result": "", + "sleep_time":2 + }, + { + "page": "Deployment", + "locator_type": "xpath", + "locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.Button[2]", + "element_type": "click", + "element_value": "", + "expented_result": "", + "sleep_time": 10 + }, + { + "page": "Deployment", + "locator_type": "xpath", + "locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.EditText", + "element_type": "send", + "element_value": "测试会议室", + "expented_result": "", + "sleep_time":2 + }, + { + "page": "Deployment", + "locator_type": "xpath", + "locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.Button[1]", + "element_type": "click", + "element_value": "", + "expented_result": "", + "sleep_time":2 + }, + { + "page": "Deployment", + "locator_type": "xpath", + "locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.FrameLayout/androidx.recyclerview.widget.RecyclerView/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.TextView", + "element_type": "getText", + "element_value": "", + "expented_result": "测试会议室", + "sleep_time":2 + }, + { + "page": "Deployment", + "locator_type": "xpath", + "locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.FrameLayout/androidx.recyclerview.widget.RecyclerView/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.FrameLayout", + "element_type": "click", + "element_value": "", + "expented_result": "", + "sleep_time":2 + }, + { + "page": "Deployment", + "locator_type": "xpath", + "locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.Button[3]", + "element_type": "click", + "element_value": "", + "expented_result": "", + "sleep_time":2 + }, + { + "page": "Deployment", + "locator_type": "xpath", + "locator_value": "/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[3]/android.widget.Button[2]", + "element_type": "click", + "element_value": "", + "expented_result": "", + "sleep_time":2 + }, + { + "page": "Deployment", + "locator_type": "xpath", + "locator_value": "", + "element_type": "click", + "element_value": "", + "expented_result": "", + "sleep_time":10 + } + ] +} +XLSXæ–‡ä»¶å·²è¯»å– === [ 执行测试用例 ] === @@ -16,19 +102,19 @@ - ========= 测试开始 : 20250414_181513 ========= + ========= 测试开始 : 20250506_174239 ========= ->>> cases\测试目录\ +>>> cases\01é—¨å£å±é¦–次安装部署\ -[ suite setup ] cases\测试目录\ +[ suite setup ] cases\01é—¨å£å±é¦–次安装部署\ --- 第 1 æ¥ -- åˆå§‹åŒ–设备adb连接 +-- 第 1 æ¥ -- åˆå§‹åŒ–设备1çš„adb连接 '----------' æ£åœ¨åˆå§‹åŒ–ADB连接 '----------' -å°è¯•连接到设备: 192.168.1.160:5555 -设备 192.168.1.160:5555 已连接并å¯ç”¨ +å°è¯•连接到设备: 192.168.1.128:5555 +设备 192.168.1.128:5555 已连接并å¯ç”¨ ** 检查点 ** 设备1çš„adb连接åˆå§‹åŒ–检测 ----> 通过 @@ -36,38 +122,8 @@ '----------' æµè§ˆå™¨åˆå§‹åŒ–å®Œæˆ '----------' ->>> cases\测试目录\é—¨å£å±æµ‹è¯•.py +>>> cases\01é—¨å£å±é¦–次安装部署\安装部署æµç¨‹.py -* DoorScreen - 2025-04-14 18:15:15 +* 首次安装部署功能 - 2025-05-06 17:42:41 [ case execution steps ] - PASS - -[ suite teardown ] cases\测试目录\ -ADB 连接已æ–å¼€: 192.168.1.160:5555 -清除æµè§ˆå™¨ - - - ========= æµ‹è¯•ç»“æŸ : 20250414_181521 ========= - - - 耗时 : 7.758 ç§’ - - - é¢„å¤‡æ‰§è¡Œç”¨ä¾‹æ•°é‡ : 1 - - å®žé™…æ‰§è¡Œç”¨ä¾‹æ•°é‡ : 1 - - 通过 : 1 - - 失败 : 0 - - 异常 : 0 - - 套件åˆå§‹åŒ–失败 : 0 - - 套件清除 失败 : 0 - - 用例åˆå§‹åŒ–失败 : 0 - - 用例清除 失败 : 0 diff --git "a/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\346\265\213\350\257\225\346\225\260\346\215\256/\351\227\250\345\217\243\345\261\2175.0\346\265\213\350\257\225\347\224\250\344\276\213.xlsx" "b/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\346\265\213\350\257\225\346\225\260\346\215\256/\351\227\250\345\217\243\345\261\2175.0\346\265\213\350\257\225\347\224\250\344\276\213.xlsx" new file mode 100644 index 0000000000000000000000000000000000000000..69559db6d40d6a66709ea914feb8e72d171685de Binary files /dev/null and "b/\351\242\204\345\256\232\351\205\215\345\245\227\344\273\266/\346\265\213\350\257\225\346\225\260\346\215\256/\351\227\250\345\217\243\345\261\2175.0\346\265\213\350\257\225\347\224\250\344\276\213.xlsx" differ