文章目录

  • 1、数据驱动
  • 2、参数化的数据驱动
  • 3、测试步骤的数据驱动
  • 4、完整代码

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_priceassert "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 yamlclass 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 = Noneprint(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_textinput: alibaba
- id: name
- id: current_priceget: 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 yamlclass 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 = Noneprint(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_priceassert "price" in price.get_attribute("resource-id")assert_that(price.get_attribute("package"), equal_to("com.xueqiu.android"))def teardown(self):self.driver.quit()

appium学习总结15 - 数据驱动相关推荐

  1. appium学习【二】:用try捕获异常后,用例的执行结果为pass

    appium学习[二]:用try捕获异常后,用例的执行结果为pass 参考文章: (1)appium学习[二]:用try捕获异常后,用例的执行结果为pass (2)https://www.cnblog ...

  2. 深度学习(15)TensorFlow高阶操作四: 填充与复制

    深度学习(15)TensorFlow高阶操作四: 填充与复制 1. Pad 2. 常用于Image Padding 3. tile 4. tile VS broadcast_to Outline pa ...

  3. Hadoop学习笔记—15.HBase框架学习(基础知识篇)

    Hadoop学习笔记-15.HBase框架学习(基础知识篇) HBase是Apache Hadoop的数据库,能够对大型数据提供随机.实时的读写访问.HBase的目标是存储并处理大型的数据.HBase ...

  4. 深度学习数据集制作_深度学习时代的数据驱动建模之探讨

    数据驱动三维建模的方法分类 从方法学角度来看,数据驱动的三维建模大致可分为两类:参数方法(parametric methods)和非参数方法(non-parametric methods). 参数方法 ...

  5. C++语言学习笔记15:Clean 垃圾清理插件

    C++语言学习笔记15:Clean 垃圾清理插件 对话框 STET1 图片切换功能 导入位图资源 插入图片控件并修改属性 添加消息处理函数 step2 开发思路及类关系图 step3 添加控件及MFC ...

  6. 区块链学习笔记15——ETH状态树

    区块链学习笔记15--ETH状态树 学习视频:北京大学肖臻老师<区块链技术与应用> 笔记参考:北京大学肖臻老师<区块链技术与应用>公开课系列笔记--目录导航页 引入 要实现的功 ...

  7. appium学习笔记

    appium学习笔记 第1节.2节课appium介绍和安装 开源.跨平台.多语言支持的移动应用自动化工具 测试对象 原生APP 混合APP 移动APP APP运行环境 真实设备 虚拟设备 测试程序语言 ...

  8. 深度学习 Day 15——利用卷神经网络实现好莱坞明星识别

    深度学习 Day 15--利用卷神经网络实现好莱坞明星识别 文章目录 深度学习 Day 15--利用卷神经网络实现好莱坞明星识别 一.前言 二.我的环境 三.前期工作 1.导入依赖项并设置GPU 2. ...

  9. 编程英语:常见代码错误 error 语句学习(15)

    编程英语:常见代码错误 error 语句学习(15) error 1:Target address not found 找不到目标地址 error 2:Include files are not al ...

最新文章

  1. 使用verdaccio 搭建npm私有仓库
  2. Java code lib aes 加解密
  3. Java之关于面向对象
  4. 如何在MyEclipse中添加 用户自定义类库 以及将自定义的类库加入工程的加载目录...
  5. 全国计算机等级考试题库二级C操作题100套(第21套)
  6. 招聘 | 深圳人工智能与机器人研究院 扩展现实研究中心
  7. netlink的内核实现原理
  8. Android 性能优化:使用 Lint 优化代码、去除多余资源,减少APP的size
  9. 应用Mongoose开发MongoDB(1)数据库连接
  10. 51单片机控制电机正反转
  11. Java TCP实现文件传输
  12. Linux内核配置选项简介
  13. eventFilter能进入dragEnter但没有event::drog
  14. 大行bya412和java513_真实解密大行bya412和k3区别在哪里?哪款最好?老司机透漏评测...
  15. 关于沉没成本的座谈会
  16. 基于主机的入侵检测优缺点_[转]基于网络和主机的入侵检测比较,各自优缺点...
  17. ARM程序的镜像文件以及在内存中的分区
  18. 套汇算法c语言,在金字塔下实现套利策略的测评
  19. 基于zookeeper的瞬时节点实现分布式锁
  20. 【algorithm】源码详解中国大陆新身份证号码算法

热门文章

  1. 学python有没前途-都说现在python牛,转行学Python有发展前景吗?
  2. 显示器可以远程管理Linux吗,Ubuntu无显示器情况下的远程控制的方法及命令
  3. 树莓派教程:Serial串口
  4. axios箭头函数和this问题处理
  5. 现在想拿到20k的高薪offer,到底是不是痴人说梦
  6. iPhone 4韩国上市时间推迟令竞争对手获益
  7. 【乱码与杂谈】接受不完美
  8. 「车联网」的概念炒了那么久,为什么没有出现让人眼前一亮的产品?
  9. ffmpeg 采集摄像头yuv数据
  10. Burp Suite下载