appium学习总结15 - 数据驱动

本文介绍了数据驱动在自动化测试中的应用,包括参数化的数据驱动和测试步骤的数据驱动。通过yaml文件来存储测试数据和步骤,实现测试用例的动态构建和执行。示例代码展示了如何使用Pytest和Appium进行自动化测试,以及使用Hamcrest进行断言验证。
摘要由CSDN通过智能技术生成

1、数据驱动

  1. 参数化数据读取外部文件:使用yaml、json数据
  2. 测试步骤读取自外部文件:定制执行引擎
  3. 断言步骤读取自外部文件:定制执行引擎
  4. 整个用例读取自外部文件:动态构建用例

2、参数化的数据驱动

    @pytest.mark.parametrize("keyword, expected_price", yaml.safe_load(open("search.yaml", "r")))
    def test_001(self, keyword, expected_price):
    def test_001(self, keyword, expected_price):
        self.driver.find_element(AppiumBy.ID, "com.xueqiu.android:id/tv_banner").click()
        self.driver.find_element(AppiumBy.ID, "com.xueqiu.android:id/search_input_text").send_keys(keyword)
        self.driver.find_element(AppiumBy.ID, "name").click()
        price = self.driver.find_element(AppiumBy.ID, "current_price")
        # hamcrest定位:from hamcrest import *
        assert float(price.text) > expected_price
        assert "price" in price.get_attribute("resource-id")
        assert_that(price.get_attribute("package"), equal_to("com.xueqiu.android"))

search.yaml的数据格式

- [ pdd, 20]
- [ alibaba, 100]
- [ jd, 10]

3、测试步骤的数据驱动

import pytest
from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
from appium.webdriver.webdriver import WebDriver
from hamcrest import *
import yaml


class TestCase:
    def __init__(self, path):
        file = open(path, "r")
        self.steps = yaml.safe_load(file)

    def run(self, driver: WebDriver):
        for step in self.steps:
            element = None
            print(step)
            if isinstance(step, dict):
                if "id" in step.keys():
                    element = driver.find_element(AppiumBy.ID, step["id"])
                elif "xpath" in step.keys():
                    element = driver.find_element(AppiumBy.XPATH, step["xpath"])
                else:
                    print(step.keys())
                if "input" in step.keys():
                    element.send_keys(step["input"])
                else:
                    element.click()
                if "get" in step.keys():
                    text = element.get_attribute(step["get"])
                    print(text)


class TestDemo:

    def setup(self):
        caps = {
            "platformName": "android",
            "deviceName": "008640dd0804",
            "automationName": "uiautomator2",
            "appPackage": "com.xueqiu.android",
            "appActivity": ".view.WelcomeActivityAlias",
            "autoGrantPermissions": "true"
        }

        self.driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
        self.driver.find_element(AppiumBy.ID, "com.xueqiu.android:id/tv_agree").click()
        self.driver.implicitly_wait(20)

    # 数据驱动:测试步骤的驱动
    def test_001(self):
        TestCase("testcase001.yaml").run(self.driver)

    def teardown(self):
        self.driver.quit()

testcase001.yaml

- id: com.xueqiu.android:id/tv_banner
- id: com.xueqiu.android:id/search_input_text
  input: alibaba
- id: name
- id: current_price
  get: text

4、完整代码

import pytest
from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
from appium.webdriver.webdriver import WebDriver
from hamcrest import *
import yaml


class TestCase:
    def __init__(self, path):
        file = open(path, "r")
        self.steps = yaml.safe_load(file)

    def run(self, driver: WebDriver):
        for step in self.steps:
            element = None
            print(step)
            if isinstance(step, dict):
                if "id" in step.keys():
                    element = driver.find_element(AppiumBy.ID, step["id"])
                elif "xpath" in step.keys():
                    element = driver.find_element(AppiumBy.XPATH, step["xpath"])
                else:
                    print(step.keys())
                if "input" in step.keys():
                    element.send_keys(step["input"])
                else:
                    element.click()
                if "get" in step.keys():
                    text = element.get_attribute(step["get"])
                    print(text)


class TestDemo:

    def setup(self):
        caps = {
            "platformName": "android",
            "deviceName": "008640dd0804",
            "automationName": "uiautomator2",
            "appPackage": "com.xueqiu.android",
            "appActivity": ".view.WelcomeActivityAlias",
            "autoGrantPermissions": "true"
        }

        self.driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
        self.driver.find_element(AppiumBy.ID, "com.xueqiu.android:id/tv_agree").click()
        self.driver.implicitly_wait(20)

    # 数据驱动:测试步骤的驱动
    def test_001(self):
        TestCase("testcase001.yaml").run(self.driver)

    # 数据驱动:参数化的数据
    search_data = yaml.safe_load(open("search.yaml", "r"))
    print(search_data)
    @pytest.mark.parametrize("keyword, expected_price", search_data)
    def test_002(self, keyword, expected_price):
        self.driver.find_element(AppiumBy.ID, "com.xueqiu.android:id/tv_banner").click()
        self.driver.find_element(AppiumBy.ID, "com.xueqiu.android:id/search_input_text").send_keys(keyword)
        self.driver.find_element(AppiumBy.ID, "name").click()
        price = self.driver.find_element(AppiumBy.ID, "current_price")
        # hamcrest定位:from hamcrest import *
        assert float(price.text) > expected_price
        assert "price" in price.get_attribute("resource-id")
        assert_that(price.get_attribute("package"), equal_to("com.xueqiu.android"))

    def teardown(self):
        self.driver.quit()
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿_焦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值