项目结构
样式:
projectName #项目名称
├── base #封装PO基类
├── page #封装PO页面对象
├── scripts #定义测试用例脚本
├── data #存放测试数据
├── report #存放生成的测试报告
├── log #存放日志文件
├── img #存放截图
├── utils.py #定义工具类
├──pytest.ini #pytest配置文件
├── utils.py #定义工具类
└──conftest.py #不用写任何代码,放在项目的根目录,所有测试文件都能读取它
自动化测试用例编写遵循原则
- 核心业务,重复执行的业务;
- 正向用例;
- 尽量减少用例脚本之间的依赖
- 不是所有用例都需要自动化;
page类
1、一个也没一个page文件,如图:

2、登陆后home页面封装代码
python
#后台home页面
from selenium.webdriver.common.by import By
from base.base import BasePage
from base.base import BaseHandle
#定义对象库层
class HomePage(BasePage):
def __init__(self):
super().__init__() #继承基类的初始化方法,自带驱动
self.username=By.XPATH,"//*[@class='user-name']/span"
self.digital=By.XPATH,"//*[@src='https://yxf-bucket-01.oss-cn-beijing.aliyuncs.com/ApplicationIcons/1641972601070.png']"
#获取元素定位使用基础类中方法,代码更简洁
def find_username(self):
return self.get_element(self.username)
def find_digital(self):
return self.get_element(self.digital)
#定义操作层
class HomeHandle(BaseHandle):
def __init__(self):
self.home_page=HomePage()
#获取登陆者姓名,通过text获取
def get_username(self):
return self.home_page.find_username().text
#点击进入客户管理
def click_digital(self):
self.home_page.find_digital().click()
#定义业务层
class HomeProxy:
#实例化操作层类
def __init__(self):
self.home_handle=HomeHandle()
#获取用户姓名,需要返回用户名字所以使用return
def get_username_msg(self):
return self.home_handle.get_username()
#点击登陆跳转到home页面
def go_digital_page(self):
self.home_handle.click_digital()
测试脚本
1、测试用例:先登陆-进入首页-点击客户管理应用;
2、代码如下:
python
import pytest
from page.page_home import HomeProxy
from page.page_login import LoginProxy
from page.page_digital import DigitalProxy
import logging
from utils import UtilsDriver,get_msg
#定义测试类,
class TestLogin:
#初始化。类级别的
def setup_class(self):
#实例化
self.login_proxy=LoginProxy()
self.home_proxy=HomeProxy()
self.dig_proxy=DigitalProxy()
#结束销毁,类级别,统一销毁
def teardown_class(self):
UtilsDriver.quit_driver() #调用工具类中的关闭webdriver对象
#success
def test01_login(self):
# 调用登陆业务进入首页,参数有账号密码
self.login_proxy.go_home_page("ydhl","ganfeimei","ydhl123456")
username = self.home_proxy.get_username_msg() #获取登陆者姓名
#断言,通过登陆后页面获取用户名来断言
assert "甘飞梅原点演示" == username
logging.info("登陆者姓名:{}".format(username))
def test02_home(self):
#点击客户管理应用进入
self.home_proxy.go_digital_page()
digname=self.dig_proxy.get_digname_msg()
#同上通过进入应用后获取应用名来断言
assert "营销服务平台" == digname
logging.info("应用名称:{}".format(digname))
测试结果
1、html格式测试报告。
