web自动化测试,其实就是通过代码,模拟手工测试,进行的常规操作,从而达到解放劳动力、提高效率、节省成本,那么当我们用例多了,进行的操作多了,有什么办法可以提高效率呢,接下来就介绍下web的一些常用封装和操作。
一、前置条件
基于pytest测试框架的特性,前置条件可以怎么设置呢?我们可以通过把前置条件的部分代码,放置在一个叫 conftest.py 的文件中,如下:
from pages.pages_02_login import LoginPage
from selenium import webdriver
import pytest
# 启动浏览器的前置条件
@pytest.fixture()
def get_driver():
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.maximize_window()
yield driver
driver.quit()
# 登录的前置条件
@pytest.fixture()
def teacher_login():
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.maximize_window()
driver.get('https://xxxxxx.html')
login_page = LoginPage(driver)
login_page.login('lx@com','123456')
yield driver
driver.quit()
我们每次调用前置条件时,直接传入夹具函数名即可;
class TestCreatCourse:
# 调用login的前置条件
def test_close_creat_course(self,teacher_login):
driver = teacher_login
create_course = Create_classPage(driver)
create_course.loading().click_add_or_create_class().click_create_class().click_close() #点击创建/加入课程,点击创建课程
avatar_elem = create_course.find_element(create_course.actovar_locator)
try:
time.sleep(1)
assert avatar_elem.get_attribute('title') == 'xxx'
except AssertionError as e:
logger.error('测试用例不通过'.format(e))
raise e
class TestLogin:
# 调用get_driver的前置条件
def test_without_username_and_password(self,get_driver):
driver = get_driver
login_pages = LoginPage(driver)
login_pages.loading().login('','')
try:
actual = ['账号不能为空','密码不能为空']
assert login_pages.get_error_msgs() == actual
except AssertionError as e:
login_pages.screenshot()
logger.error('测试用例不通过:{}'.format(e))
raise e
另外:自动化测试优化流程 1、启动浏览器,条件反射天骄一隐形等待 ==> driver.implicity_wait(10) 2、最大化窗口, ==> driver.maximize_window() 3、PO模式:(下面详细描述) - 把每一页的操作都封装成方法,(如登录、点击、获取文本等操作) - 页面 url 优化成属性(url、__init__中的driver) - 尽量让方法的返回值,返回一个pageobject对象,可为self,,也可为其他对象,(方便链式调用)
二、PO模式
== PO模式:(Page Object Model)PMO 把一个页面转化为对象,然后可通过调用,直接执行操作: page.login() ==>