环境部署
自动化工具:selenium + webdriver
脚本语言为:Python3.x
浏览器:Chrome
系统环境:window7
编译工具:Pycharm
基本目录架构
- Business:测试业务抽象流程(url登录操作)
- Common:项目相关的抽象通用代码,与测试业务无关
- Test_Case:测试用例
- Test_Data:存放数据层的数据文件(账号密码,搜索内容等)
- Test_Suite组织测试套件(组装不执行)
- run.py 执行测试用例统一运行入口
- report:测试报告的目录
- tools:测试中使用的一些工具
web测试登录用例
创建一个test开头的测试用例py
#引入测试框架模块
import unittest
#引入web驱动模块
from selenium import webdriver
#引入封装的url
from Business.base_url import url_index
# ddt引入数据驱动
from HTMLReport import ddt
# 引入读取文件函数
from Common.tools.read_data import read_txt
# 打印日志
import logging
# 截图
from HTMLReport import addImage
from Common.selenium_tools import get_driver
from Business.bs_login import login
#数据驱动装饰器
@ddt.ddt
class TestLogin(unittest.TestCase):
"""登录测试用例类
1. 打开浏览器
2. 打开网站
3. 进入登录页
4. 输入{用户名}
5. 输入{密码}
6. 点击登录按钮
7. {断言}
8. 关闭浏览器
"""
def setUp(self) -> None:
'''测试前执行'''
# 打开浏览器
self.driver = get_driver()
pass
def tearDown(self) -> None:
'''测试后执行'''
'''关闭浏览器'''
self.driver.quit()
logging.info(f'关闭浏览器:{self.driver.name}')
pass
# 捡多个包
@ddt.unpack
# 解包裹
@ddt.data(
# 解包
*read_txt("Test_Data/login_user_password")
)
# 用例test开头
def test_login(self, username, password, assert_type):
'''
登录测试用例
:param username: 用户名
:param password: 密码
:param assert_type: 断言类型
1.成功,2.密码错误,3.密码空,4.用户名空
:return:
'''
# 调用登录操作
login(self.driver,username,password)
if assert_type == '1':
# 获取登录成功欢迎页
text = self.driver.find_element_by_id('ECS_MEMBERZONE').text
logging.info(f'获取登录成功欢迎信息:{text}')
self.assertIn('您好', text)
self.assertIn('欢迎来到', text)
self.assertIn('退出', text)
elif assert_type == '2':
text = self.driver.find_element_by_xpath("//*[contains(@class,'icon-minus-sign')]/..").text
self.assertIn('用户名或密码错误', text)
logging.info(f'获取失败警告信息:{text}')
elif assert_type == "3":
text = self.driver.find_element_by_xpath('//*[contains(@class,"icon-minus-sign")]/..').text
logging.info(f'获取失败警告信息:{text}')
self.assertIn("请输入密码", text)
elif assert_type == "4":
text = self.driver.find_element_by_xpath('//*[contains(@class,"icon-minus-sign")]/..').text
logging.info(f'获取失败警告信息:{text}')
self.assertIn("请输入用户名", text)
pass
else:
raise ValueError(f'错误断言类型:{assert_type}')
方法封装,封装一些使用频繁的方法
封装存放的网页(Business)
'''存放网页'''
url_index = 'http://192.168.2.253/dsc/'
封装点击登录用例的操作(Business)
from Business.base_url import url_index
from HTMLReport import addImage
import logging
# driver的祖先,谷歌也是继承与它
from selenium.webdriver.remote.webdriver import WebDriver
def login(driver:WebDriver,username,password):
'''
登录测试用例
:param username: 用户名
:param password: 密码
:param assert_type: 断言类型
1.成功,2.密码错误,3.密码空,4.用户名空
:return:
'''
# 2. 打开网站
logging.info(f'打开网站:{url_index}')
driver.get(url_index)
addImage(driver.get_screenshot_as_base64(), '打开网站',
f'打开网站:{driver.current_url}')
# 3. 进入登录页
logging.info('进入登录页')
driver.find_element_by_link_text('请登录').click()
# 4. 输入{用户名}
logging.info(f'输入用户名:{username}')
driver.find_element_by_id('username').send_keys(username)
# 5. 输入{密码}
logging.info(f'输入密码:{password}')
driver.find_element_by_id('nloginpwd').send_keys(password)
# 6. 点击登录按钮
logging.info(f'点击登录按钮')
driver.find_element_by_id('loginSubmit').click()
封装加载网页方法(Common--tools)
# 网页驱动
from selenium import webdriver
# 加载
import logging
def get_driver():
'''
获取一个浏览器对象
:return:driver
'''
# 使用hub远程操作 打开浏览器
driver = web