AI+软件测试第二篇0616
350.注册页面测试脚本
前后置方法名是固定的
toast提示

时间很短,而且不是源代码里的,显示一秒钟就消失,抓不到不好抓。

如果抓不到这个提示,直接定位当前页面的元素即可,比如说即便注册后仍然可以找到”注册抢88现金“意味着登陆失败

page_register.py:封装页面的方法
1.初始化方法,放属性(页面元素定位的属性)
2.方法:打开浏览器,业务方法(登陆注册),成功方法,失败方法
test_02_register.py:测试脚本
1.前置后置
2.测试用例(成功/失败)
351.开通资金托管页面封装
正向业务与逆向业务:
| 维度 | 正向业务 | 逆向业务 |
|---|---|---|
| 关注点 | 功能的可用性与正确性 | 系统的健壮性与安全性 |
| 输入数据 | 合法、标准数据 | 非法、边界、异常数据 |
| 预期行为 | 顺利执行,返回成功 | 优雅降级,准确报错,拒绝非法操作 |
| 测试占比 | 通常占 30%~40% | 通常占 60%~70%(Bug往往藏在逆向中) |
| 思维模式 | 顺向思维(按说明书操作) | 逆向/破坏性思维(找茬、挑刺) |

这是正向业务
UI自动化就是对版本进行回归测试,回归测试是正向的。自动化测试很少做逆向的,回归测试全是正向业务
写代码思路
从page开始写
元组的括号可以不写,但要保证“,”在
352.开通资金托管账号测试
353.faker工具介绍
354.faker应用演示
355.数据驱动介绍

数据驱动
通过批量数据测一个独立的功能
步骤
1.构造数据-->2.读取数据-->3.参数化调用
1.构造数据(json)
[
{
"user_id": 1001,
"name": "张三"
},
{
"user_id": 1002,
"name": "李四"
}
]
每一个花括号代表一条测试用例
可以把测试数据构造出json文件然后读取内容变成字典

2.读取数据

3.参数化调用

356.数据驱动演示
1.构造数据

数据应该放在data中
json文件里面的键值必须是双引号引起来的,json中的引号必须是双引号不能用单引号
[
{
"phone":"13800001001",
"password":"Aa123456",
"expect":"13800001001"
},
{
"phone":"13800001001",
"password":"123456",
"expect":"密码错误"
},
{
"phone":"13800008001",
"password":"Aa123456",
"expect":"不存在"
},
{
"phone":"13800008001",
"password":"",
"expect":"不能为空"
}
]
2.读取数据
def read_json(file_name):
"""
读取JSON文件并转换为格式为 [(), (), ...] 的列表
:param file_name: json文件名
:return: 列表
"""
data = []
file_path = PATH + "/data/" + file_name
with open(file_path, mode='r', encoding='utf-8') as f:
# 读取JSON文件并解析为Python对象
tmp = json.load(f)
for i in tmp:
a = tuple(i.values())
data.append(a)
# 返回列表
return data
3.实现参数化
import pytest
from page.page_login import PageLogin
from script import log
from tools import DriverTools, read_json
class TestLogin:
def setup_method(self):
"""前置方法"""
# 准备数据
driver = DriverTools.get_driver()
self.page_login = PageLogin(driver)
# 调用方法
self.page_login.open_url()
def teardown_method(self):
"""后置方法"""
DriverTools.quit_driver()
@pytest.mark.parametrize("phone,password,expect", read_json("login_data.json"))
def test_01_login(self, phone, password, expect):
# 准备数据
try:
# 调用方法
self.page_login.login(phone, password)
# 获取结果
if expect == phone:
result = self.page_login.get_success_result()
else:
result = self.page_login.get_fail_result()
# 打印日志
log.debug(f"登录结果: {result} | 期望值: {expect}")
# 断言
assert expect == result
except Exception as e:
log.error(f"测试执行过程中发生异常: {e}")
raise
357.登录功能的参数化
358.额度申请页面封装
#######################page_credit_application.py##########################
from selenium.webdriver.common.by import By
from base.base import BasePage
class PageCreditApplication(BasePage):
"""额度申请页面"""
def __init__(self,driver):
"""设置属性"""
super().__init__(driver)
# 页面元素定位信息
self.role = (By.XPATH, "//em[text()='借款账户']")
self.application = (By.LINK_TEXT, "申请额度")
self.money = (By.ID, "amount_account")
self.detail = (By.NAME, "remark")
self.code = (By.ID, "verifycode")
self.submit = (By.CSS_SELECTOR, ".btn-submit.btn-md")
# 提交成功结果 #amount_list > tr:nth-child(1) > td:nth-child(3)
self.success_result = (By.CSS_SELECTOR, "#amount_list> tr.ng-scope > td:nth-child(3)")
def switch_role(self):
"""点击切换账户"""
self.base_click(self.role)
def click_application(self):
"""点击额度申请"""
self.base_click(self.application)
def credit_application(self,money, detail, code):
"""
额度申请提交
:param money: 金额
:param detail: 详情
:param code: 验证码
:return: 无
"""
# 输入信息
self.base_input(self.money, money)
self.base_input(self.detail, detail)
self.base_input(self.code, code)
# 点击提交
self.base_click(self.submit)
def get_success_result(self):
"""获取提交成功结果"""
return self.fd_element(self.success_result).text
359.额度申请页面测试
1.pytest框架无需继承,直接拿过来用
2.驱动什么时候前面加self什么时候不加?当前方法内直接用无需加,别的方法也要用就需要加self
360.web自动化_day03总结
目标
完成项目核心业务web自动化脚本编写
项目封装
web自动化框架:
python+selenium+po+pytest
架构搭建(结构):
base层:
封装页面的公共操作(按照面向对象思想封装页面对象的公共方法)
page层:
按PO模式封装页面对象(把页面元素定位和页面操作放到这个里面)
实例属性:页面元素定位
实例方法:页面基本操作
多步可以拆分不同的方法(一个操作一个方法最好)
script层:
基于pytest框架封装测试用例/脚本
前后置处理
方法级别
setup_method()
teardown_method()
类级别
setup_class()
teardown_class()
测试用例
1.准备数据/创建对象
2.调用方法
3.打印结果日志记录
4.断言结果
data层
存放参数化使用的json数据,也可以存放excel数据(此时tools里应该换成读取excel的方法)
report层
log层
存放测试执行过程的日志信息
pytest.ini
pytest的配置文件,批量用例处理
config.py
项目配置文件
项目地址
项目URL
...
tools.py
通用工具
浏览器驱动
日志管理
读取json数据
数据驱动
定义
以测试数据(批量数据)驱动脚本执行,是一种自动化的设计模式
应用场景
单模块/页面的批量数据(覆盖不同场景)执行
如何实现

封装思路

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)