- 使用Page Object模式将页面定位和业务操作分开,分离测试对象(元素对象)和测试脚本(用例脚本),一个页面建一个对象类,提高用例的可维护性;
 - 使用yaml管理页面控件元素数据和测试用例数据。例如元素ID等发生变化时,不需要去修改测试代码,只需要在对应的页面元素yaml文件中修改即可;
 - 分模块管理,互不影响,随时组装,即拿即用。
 
测试框架分层设计

把常见的操作和查找封装成基础类,不管是什么产品,可直接拿来复用
- 业务层主要是封装对象页面类,一个页面建一个类,业务层页面继承基础层
 - 用例层针对产品页面功能进行构造模拟执行测试
 - 框架层提供基础组件,支撑整个流程执行及功能扩展,给用例层提供各页面的元素数据、用例测试数据,测试报告输出等
 
测试框架目录结构

如下思维导图目录结构介绍:

编写用例方法
如果对软件测试、接口测试、自动化测试、面试经验交流。感兴趣可以关注我们爱码小士,公众号内会有不定期的发放免费的资料链接,这些资料都是从各个技术网站搜集、整理出来的,如果你有好的学习资料可以私聊发我,我会注明出处之后分享给大家。
testinfo:
- id: test_login001
title: 登录测试
info: 打开抽屉首页
testcase: - element_info: login-link-a
find_type: ID
operate_type: click
info: 打开登录对话框 - element_info: mobile
find_type: ID
operate_type: send_keys
info: 输入手机号 - element_info: mbpwd
find_type: ID
operate_type: send_keys
info: 输入密码 - element_info: //input[@class=‘keeplogin’]
find_type: XPATH
operate_type: click
info: 单击取消自动登录单选框 - element_info: //span[text()=‘登录’]
find_type: XPATH
operate_type: click
info: 单击登录按钮 - element_info: userProNick
find_type: ID
operate_type: perform
info: 鼠标悬停账户菜单 - element_info: //a[@class=‘logout’]
find_type: XPATH
operate_type: click
info: 选择退出
check: - element_info: //div[@class=‘box-mobilelogin’]
/div[1]/span
find_type: XPATH
info: 检查输入手机号或密码,登录异常提示 - element_info: userProNick
find_type: ID
info: 成功登录 - element_info: reg-link-a
find_type: ID
info: 检查退出登录是否成功
login.yaml 
例如,我们要新增登录功能测试用例:
首先,只需在testyaml目录下新增一个页面对象yaml文件,参考login.yaml格式编写即可。这些文件是提供给封装页面对象类调用并执行定位识别操作。
id: test_login001.1
 detail : 手机号和密码为空登录
 screenshot : phone_pawd_empty
 data:
 phone: “”
 password: “”
 check :
- 手机号不能为空
 
id: test_login001.2
 detail : 手机号为空登录
 screenshot : phone_empty
 data:
 phone: “”
 password : aa
 check :
- 手机号不能为空
 
id: test_login001.3
 detail : 密码为空登录
 screenshot : pawd_empty
 data:
 phone : 13511112222
 password: “”
 check :
- 密码不能为空
 
id: test_login001.4
 detail : 非法手机号登录
 screenshot : phone_error
 data:
 phone : abc
 password: aa
 check :
- 手机号格式不对
 
id: test_login001.5
 detail : 手机号或密码不匹配
 screenshot : pawd_error
 data:
 phone : 13511112222
 password: aa
 check :
- 账号密码错误
 
id: test_login001.6
 detail : 手机号和密码正确
 screenshot : phone_pawd_success
 data:
 phone : 13865439800
 password: ********
 check :
- yingoja
login_data.yaml 
login_data.yaml
其次,在testdata目录下新增一个login_data.yaml文件提供给登录接口传参的测试数据,编写格式参考login_data.yaml文件。
#!/usr/bin/env python
author = ‘YinJia’
 import os,sys
 sys.path.append(os.path.dirname(os.path.dirname
 (os.path.dirname(file))))
 from config import setting
 from selenium.webdriver.support.select import Select
 from selenium.webdriver.common.action_chains
 import ActionChains
 from selenium.webdriver.common.by import By
 from public.page_obj.base import Page
 from time import sleep
 from public.models.GetYaml import getyaml
 testData = getyaml(setting.TEST_Element_YAML
- ‘/’ + ‘login.yaml’)
class login(Page):
“”"
用户登录页面
“”"
url = ‘/’
dig_login_button_loc = (By.ID, testData.
get_elementinfo(0)) def dig_login(self):
“”"
首页登录
:return:
“”"
self.find_element(*self.dig_login_button_loc)
.click() sleep(1) 
login_phone_loc = (By.ID,testData.
 get_elementinfo(1)) # 密码输入框
 login_password_loc = (By.ID,testData.
 get_elementinfo(2)) # 取消自动登录
 keeplogin_button_loc = (By.XPATH,testData.
 get_elementinfo(3)) # 单击登录
 login_user_loc = (By.XPATH,testData.
 get_elementinfo(4)) # 退出登录
 login_exit_loc = (By.ID, testData.
 get_elementinfo(5)) # 选择退出
 login_exit_button_loc = (By.XPATH,testData.
 get_elementinfo(6))def login_phone(self,phone):
 “”"
 登录手机号
 :param username:
 :return:
 “”"
 self.find_element(*self.login_phone_loc).
 send_keys(phone)def login_password(self,password):
 “”"
 登录密码
 :param password:
 :return:
 “”"
 self.find_element(*self.login_password_loc).
 send_keys(password) def keeplogin(self):
 “”"
 取消单选自动登录
 :return:
 “”"
 self.find_element(*self.keeplogin_button_loc).
 click()def login_button(self):
 “”"
 登录按钮
 :return:
 “”"
 self.find_element(*self.login_user_loc).click()
 def login_exit(self):
 “”"
 退出系统
 :return:
 “”"
 above = self.find_element(*self.login_exit_loc)
 ActionChains(self.driver).move_to_element(above).
 perform() sleep(2)
 self.find_element(*self.login_exit_button_loc)
 .click()def user_login(self,phone,password):
 “”"
 登录入口
 :param username: 用户名
 :param password: 密码
 :return:
 “”"
 self.open()
 self.dig_login()
 self.login_phone(phone)
 self.login_password(password)
 sleep(1)
 self.keeplogin()
 sleep(1)
 self.login_button()
 sleep(1)
 phone_pawd_error_hint_loc = (By.XPATH,testData.
 get_CheckElementinfo(0))
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数软件测试工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
 
 
 
 
 .png)
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上软件测试开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注软件测试)
 
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
化!**
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注软件测试)
 [外链图片转存中…(img-GWhwoqda-1712743346377)]
















