mail126项目介绍
项目地址:https://pan.baidu.com/s/1G_CgDg8-mOgc4gCmc0gHAg 密码:hnp1
1,项目功能介绍
自动化方式进行126邮箱登录、发送邮件及添加常用联系人
2,使用的框架和技术介绍
框架
自动化框架:seleniumwebdriver
数据驱动:将所有的操作中输入的参数提取到固定文件中,方便维护
关键字驱动:将所有的操作步骤以关键字形式写入文件,读取关键字文件,执行操作步骤
技术
单元测试:unittest
生成测试报告:HTMLTestRunner
python编程:常用数据类型基本使用、面向对象、文件操作、目录操作、包和模块、异常处理、eval方法、编码知识等
selenium webdriver 常用API
3,模块介绍
action模块
login.py文件主要用来执行邮箱登录功能
send_mail.py文件主要用来执行邮箱发送邮件功能
add_contact.py文件主要用来执行邮箱添加常用联系人功能
public_function.py文件提供了以上三个文件的所需公用方法
util模块
mywait.py文件将显示等待封装成函数
read_keyword.py文件读取keyword.data配置文件,调用get_command_line(action_name)
方法得到对应关键字的操作命令。比如传入—login—参数,就会得到登录操作的所有关键字
read_parameter.py:读取参数文件,以固定形式返回参数内容
profile模块
keyword.data:登录、发送邮件、添加常用联系人功能的操作步骤
parameter.txt:登录地址、用户信息
run.py
将登录、发送邮件、添加联系人功能加入测试集、执行测试集生成html测试报告
mail126_report.html
4,项目的目录结构
5,分模块详解源码
见源码注释
mail126/run.py
#coding=utf-8
import unittest
import HTMLTestRunner
from action import *
suit1=unittest.TestLoader().loadTestsFromTestCase(login.TestLogin)
suit2=unittest.TestLoader().loadTestsFromTestCase(add_contact.Add_Contact)
suit3=unittest.TestLoader().loadTestsFromTestCase(send_mail.test_Send_Mail)
suit=unittest.TestSuite([suit1,suit2,suit3])
# unittest.TextTestRunner(verbosity = 2).run(suit)
fp = file('mail126_report.html', 'wb')
runner = HTMLTestRunner.HTMLTestRunner(
stream=fp,
title=u'测试报告',
description=u'测试总结'
)
runner.run(suit)
action模块
action\__init__.py
#由于run.py文件中只导入了action报名,想要访问包中的文件需要在__init__中加入对应文件名
__all__=['login','add_contact','send_mail']
action\__public_fuction.py
#coding=utf-8
from selenium import webdriver
from selenium.common.exceptionsimport NoSuchElementException
global driver
#获取驱动
def get_driver():
return driver
#获取url(打开的浏览器带上默认配置)
def get_url(url,load_time):
global driver
proPath = "C:\Users\libai\AppData\Roaming\Mozilla\Firefox\Profiles\\18uwgrhd.default"
profile =webdriver.firefox.firefox_profile.FirefoxProfile(proPath)
profile.set_preference("browser.startup.homepage", url)
profile.set_preference("browser.startup.page", 1)
# 启动带自定义配置文件的Firefox浏览器
driver =webdriver.Firefox( firefox_profile=profile)
driver.set_page_load_timeout(load_time)
try:
driver.get(url)
except Exception,e:
print '%s页面加载超时' %url
#切换frame
def switch_to_frame(id_or_name=None,xpath=None):
try:
if xpath is None:
driver.switch_to.frame(id_or_name)
elif id_or_name is None:
driver.switch_to.frame(driver.find_element_by_xpath(xpath))
except NoSuchElementException,e:
print '没有找到frame'
print e
#切出frame
def switch_out_frame():
driver.switch_to.default_content()
def input(xpath,content):
try:
element=driver.find_element_by_xpath(xpath)
except NoSuchElementException,e:
print '找不到元素:%s' %xpath
print e
element.clear()
element.send_keys(content)
#点击元素
def click(xpath):
try:
driver.find_element_by_xpath(xpath).click()
except NoSuchElementException,e:
print '找不到元素:%s' %xpath
print e
#element.click()
#断言
def AssertKeyword(contant):
try:
assert contant in driver.page_source
except AssertionError,e:
print '断言失败'
print e
#设置等待时间(死等)
def si_wait(second):
import time
time.sleep(second)
#设置智能等待
def implicitly_wait(second):
driver.implicitly_wait(second)
#获取网页内容
def get_page_source():
return driver.page_source
#退出浏览器
def quit():
# global driver
driver.quit()
action\__login.py
#coding=utf-8
from mail126.util.read_parameterimport *
from mail126.util.mywaitimport *
from mail126.util.read_keywordimport *
from mail126.action.public_functionimport *
import unittest
class TestLogin(unittest.TestCase):
def setUp(self):
#获取登录的关键字
self.login_command=get_command_line('--login--')
def test1(self):
print 'aaa'
#@unittest.skip('skipping')
def test_login(self):
#导入显示等待封装类
wait=MyWait()
#将每行内容以回车符切割放到list中逐行获取
for line in self.login_command.strip().split('\n'):
data=line.strip().split('||')
#分别判断每行关键字中有几个参数,根据参数个数的不同,得到不同的命令
if len(data)==1:
command='%s()' %data[0]
elif len(data)==2:
command='%s(%s)' %(data[0],data[1].decode('utf-8'))
elif len(data)==3:
command='%s(%s,%s)' %(data[0],data[1],data[2])
elif len(data)==4:
command='%s(%s,%s,%s)' %(data[0],data[1],data[2],data[3])
if isinstance(command,str):
print command.decode('utf-8')
else:
print command
#执行命令
eval(command)
if __name__=='__main__':
unittest.main()
action\__add_contact.py
#coding=utf-8
from login import *
import unittest
from mail126.util.read_keywordimport *
from mail126.util.mywaitimport *
class Add_Contact(unittest.TestCase):
def setUp(self):
self.add_contact_command=get_command_line('--add_contact--')
def test2(self):
print 'bbb'
#@unittest.skip('skipping')
def test_add_contact(self):
wait=MyWait()
for line in self.add_contact_command.strip().split('\n'):
data=line.strip().split('||')
if len(data)==1:
command='%s()' %data[0]
elif len(data)==2:
command='%s(%s)' %(data[0],data[1].decode('utf-8'))
elif len(data)==3:
command='%s(%s,%s)' %(data[0],data[1],data[2].decode('utf-8'))
elif len(data)==4:
command='%s(%s,%s,%s)' %(data[0],data[1],data[2],data[