app自动化测试---用户登录自动化

1.场景

用户输入不同的token进行登录操作,分别有三种不同的结果。

这三种结果操作步骤都一样,只是输入的数据不一致。

当用户登录成功之后:元素中登录成功提示 获取不到,登录成功使用的是 Android中的一个 Toast 组件。

当用户登陆失败之后:元素中的失败提示获取不到,我们可以截图然后使用图片识别,识别出图片里面的内容,进行判断

图片识别api参考:https://cloud.tencent.com/act/event/ocrdemo

 

2.代码

"""
  pytest 的配置文件
"""
import os
import pytest
from appium import webdriver
from appium.webdriver.webdriver import WebDriver

chromedriver= os.path.join(os.path.dirname(os.path.abspath(__file__)),'driver/chrome/75.0.3770.140/chromedriver.exe')

# @pytest.fixture(scope="session",autouse=True)    autouse=True 表示默认执行
@pytest.fixture(scope="session",autouse=True)
def driver():
    print("在所有的测试用例执行之前创建driver")
    desired_caps = {
        'platformName': 'Android',                  # 测试Android系统
        'platformVersion': '7.1.2',                 # Android版本 可以在手机的设置中关于手机查看
        'deviceName': '127.0.0.1:62001',            # adb devices 命令查看  设置为自己的设备
        'automationName': 'UiAutomator2',           # 自动化引擎
        'noReset': True,                            # 不要重置app的状态
        'fullReset': False,                         # 不要清理app的缓存数据
        'chromedriverExecutable': chromedriver,     # chromedriver 对应的绝对路径
        'appPackage': "org.cnodejs.android.md",     # 应用的包名
        'appActivity': ".ui.activity.MainActivity"  # 应用的活动页名称
    }
    driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_capabilities=desired_caps)
    driver.implicitly_wait(5)   # 全局的隐式等待时间
    yield driver                # 将driver 传递出来,写测试用case的时候,方法中直接传入driver,即可调用
    print("执行所有的用例执行之后的操作")


@pytest.fixture(scope="function",autouse=True)
def func_run(driver:WebDriver):
    yield
    # 用例执行完成之后清除app的数据
    driver.reset()
    # 启动app
    # driver.start_activity(app_package="org.cnodejs.android.md",app_activity=".ui.activity.MainActivity")

 

import os
import time

import pytest
from appium.webdriver.webdriver import WebDriver

test_data=[("d1563473-1f0d-4307-9774-6c2ff49c93ab",True,'登录成功'),
           ("d1563473-1f0d-4307-9774-6c2ff49c93a",False,'Access Token 认证失败'),
           ("d134567",False,"Access Token 格式错误")]


# py_driver:WebDriver  调用conftest.py 文件中定义的py_driver,并指定类型为WebDriver
@pytest.mark.parametrize("token,status,excpet_val",test_data)
def test_user_login(driver:WebDriver,token,status,excpet_val):
    """
    测试用户登陆成功
    :param driver:
    :return:
    """
    toggle_but = driver.find_element_by_android_uiautomator('resourceId("org.cnodejs.android.md:id/toolbar").childSelector(new UiSelector().className("android.widget.ImageButton"))')
    toggle_but.click()
    time.sleep(1)

    # 点击头像
    avatar = driver.find_element_by_android_uiautomator('text("点击头像登录").resourceId("org.cnodejs.android.md:id/tv_login_name")')
    avatar.click()

    # 输入accesstoken
    accesstoken = driver.find_element_by_id('org.cnodejs.android.md:id/edt_access_token')
    accesstoken.send_keys(token)

    # 点击登录按钮
    loginbtn = driver.find_element_by_android_uiautomator(
        'text("登录").resourceId("org.cnodejs.android.md:id/btn_login")')
    loginbtn.click()

    if status == True:
        # 获取toast文本值
        toast = driver.find_element_by_xpath('//android.widget.Toast')
        print('登录信息:', toast.text)
        assert toast.text == excpet_val
    else:
        # TODO 编写失败的断言
        # 获取报错信息
        ele = driver.find_element_by_android_uiautomator('resourceId("org.cnodejs.android.md:id/edt_access_token")')
        print("登录结果:", ele.text)

        # 截图并保存至文件夹下
        dir = os.path.abspath(os.path.join(os.getcwd(), "../../"))
        image_url = os.path.join(dir, 'image')
        print('图片路径:',image_url)

        # 获取当前日期
        new_time_day = time.strftime('%Y-%m-%d')
        new_time_day_url = os.path.join(image_url, new_time_day)
        print('图片路径:',new_time_day_url)

        # 判断文件夹是否存在,不存在则创建一个
        if os.path.exists(new_time_day_url) == False:
            os.mkdir(new_time_day_url)

        # 获取当前时分秒作为截图的图片名称
        time_s = time.strftime('%H_%M_%S')
        url = os.path.join(image_url, new_time_day)

        ele.screenshot(url+'/'+time_s+'.png')    # 截图

截图:

 

 

 

posted @ 2021-06-28 17:05  Z_sun  阅读(693)  评论(0编辑  收藏  举报