APP 测试框架二次开发:Python, Appium & BeatifulReport

APP 测试框架二次开发:Python, Appium & BeatifulReport

一、需求:

需要对APP功能进行测试,重新封装 Python,Appium & BeatifulReport

二、结构:
  • 项目
    • 配置文件:conf
    • 核心模块:core
    • 业务逻辑:logic
    • 脚本:scripts
    • 软件包:apk
    • 截图:img
    • 报告:report
    • 入口:run_script.py
      在这里插入图片描述
三、入口:run_script.py

相关问题:查看 App自动化: 安装/卸载问题 & App自动化2: 安装/卸载问题

# coding=utf-8
import argparse
import os
import threading
import unittest

import requests
from BeautifulReport import BeautifulReport
from core.AdbShell import AdbShell
from core.utils import change_report_format


def parse_args():
    parser = argparse.ArgumentParser()
    parser.add_argument("-apk", "--apk-version", default="", help="apk version")
    args = parser.parse_args()
    return args


if __name__ == '__main__':
    apk_dir = os.getenv('APK_DIR')
    args = parse_args()
    apk_version = args.apk_version
    if apk_version:
        res = requests.post(apk_version).content
        apk_version = apk_version.split('/')[-1]
        print("apk_version", apk_version)
        os.environ['APK_VERSION'] = apk_version
        print(apk_version)
        apk = os.path.join(apk_dir, apk_version)
        with open(apk, 'wb') as f:
            f.write(res)
    else:
        apk = os.path.join(apk_dir, os.environ['APK_VERSION'])

    adb_shell = AdbShell()
    device = adb_shell.get_device_name()
    adb_shell.set_device_name(device)
    # 安装App
    package_name = adb_shell.get_target_package()
    if package_name:
        adb_shell.adb_uninstall_package(package_name)
    threads = []
    install = threading.Thread(target=adb_shell.adb_install_package, args=(device, apk))
    protect = threading.Thread(target=adb_shell.adb_tap_until_install_success, args=(2, ))
    threads.append(install)
    threads.append(protect)
    for t in threads:
        t.setDaemon(True)
        t.start()
    t.join()
    os.environ['U_APP_PACKAGE_NAME'] = adb_shell.get_target_package()

    test_suite = unittest.defaultTestLoader.discover('./scripts', pattern='test*.py')
    result = BeautifulReport(test_suite)
    result.report(filename='report', description='UI自动化测试报告', report_dir='report')
    report_file = os.path.join(os.getenv('U_APPMBT_ROOT'), 'report', 'report.html')
    change_report_format(report_file)

四、配置文件:conf

1.config.py:全局参数设置目录、手机和软件包等

# encoding = utf-8
import os
from datetime import datetime

# Project Start Time
os.environ['U_PRJ_START_TIME'] = datetime.now().strftime(' %Y-%m-%d %H:%M:%S')

# Appium Info
# platform name
os.environ['U_APPIUM_PLATFORM_NAME'] = 'Android'
# platform version
os.environ['U_APPIUM_PLATFORM_VERSION'] = ''
# device name
os.environ['U_APPIUM_DEVICE_NAME'] = 'xxx'
# App server platform
os.environ['U_APP_SERVER_PLATFORM'] = 'Appium'
# app package
os.environ['U_APP_PACKAGE_NAME'] = 'com.xxx.xxx'
os.environ['U_APP_MAIN_ACTIVITY'] = 'com.xxx.xxx.activity.MainActivity'
# apk version
os.environ['APK_VERSION'] = 'xxx.apk'
# server ip
os.environ['U_APPIUM_SERVER_IP'] = 'localhost'
# server port
os.environ['U_APPIUM_SERVER_PORT'] = '4723'
# testLogs
os.environ['U_APPMBT_ROOT'] = str(os.getcwd())
# apk directory
os.environ['APK_DIR'] = os.path.join(os.getenv('U_APPMBT_ROOT'), 'apk')
os.environ['U_CURRENT_LOG'] = ''

  1. element_json: 存储APP中各元素
{
   
        "RC":
        {
   
        "authorization_request_id": "com.android.packageinstaller:id/permission_allow_button",
        "confirm_id": "com.xxx.rocket:id/confirm",
        "notice_id": "android:id/checkbox",
        "ignore_id": "com.xxx.rocket:id/tv_ignore",

        "mine_id": "com.xxx.rocket:id/frame_container_mine",
        "switch_channel_id": "com.xxx.rocket:id/switch_open_double",
        "language_setting_id": "com.xxx.rocket:id/tv_go2_language_setting",
        "home_page_id": "com.xxx.rocket:id/frame_go2_app_intro",
        "user_avatar_id": "com.xxx.rocket:id/iv_user_avatar",
        "taptap_toolbar_id": "com.xxx.rocket:id/toolbar",
        "login_confirm_position_percent": {
   
                "x": "50",
                "y": "85"
        },
        "login_tips_id": "com.xxx.rocket:id/iv_login_tips",
        "email_name_id":"com.xxx.rocket:id/email_name",
        "witch_mode_id":"com.xxx.rocket:id/switch_mode",
        "email_login_id":"com.xxx.rocket:id/login_register_btn",
        "item_edittext_id":"com.xxx.rocket:id/item_edittext",
        "setting_id": "com.xxx.rocket:id/tv_setting",
        "logout_id": "com.xxx.rocket:id/tv_log_out",
        "logout_confirm_id": "android:id/button1",
        "support_id": "com.xxx.rocket:id/tv_feedback_parent",
        "support_title_id": "com.xxx.rocket:id/tv_title",
        "support_xpath": "//*[@resource-id='app']//android.widget.EditText[1]",
        "support_back_id": "com.xxx.rocket:id/iv_back",

        "discover_id": "com.xxx.roc
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值