python+appium(3)

自定义适配的断言

testcase/test01.py

import pytest
from appium import webdriver
from appium.webdriver.common.mobileby import MobileBy as by
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec

"""自定义标签"""
@pytest.mark.team_dev
def test_01():
    print('test_1')


@pytest.mark.team_test
def test_02():
    print('test_2')


@pytest.mark.team_auto
def test_03():
    print('test_3')
@pytest.mark.parametrize("data", [
    {"data": "测试数据", "assert": {"type": "not in", "value": "测试数据"}},
    {"data": "一二三", "assert": {"type": "equal", "value": "一二三"}},
    {"data": "四五六", "assert": {"type": "in", "value": "四五六"}}
])
def test_04(assert_data, data):
    url = 'http://127.0.0.1:4732/wd/hub'
    caps = {}
    caps['paltfromName'] = 'Android'
    ......
    
    driver = webdriver.Remote(url, caps)

    wait = WebDriverWait(driver, 10)
    elements = wait.until(ec.visibility_of_element_located((by.ID, 'com.zhao.myreader:id/tv_book_name')))
    elements_text = [i.text for i in elements if elements]
    assert_data(data["assert"], elements_text)

重点:自定义assert数据,type和value,确定哪种断言方式(type),确定断言内容(value)

conftest.py

import pytest


@pytest.fixture
def assert_data():
    def _assert(data, target):
        if data["type"] == "not in":
            assert data["value"] not in target
        if data["type"] == "equal":
            assert data["value"] in target
        if data["type"] == "in":
            for i in target:
                assert data["value"] in i

    return _assert

data接收的是test01.py中 assert": {“type”: “not in”, “value”: “测试数据”},target接收的是test01.py中 elements_text,即判断非空后的元素文本(elements.text)
在这里插入图片描述

补充知识:自定义标签

import pytest

"""自定义标签"""
@pytest.mark.team_dev
def test_01():
    print('test_1')


@pytest.mark.team_test
def test_02():
    print('test_2')


@pytest.mark.team_auto
def test_03():
    print('test_3')

mian.py

import pytest

pytest.main(["-vs", "-m", "team_auto"])

pytest.ini

[pytest]
markers =
    team_dev:表示开发团队
    team_test:表示测试团队
    team_auto:表示自动化团队

    v1:表示版本v1
    v2:表示版本v2
    v3:表示版本v3

使用中文会出现报错

UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0x80 in position 42: illegal multibyte sequence

在这里插入图片描述

解决方案:
项目目录\venv\lib\site-packages\iniconfig_init_.py 中设置 encoding=‘utf-8’
在这里插入图片描述
修改后运行结果
在这里插入图片描述
思路:自定义三个标签,只执行 team_auto 标签

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值