pytest +uiautomator2+weditor app自动化从零开始

目录结构1.0
pytest +uiautomator2+weditor app自动化从零开始_第1张图片
把设备连接单独移出去了
pytest +uiautomator2+weditor app自动化从零开始_第2张图片

pytest +uiautomator2+weditor app自动化从零开始_第3张图片
模块操作代码,有一些流程操作和断言方法

from devices import dv
from time import sleep
import random
from tool.jt import capture_screenshot


def initialization(func):
    def wrapper():
        sleep(1)
        dv.app_stop('com.visteon.txzing.accountcenter')
        dv.app_start('com.visteon.txzing.accountcenter')
        sleep(2)
        func()
    return wrapper


@initialization
def f1():
    '''1、打开账号切换,点击其他的账号,点击确认登录,点击取消'''
    dv(text='账号切换').click()
    dv.xpath(
        '//*[@resource-id="com.xxxxxxx.xxxxxxx.accountcenter:id/change_account_recycler"]/android.view.ViewGroup[2]').click()
    dv(text='确定').click()
    dv(text='取消').click()


@initialization
def f2():
    '''2、点击设置、点击退出登录、点击取消'''
    dv(text='设置').click()
    dv(text='退出登录').click()
    dv(text='取消').click()


@initialization
def f3():
    '''3、点击设置、点击用户协议,点击返回,点击隐私政策,点击返回,再次点击返回到个人中心主页面'''
    dv(text='设置').click()
    dv(text='用户协议').click()
    sleep(1.5)
    dv.xpath('//*[@resource-id="com.xxxxxxx.xxxxxxx.accountcenter:id/top_bar_back"]').click()
    dv(text='隐私政策').click()
    sleep(1.5)
    dv.xpath('//*[@resource-id="com.xxxxxxx.xxxxxxx.accountcenter:id/top_bar_back"]').click()
    sleep(1.5)
    dv.xpath('//*[@resource-id="com.xxxxxxx.xxxxxxx.accountcenter:id/top_bar_back"]').click()


@initialization
def f4():
    '''4、点击账号关联,点击高德地图绑定,点击确定'''
    dv(text='账号关联').click()
    try:
        dv.xpath('//*[@content-desc="绑定高德地图"]').click()
    except:
        dv.xpath('//*[@content-desc="绑定高德地图"]').click()
    dv(text='确定').click()


def f5():
    '''5、进入问题反馈,点击开始录音,5s内结束录音,重新开始录音,切换问题类别从第一个切到最后一个,然后提交,最后播放语音'''
    dv(text='问题反馈').click()
    dv.xpath('//*[@resource-id="com.xxxxxxx.xxxxxxx.accountcenter:id/feedback_start_record"]').click()
    sleep(4)
    dv.xpath('//*[@resource-id="com.xxxxxxx.xxxxxxx.accountcenter:id/feedback_start_record"]').click()
    sleep(1)
    dv.xpath('//*[@resource-id="com.xxxxxxx.xxxxxxx.accountcenter:id/feedback_start_record"]').click()
    for i in ['多媒体', '导航', '蓝牙电话', '维保类', '设置', '其他']:
        dv(text=i).click()
        sleep(1)
    # 录音秒数随机
    sleep(random.randint(1, 80))
    dv.xpath('//*[@resource-id="com.xxxxxxx.xxxxxxx.accountcenter:id/feedback_start_record"]').click()
    dv(text='提交').click()
    sleep(2)
    dv.xpath(
        '//*[@resource-id="com.xxxxxxx.xxxxxxx.accountcenter:id/mine_feedback_recyclerview"]/android.view.ViewGroup[1]/android.view.ViewGroup[1]').click()


def run():
    while True:
        try:
            f1()
            f2()
            f3()
            f5()
            f4()
        except Exception as e:
            capture_screenshot(e)
            print(f'报错了重新运行{e}')


# 通过获取文本来断言
b = '//*[@resource-id="com.xxxxxxx.xxxxxxx.accountcenter:id/mine_feedback_recyclerview"]/android.view.ViewGroup[1]/android.widget.TextView[1]'
a = dv.xpath(b).get_text()
print(a)

# 通过判断元素是否存在来断言
c = dv.xpath('//*[@text="2023/11/30 15:49"]').exists
print(c)

