数据驱动
- 通过测试数据控制用例的执行,直接影响测试结果
- 数据驱动 最好结合 PO+参数化 技术使用
数据驱动的优点:将维护关注点放到测试数上, 而不去关注测试脚本代码
json
- 一种纯文本格式,后缀.json
- 一种轻量级数据交换格式:接口数据传递基本使用json 格式
- 由键值对组成,和 python 的字典格式一样,不同之处在于 json 是文本格式
- json 语法: 花括号包含键值对,键与值之间使用 冒号 分割 ,键值对之间使用 逗号分割
json 和 字典之间的转换
字典转为 json 字符串
- dumps()
- 操作: 导包 ,调用dumps 方法, 打印类型
- 注意 是 dumps
json 字符串转换为 字典
loads
计算机案例base实现
使用get_attribute()
方法获取指定的元素属性值
import time
from selenium.webdriver.support.wait import WebDriverWait
class Base:
# 初始化方法
def __init__(self, driver):
self.driver = driver
# 查找元素
def base_find_element(self, loc, timeout=30, poll=0.5):
"""
:param loc: 元素的定位信息,格式为元祖
:param timeout: 默认超时时间30秒
:param poll: 访问频率,默认0.5查找一次元素
:return: 返回查找到的元素
"""
# 显示等待
return WebDriverWait(self.driver,
timeout=timeout,
poll_frequency=poll).until(lambda x: x.find_element(*loc))
# 点击
def base_click(self, loc):
# 调用查找元素 并 进行点击
self.base_find_element(loc).click()
# 获取value属性方法封装
def base_get_value(self, loc):
# 使用get_attribute()方法获取指定的元素属性值
# 注意:返回
return self.base_find_element(loc).get_attribute("value")
# 截图
def base_get_img(self):
self.driver.get_screenshot_as_file("../image/{}.png".format(time.strftime("%Y_%m_%d %H_%M_%S")))
1.4 JSON介绍
1. 一种纯文本格式,后缀.json ;
2. 一种轻量级数据交换格式;(接口数据传递基本使用json格式)
3. 由键值对组成,和python的字典格式一模一样,不同之处在于(json是文本格式)
4. json语法:花括号包含键值对,键与值之间使用冒号(:)分隔, 键值对之间使用逗号(,)分隔;
1.5 json与字典转换
1). 字典转为json字符串
方法:dumps()
操作:
1. 导包
2. 调用dumps方法
3. 打印类型
注意:
使用dumps方法,而不是dump方法;
2) json字符串转字典
方法: loads()
操作:
1. 导包
2. 调用loads方法
3. 打印类型
注意:
1. 使用loads方法而不是load方法
2. 字符串中的键名必须使用双引号;
1.6 json的写与读
1). 写入json
方法:dump(写什么文件, 往那写)
操作:
1. 导包
2. 获取文件流f,并调用dump方法写入
注意:
1. 写入时模式 w
2. 写入的方法 dump() 而不是 dumps()
2). 读取json 【重点】
方法:load()
操作:
1. 导包
2. 获取文件流f,并调用load方法读取
注意:
1. 写入时模式 r
2. 写入的方法 load() 而不是 loads()
二、练习计算器
结构:
base
# 初始化方法
# 查找元素
# 点击
# 获取value属性方法封装
# 截图
page
# 点击数字
for n in num:
loc = By.ID, ““simple{}”.format(n)”
# 调用baes内点击方法
# 点击加号
# 点击等号
# 获取结果
# 组装业务方法
scripts
# 初始化方法
# 获取计算页面页面对象
# 获取driver
# 结束方法
# 关闭driver
# 测试加法方法
# 调用加法运算业务方法
# 断言
# 截图
drvier封装
类名
# 定义类变量
driver = None
@classmethod
# 获取driver方法
如果 cls.driver is None:
# 获取浏览器驱动对象
# 最大化
# 打开url 注:url建议写入配置文件中
返回 cls.driver
@classm3thod
# 关闭driver方法
如果 cls.driver:
cls.driver.quit()
# 注意此处一定要置空
cls.driver = None
读取json数据封装
1. 读取工具封装
# 导包
# 打开json获取文件流 并 调用load方法
2. 组装读取出来数据格式封装
预期格式:[(),()]
默认实际格式:{"":"","":""}
思路:
1. 新建空列表
2. 使用字典.values()方法获取所有的字典值;
3. 使用列表的.append((字典.get("键名")))
4. 返回 arrs
查找元素判断是否操作成功 思路封装
def base_if_success():
try:
self.base_find_element(loc, timeout=2)
return True
except:
return False
如何区分正向逆向用例
思路:在测试数据中添加一一个标识正向用例或逆向用例的标记: 如:True/False
步骤:
1. 调用登录方法(此登录方法中,只有输入用户名、输入密码、输入验证码、点击登录按钮) 切记:不要封装点击登录连接地址;
2. 判断是否正向用例:
# 判断安全退出是否存在
# 点击安全退出
# 点击登录连接地址