一、Pom模式+关键字驱动模式
po模式 : page object model 页面对象模式。
1、pom模式的好处:
解决:线性脚本的问题
解决:代码不能重复利用的问题
解决:后期的维护问题。
栗子:看过他们的仓库?日用品放一起,电器放一起,文具放一起。......分类。
2、POM模式分三层:
1.基础层:base 主要放selenium原生的方法。
2.页面对象层:po 主要用于放页面的元素和页面的动作。
3.测试用例层:testcase 存放测试用例以及测试数据。
(重点)页面对象层调用基础层的方法,测试用例层调用页面对象层。

3、unittest 的前后置处理(夹具)
setUp 在测试用例之前的准备工作
tearDown 在测试用例之后的扫尾工作
setUp(self):每个测试用例执行之前自动执行,做准备工作
常用:打开浏览器、访问网址、登录系统
tearDown(self):每个测试用例执行之后自动执行,做收尾工作
常用:关闭浏览器、清理测试数据
记住:

二、分装步骤
1、先建3层

2、base层:封装 selenium 原生方法(点击、输入、查找元素、等待等)

from selenium import webdriver
class BasePage:
def __init__(self):
global driver
# 打开浏览器
self.driver = webdriver.Chrome()
# 加载网页
self.driver.get("http://localhost/ecshop/admin/privilege.php?act=logout")
# 定位元素的关键字
def locator_element(self, loc):
# 接收定位元组,*loc解包,查找并返回页面元素
return self.driver.find_element(*loc)
# 设置值的关键字
def send_keys(self, loc, value):
# 调用元素定位方法,找到输入框,输入内容value
self.locator_element(loc).send_keys(value)
3、page层:每个页面单独一个类,存放页面元素 定位和页面动作
from selenium.webdriver.common.by import By
from base.base_page import BasePage
class LoginPage(BasePage):
#页面的元素
username_loc = (By.NAME,"username")
password_loc = (By.NAME,"password")
submit_loc = (By.XPATH,"//input[@value='进入管理中心']")
#页面的动作
def login_ecshop(self,username,password):
#定位用户名输入框
self.send_keys(LoginPage.username_loc,username)
#定位密码输入框
self.send_keys(LoginPage.password_loc,password)
#定位登录按钮
self.click(LoginPage.submit_loc)
4、testcase层:testcase 调用Page层,存放测试用例以及测试数据。
import unittest
from page.login_page import LoginPage
class TestCase(unittest.TestCase):
def test_01_login(self):
"""
登录
:return:
"""
# 实例化登录页面对象(po层的LoginPage继承了base层的basePage,同时也会继承他的方法,所以这里实例化对象相当于执行了init函数)
lp = LoginPage()
# 调用登录业务方法,执行ecshop登录
lp.login_ecshop()
其余看pycharm的testapi项目理解
三、断言
1、unittest 断言:
用于判断预期结果和实际结果是否相符,如果断言失败,用例直接标记失败。
self.assertEqual() # 判断两个值是否相等
self.assertTrue() # 判断一个值是否为True
self.assertIn() # 判断一个值是否包含在另一个值里面
四、完善达到在企业里面能够实际落地的web自动化测试框架
编程语言:python、java
设计模式:**POM(页面对象模型)**、关键字驱动模式
用例管理:unittest、pytest
数据驱动:ddt、@pytest.mark.parametrize ()
二次封装:excel 封装,ini/yaml 配置文件封装,数据库封装
日志监控:logger 日志收集
异常处理:try except
jenkins:持续集成、无人值守
Docker:镜像容器技术
分布式运行:Selenium Grid