python+selenium完整的自动化测试163邮箱实战

    之前,通过学习所写得是简单的163自动化登录测试。但是真正实际的项目不可能那么简单的,经过最近的学习和简单的实战项目的操作,小编对前面的例子做了一些调整和修改。

    树立了测试框架如下图:

python+selenium完整的自动化测试163邮箱实战_第1张图片其中增加了测试用例的集成,测试报告输出,自动发送最新的测试报告等功能。

其中test_case目录如下:

python+selenium完整的自动化测试163邮箱实战_第2张图片

其中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()

最终运行all_test.py,结果如下

python+selenium完整的自动化测试163邮箱实战_第3张图片

测试报告如下:

python+selenium完整的自动化测试163邮箱实战_第4张图片

全程参照:https://www.cnblogs.com/yufeihlf/p/5752146.html

以及    虫师的《selenium2 python 自动化实战》

感谢!各位路过的大神,小神,有什么问题可以留言相互讨论,有什么建议也希望留言指正。


你可能感兴趣的:(selenium自动化,python+selenium)