# 通过元素属性是否发生变化来进行断言
d = dv.xpath('//*[@resource-id="com.xxxxxxx.xxxxxxx.accountcenter:id/feedback_record_bar_time"]')
# 获取语音条初始状态的info信息
initial_info = d.info
d.click()
clicked_info = d.info
# 比较前后的info信息,找出差异数据
diff = {k: clicked_info[k] for k in clicked_info if clicked_info[k] != initial_info[k]}
print("前后的差异数据:", diff)
if len(diff) == 0:
    print('状态未发生变化')
else:
    print('断言成功')


if __name__ == '__main__':
    while True:
        run()

目录结构1.1
新增test_accountcenter.py编写测试用例
新增run.py执行pytest
新增pytest.ini配置文件
pytest +uiautomator2+weditor app自动化从零开始_第4张图片
test_accountcenter.py
删除了3个场景,留下2个场景,每个场景加了2种断言方式f1(ex):f5(ex):,测试用例是test_zhanghao():test_luyin():,f1(ex):f5(ex):内部实现了断言并且返回结果

from devices import dv
from time import sleep
import random
from tool.jt import capture_screenshot
def f1(ex):
    '''1、打开账号切换,点击其他的账号,点击确认登录,点击取消'''
    dv.app_stop('com.visteon.txzing.accountcenter')
    dv.app_start('com.visteon.txzing.accountcenter')
    dv(text='账号切换').click()
    dv.xpath(
        '//*[@resource-id="com.visteon.txzing.accountcenter:id/change_account_recycler"]/android.view.ViewGroup[2]').click()
    dv(text='确定').click()
    text= dv(text='请在互联小程序确认登录').get_text()
    if not dv.xpath('//*[@resource-id="com.visteon.txzing.accountcenter:id/loading_cancel"]').exists:
        return False
    ass =ex==text
    return ass



def f5(ex):
    '''5、进入问题反馈,点击开始录音,5s内结束录音,重新开始录音,切换问题类别从第一个切到最后一个,然后提交,最后播放语音'''
    dv.app_stop('com.visteon.txzing.accountcenter')
    dv.app_start('com.xxxxxxx.xxxxxxx.accountcenter')
    dv(text='问题反馈').click()
    dv.xpath('//*[@resource-id="com.xxxxxxx.xxxxxxx.accountcenter:id/feedback_start_record"]').click()
    sleep(4)
    dv.xpath('//*[@resource-id="com.xxxxxxx.xxxxxxx.accountcenter:id/feedback_start_record"]').click()
    sleep(1)
    dv.xpath('//*[@resource-id="com.xxxxxxx.xxxxxxx.accountcenter:id/feedback_start_record"]').click()
    lb=['多媒体', '导航', '蓝牙电话', '维保类', '其他', '设置']
    for i in lb:
        dv(text=i).click()
        sleep(1)
    # 录音秒数随机
    sleep(random.randint(5, 10))
    dv.xpath('//*[@resource-id="com.xxxxxxx.xxxxxxx.accountcenter:id/feedback_start_record"]').click()
    dv(text='提交').click()
    ass= '设置'==ex
    '''元素信息变化'''
    d = dv.xpath('//*[@resource-id="com.xxxxxxx.xxxxxxx.accountcenter:id/feedback_record_bar_time"]')
    # 获取语音条初始状态的info信息
    initial_info = d.info
    d.click()
    clicked_info = d.info
    # 比较前后的info信息,找出差异数据
    diff = {k: clicked_info[k] for k in clicked_info if clicked_info[k] != initial_info[k]}
    print("前后的差异数据:", diff)
    if len(diff) == 0:
        return False

    sleep(2)
    dv.xpath(
        '//*[@resource-id="com.xxxxxxx.xxxxxxx.accountcenter:id/mine_feedback_recyclerview"]/android.view.ViewGroup[1]/android.view.ViewGroup[1]').click()
    return ass

def test_zhanghao():
    f1('请在互联小程序确认登录')
    assert True

def test_luyin():
    assert f5('设置')


run.py文件
运行文件,暂未配置参数
```python
import pytest
pytest.main([])

pytest.ini文件
配置了下报告的一些参数

[pytest]
addopts = -s --alluredir ./report/data

你可能感兴趣的:(pytest,自动化,uiautomator2)