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 data3.实现参数化
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}") raise357.登录功能的参数化
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).text359.额度申请页面测试
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数据
数据驱动
定义
以测试数据(批量数据)驱动脚本执行,是一种自动化的设计模式
应用场景
单模块/页面的批量数据(覆盖不同场景)执行
