Web自动化实战(3)-- litemail电商项目
这一篇主要讲怎么优化现有代码。
本篇将会由几个方面进行优化:
1.通过将定位信息转换成变量来进一步封装
2.配置log,在必要的地方打log,方便后续调试和排查问题
3.使用allure生成测试报告
4.数据清理
5.参数化
通过将定位信息转换成变量来进一步封装
举一个例子,其他的类也差不多改造下。
HomeScreenPage
class HomeScreenPage(BasePage):
__MALL_MANAGE_SELECT_BUTTON = (By.CSS_SELECTOR, ".el-submenu__title") #封装成参数变量,后面如果有变动,直接修改这些参数即可。
__ITEM_CATEGORY_BUTTON = (By.XPATH, "//*[text()='商品类目']")
def enter_category_page(self):
#点击商场管理
self.do_find(self.__MALL_MANAGE_SELECT_BUTTON).click()
#点击商品类目
self.do_find(self.__ITEM_CATEGORY_BUTTON).click()
# sleep(2)
#-->进入商品类目界面
from page.item_category_page import CategoryPage
return CategoryPage(self.driver)
配置log
创建pytest.ini
log_cli_level = info
addopts = --capture=no
log_cli_format = %(asctime)s [%(levelname)s] %(message)s (%(filename)s:%(lineno)s)
log_cli_date_format = %Y-%m-%d %H:%M:%S
log_file_level = info
log_file_format = %(asctime)s [%(levelname)s] %(message)s (%(filename)s:%(lineno)s)
log_file_date_format = %Y-%m-%d %H:%M:%S
conftest.py里面修改log文件名称
*此部分参考https://www.csdn.net/tags/NtjaMgysMDcxNTgtYmxvZwO0O0OO0O0O.html
import os
import time
now=time.strftime('%Y%m%d_%H%M%S') #以日期时间做报告文件名,'%Y%m%d_%H%M%S'
project_name = "WebTest"
logfile_name=f'{now}_{project_name}.log' #日志文件名
def pytest_configure(config):
# 如果只需要输出log日志只要设置此行就可下方的都删掉就行,意思设置log输出文件目录
config.option.log_file = os.path.join(config.rootdir, 'log', logfile_name)
创建log_utils.py
import logging
logger = logging.getLogger(__name__)
使用:
from utils.log_utils import logger
logger.info("从首页跳转到商品类目页面")
使用allure生成测试报告
加入allure feature story等
@allure.feature("商城测试")
class TestLitemall:
def setup_class(self):
self.home = LoginPage().login()
def teardown_class(self):
self.home.quit()
# 测试步骤:
# 打开网站
# 登录
# 点击商场管理,点击商品类目
# 点击添加
# 填写类目名称
# 点击确认
# 预期结果:
# 存在刚刚创建的类目
@allure.story("添加商品类目成功")
@allure.title("添加用例")
def test_add_item(self):
res = self.home.\
enter_category_page().\
enter_add_category().\
add_category().\
get_result()
allure.attach("/screenshot/sucess_create.png","截图",attachment_type=allure.attachment_type.PNG,extension='.png')
assert res == "创建成功"
数据清理
这里就是指把新增加的商品类目删除
我们加多个方法来操作
def delete_item(self,item_name):
delete_path = f"//div[text()='{item_name}']/../..//span[text()='删除']"
__DELETE_BUTTON = (By.XPATH, delete_path)
logger.info(f"删除按钮的xpath路径为:{__DELETE_BUTTON}")
#点击删除按钮
self.wait_until_located(__DELETE_BUTTON).click()
logger.info(f"已经删除类目:{item_name}")
#返回到商品类目界面
return CategoryPage(self.driver)
然后在case里面添加
def test_add_item(self):
category_name = "test add"
res = self.home.\
enter_category_page().\
enter_add_category().\
add_category(category_name).\
get_success_result()
allure.attach("/screenshot/sucess_create.png","截图",attachment_type=allure.attachment_type.PNG,extension='.png')
assert res == "创建成功"
#数据清理:将新建的item删除
self.home.enter_category_page().delete_item(category_name)
参数化
参数化使用pytest的装饰器parametrize实现
@pytest.mark.parametrize("category_name", ["delete01", "delete02", "delete03"])
def test_delete_item(self,category_name):
# category_name = 'test delete'
res = self.home.enter_category_page().\
enter_add_category().add_category(category_name).\
delete_item(category_name).get_delete_result()
assert res == "删除成功"