之前,通过学习所写得是简单的163自动化登录测试。但是真正实际的项目不可能那么简单的,经过最近的学习和简单的实战项目的操作,小编对前面的例子做了一些调整和修改。
树立了测试框架如下图:
其中增加了测试用例的集成,测试报告输出,自动发送最新的测试报告等功能。
其中test_case目录如下:
其中all_test.py为执行代码块,集成了输出测试报告与自动发送邮件的功能,代码如下:
import unittest
import test_login
from HTMLTestRunner import HTMLTestRunner
import time
import os
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
def new_file():
lists = os.listdir(test_report_dir)
lists.sort(key=lambda fn:os.path.getmtime(test_report_dir+'\\'+fn))
file_path = os.path.join(test_report_dir,lists[-1])
return file_path
def send_email():
f = open(new_file(),'rb')
mail_body = f.read()
# print(mail_body)
f.close()
smtpserver = 'smtp.163.com'
ueser = '[email protected]'
password = '****'
sender = '[email protected]'
receiver = '[email protected]'
subject = '一封自动发送163邮箱测试报告'
msg = MIMEMultipart('mixed')
att = MIMEText(mail_body,'html','utf-8')
att['Content-Type'] = 'application/octet-stream'
att['Content-Disposition'] = 'attachment; filename = "results.html"'
msg.attach(att)
msg['From'] = '[email protected]'
msg['To'] = '[email protected]'
msg['Subject'] =Header(subject,'utf-8')
smtp = smtplib.SMTP()
smtp.connect(smtpserver,25)
smtp.login(ueser,password)
smtp.sendmail(sender,receiver,msg.as_string())
smtp.quit()
if __name__ == '__main__':
test_dir = 'D:\\python\work\\163testcase\\test_case'
discover = unittest.defaultTestLoader.discover(test_dir,pattern='test*.py')
now = time.strftime('%Y-%m-%d %H_%M_%S')
test_report_dir = 'D:\\python\\work\\163testcase\\report'
filename = test_report_dir+'\\'+now+'result.html'
fv = open(filename,'wb')
runner = HTMLTestRunner(stream = fv,title = '163邮箱登陆测试报告',description = '用例执行情况')
runner.run(discover)
fv.close()
send_email()
config.txt: 配置文件。当然url也应该放在这个配置文件里面,因为真实的项目里面很可能会不同的阶段使用不同的URL,到时候不可能一旦url有变还需要去找到代码去全部替换一遍,那得麻烦死。
congfig.txt内容如下。url还有待增加。
xxxxx,*****(xxx:是邮箱的登录账号,***:是邮箱的登陆密码)
read.py: 是用来读取配置文件的,内容如下
#读取配置文件
def read():
f = open('config.txt','r')
fp = f.readlines()
f.close()
users = []
pwds = []
for date in fp:
m,n = date.split(',')
k = m.strip(' \t\r\n')
h = n.strip(' \t\r\n')
users.append(k)
pwds.append(h)
return users,pwds
test_fuhao.py 是其中账号、密码输入特殊字符的测试用例,代码如下
from selenium import webdriver
import time
from public import login
import read
import unittest
class Teshu(unittest.TestCase):
'''登陆等数字符用例'''
def setUp(self):
self.driver = webdriver.Firefox()
self.driver.implicitly_wait(20)
self.url='http://mail.163.com/'
self.verificationErrors = []
#用户名和密码输入特殊字符
def tests_teshu(self):
'''用户名和密码输入特殊字符'''
k = read.read()
driver = self.driver
driver.get(self.url)
time.sleep(2)
username = '$%&^'
pwd = '*&^@&!'
print('case_1的账号:%s 密码是:%s'%(username,pwd))
login.logins(self,username,pwd)
text = driver.find_element_by_id('nerror').text
self.assertEqual(text,'帐号格式错误')
def tearDown(self):
self.driver.quit()
if __name__ == '__main__':
unittest.main()
test_login.py 是登陆的其中四条测试用例,代码如下
from selenium import webdriver
import time
from public import login
import read
import unittest
class TestLogin(unittest.TestCase):
'''邮箱登陆测试用例'''
def setUp(self):
self.driver = webdriver.Firefox()
self.driver.implicitly_wait(20)
self.url='http://mail.163.com/'
self.verificationErrors = []
#正确账号、密码
def test_normal(self):
'''输入正常用户名和密码用例'''
k = read.read()
driver = self.driver
driver.get(self.url)
time.sleep(2)
username = k[0]
pwd = k[1]
print('case_1的账号:%s 密码是:%s'%(username,pwd)) #调试使用
login.logins(self,username,pwd)
time.sleep(5)
#账号、密码为空 请输入帐号
def test_null(self):
'''用户名和密码都为空用例'''
k = read.read()
driver = self.driver
driver.get(self.url)
time.sleep(2)
username =''
pwd = ''
print('case_2的账号:%s 密码为:%s'%(username,pwd))
login.logins(self,username,pwd)
text = driver.find_element_by_id('nerror').text
self.assertEqual(text,'请输入帐号')
time.sleep(2)
#账号为空
def test_username_null(self):
'''用户名为空用例'''
k = read.read()
driver = self.driver
driver.get(self.url)
time.sleep(2)
username = ''
pwd = k[1]
print('case_3的账号:%s 密码为:%s'%(username,pwd))
login.logins(self,username,pwd)
text = driver.find_element_by_id('nerror').text
self.assertEqual(text,'请输入帐号')
time.sleep(2)
#密码为空
def test_pwd_null(self):
'''密码为空用例'''
k = read.read()
driver = self.driver
driver.get(self.url)
time.sleep(2)
username = k[0]
pwd = ''
print('case_4的账号:%s 密码为:%s'%(username,pwd))
login.logins(self,username,pwd)
text = driver.find_element_by_id('nerror').text
self.assertEqual(text,'请输入密码')
time.sleep(2)
def tearDown(self):
self.driver.quit()
if __name__ == '__main__':
unittest.main()
测试报告如下:
全程参照:https://www.cnblogs.com/yufeihlf/p/5752146.html
以及 虫师的《selenium2 python 自动化实战》
感谢!各位路过的大神,小神,有什么问题可以留言相互讨论,有什么建议也希望留言指正。