appium学习总结15 - 数据驱动
文章目录
- 1、数据驱动
- 2、参数化的数据驱动
- 3、测试步骤的数据驱动
- 4、完整代码
1、数据驱动
- 参数化数据读取外部文件:使用yaml、json数据
- 测试步骤读取自外部文件:定制执行引擎
- 断言步骤读取自外部文件:定制执行引擎
- 整个用例读取自外部文件:动态构建用例
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 - 数据驱动相关推荐
- appium学习【二】:用try捕获异常后,用例的执行结果为pass
appium学习[二]:用try捕获异常后,用例的执行结果为pass 参考文章: (1)appium学习[二]:用try捕获异常后,用例的执行结果为pass (2)https://www.cnblog ...
- 深度学习(15)TensorFlow高阶操作四: 填充与复制
深度学习(15)TensorFlow高阶操作四: 填充与复制 1. Pad 2. 常用于Image Padding 3. tile 4. tile VS broadcast_to Outline pa ...
- Hadoop学习笔记—15.HBase框架学习(基础知识篇)
Hadoop学习笔记-15.HBase框架学习(基础知识篇) HBase是Apache Hadoop的数据库,能够对大型数据提供随机.实时的读写访问.HBase的目标是存储并处理大型的数据.HBase ...
- 深度学习数据集制作_深度学习时代的数据驱动建模之探讨
数据驱动三维建模的方法分类 从方法学角度来看,数据驱动的三维建模大致可分为两类:参数方法(parametric methods)和非参数方法(non-parametric methods). 参数方法 ...
- C++语言学习笔记15:Clean 垃圾清理插件
C++语言学习笔记15:Clean 垃圾清理插件 对话框 STET1 图片切换功能 导入位图资源 插入图片控件并修改属性 添加消息处理函数 step2 开发思路及类关系图 step3 添加控件及MFC ...
- 区块链学习笔记15——ETH状态树
区块链学习笔记15--ETH状态树 学习视频:北京大学肖臻老师<区块链技术与应用> 笔记参考:北京大学肖臻老师<区块链技术与应用>公开课系列笔记--目录导航页 引入 要实现的功 ...
- appium学习笔记
appium学习笔记 第1节.2节课appium介绍和安装 开源.跨平台.多语言支持的移动应用自动化工具 测试对象 原生APP 混合APP 移动APP APP运行环境 真实设备 虚拟设备 测试程序语言 ...
- 深度学习 Day 15——利用卷神经网络实现好莱坞明星识别
深度学习 Day 15--利用卷神经网络实现好莱坞明星识别 文章目录 深度学习 Day 15--利用卷神经网络实现好莱坞明星识别 一.前言 二.我的环境 三.前期工作 1.导入依赖项并设置GPU 2. ...
- 编程英语:常见代码错误 error 语句学习(15)
编程英语:常见代码错误 error 语句学习(15) error 1:Target address not found 找不到目标地址 error 2:Include files are not al ...
最新文章
- 使用verdaccio 搭建npm私有仓库
- Java code lib aes 加解密
- Java之关于面向对象
- 如何在MyEclipse中添加 用户自定义类库 以及将自定义的类库加入工程的加载目录...
- 全国计算机等级考试题库二级C操作题100套(第21套)
- 招聘 | 深圳人工智能与机器人研究院 扩展现实研究中心
- netlink的内核实现原理
- Android 性能优化:使用 Lint 优化代码、去除多余资源,减少APP的size
- 应用Mongoose开发MongoDB(1)数据库连接
- 51单片机控制电机正反转
- Java TCP实现文件传输
- Linux内核配置选项简介
- eventFilter能进入dragEnter但没有event::drog
- 大行bya412和java513_真实解密大行bya412和k3区别在哪里?哪款最好?老司机透漏评测...
- 关于沉没成本的座谈会
- 基于主机的入侵检测优缺点_[转]基于网络和主机的入侵检测比较,各自优缺点...
- ARM程序的镜像文件以及在内存中的分区
- 套汇算法c语言,在金字塔下实现套利策略的测评
- 基于zookeeper的瞬时节点实现分布式锁
- 【algorithm】源码详解中国大陆新身份证号码算法