代码的目录结构如下:
测试的对象是本地安装的禅道系统:
测试的结果如下:
以下是测试代码:
driver.py
from selenium import webdriver
'''启动不同的浏览器启动'''
def browser():
driver=webdriver.Chrome("D:\Google\Chrome\Application\chromedriver.exe")
# driver=webdriver.Firefox()
# driver=webdriver.ie()
# driver.get('http://www.baidu.com')
return driver
if __name__ == '__main__':
browser()
function,py
'''工具方法模块(截图,查找最新报告、邮件发送)'''
import os
import time
from selenium import webdriver
import smtplib #发送邮件模块
from email.mime.text import MIMEText #定义邮件内容
from email.header import Header #定义邮件标题
#截图方法
def insert_img(driver,filename):
# 获取当前模块所在路径
print(__file__)
func_path=os.path.dirname(__file__)
print('func_path is %s'%func_path)
#获取上一级目录
base_dir=os.path.dirname(func_path)
print("base_dir is %s" %base_dir)
base_dir=str(base_dir)
print(base_dir)
# 获取项目文件的根目录路径
base=base_dir.split('/website')[0]
print(base)
# 指定截图存放路径
filepath=base+'/website/test_report/report/'+filename
print(filepath)
driver.get_screenshot_as_file(filepath)
def latest_report(report_dir):
lists=os.listdir(report_dir)
print(lists)
lists.sort()
print('file is :%s'%lists[-1])
file=os.path.join(report_dir,lists[-1])
fi=str(file)
print('latest file is: %s'%fi)
return file
#将测试报告发送到邮件
def send_email(latest_report):
print('func_py latest report is %s'%latest_report)
f=open(latest_report,'rb')
mail_content=f.read()
# 发送邮箱服务器
smtpserver = 'smtp.163.com
# 发送邮箱用户名密码
user = '*********@163.com'
password = '********'
# 发送和接收邮箱
sender = '*****@163.com'
receives = [ '****@qq.com']
# 发送邮件主题和内容
subject = '自动化测试报告邮箱发送'
msg = MIMEText(mail_content,'html','utf-8')
msg['Subject'] = Header(subject,'utf-8')
msg['From'] = sender
msg['To'] = ','.join(receives)
smtp = smtplib.SMTP_SSL(smtpserver, 465)
smtp.helo(smtpserver)
smtp.ehlo(smtpserver)
smtp.login(user, password)
print("Start send email..." )
# smtp.sendmail(sender,receives,msgRoot.as_string())
smtp.sendmail(sender, receives, msg.as_string())
smtp.quit()
print("Send email end!")
if __name__ == '__main__':
# send_multi_email()
driver = webdriver.Chrome("D:\Google\Chrome\Application\chromedriver.exe")
driver.get("http://www.sogou.com")
time.sleep(2)
insert_img(driver, "sogou.png")
driver.close()
myuint.py
import unittest
from driver import driver
'''用例运行前后的环境准备工作'''
class StartEnd(unittest.TestCase):
def setUp(self):
self.driver=driver.browser()
self.driver.implicitly_wait(10)
self.driver.maximize_window()
def tearDown(self):
self.driver.close()
BasePage.py
'''页面基类'''
from time import sleep
class Page():
def __init__(self,driver):
self.driver=driver
self.base_url='http://127.0.0.1:8080/'
self.timeout=20
def _open(self,url):
url_=self.base_url+url
print('url is %s'%url_)
self.driver.maximize_window()
self.driver.get(url_)
sleep(2)
assert self.driver.current_url == url_,'did not land on %s'%url_
def open(self):
self._open(self.url)
def find_element(self,*loc):
return self.driver.find_element(*loc)
login_page.py
from BasePage import *
from selenium import webdriver
from selenium.webdriver.common.by import By
class Login_Page(Page):
'''登录页面'''
url='zentao/user-login.html'
# 定位器——对相关元素进行定位
username_loc=(By.ID,'account')
password_loc=(By.NAME,'password')
submit_loc=(By.ID,'submit')
def type_username(self,uname):
self.find_element(*self.username_loc).clear()
self.find_element(*self.username_loc).send_keys(uname)
def type_password(self,pw):
self.find_element(*self.password_loc).clear()
self.find_element(*self.password_loc).send_keys(pw)
def click_submit(self):
self.find_element(*self.submit_loc).click()
def login_action(self,uname,pw):
self.open()
self.type_username(uname)
self.type_password(pw)
self.click_submit()
Login_pass_loc=(By.ID,'companyname')
Login_fail_loc=(By.LINK_TEXT,'忘记密码')
def type_login_pass_hint(self):
return self.find_element(*self.Login_pass_loc).text
def type_login_fail_hint(self):
return self.find_element(*self.Login_fail_loc).text
# if __name__=='__main__':
# driver=webdriver.Chrome("D:\Google\Chrome\Application\chromedriver.exe")
# po=Login_Page(driver)
# po.login_action('admin','Aa1234')
test_login.py
'''
• 用户名密码正确点击登录
• 用户名正确,密码错误点击登录
• 用户名和密码为空点击登录
'''
import unittest
from website.testcase.model import function,myuinit
from website.testcase.page_object.login_page import *
from time import sleep
class LoginTest(myuinit.StartEnd):
def test_login1_normal(self):
'''用户名、密码正确'''
print("test_login1_normal is start run...")
po=Login_Page(self.driver)
po.login_action('admin','Aa1234')
sleep(3)
self.assertEqual(po.type_login_pass_hint(),'易软天创项目管理系统')
function.insert_img(self.driver,'login_success.png')
print("test_login1_normal is test end!")
@unittest.skip('skp this case')
def test_login2_password_error(self):
'''用户名正确,密码错误'''
print("test_login1_password error is start run...")
po=Login_Page(self.driver)
po.login_action('admin','Aa123456')
sleep(3)
self.assertEqual(po.type_login_pass_hint(),'易软天创项目管理系统')
function.insert_img(self.driver,'login_success.png')
print("test_login1_normal is test end!")
@unittest.skip('skip this case')
def test_login3_empty(self):
'''用户名、密码为空'''
print("test_login1_normal is start run...")
po=Login_Page(self.driver)
po.login_action('admin','Aa1234')
sleep(3)
self.assertEqual(po.type_login_pass_hint(),'易软天创项目管理系统')
function.insert_img(self.driver,'login_success.png')
print("test_login1_normal is test end!")
if __name__=='__main__':
unittest.main()