unittest 单元测试框架是受到 JUnit 的启发,与其他语言中的主流单元测试框架有着相似的风格。其支持测试自动化,配置共享和关机代码测试。支持将测试样例聚合到测试集中,并将测试与报告框架独立。
1.目录结构

在一个demo下,我总的这系列的功能分成三个部分:testcase.py自动化测试web网页功能,testreport.py通过HTMLTestRunner.py文件生成HTML格式的测试报告,send_report.py通过邮件发送测试结果
2.编写测试用例testcase.py
from selenium import webdriver
import unittest
import time
class Test_login(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
self.driver.implicitly_wait(15) #隐式等待15秒,找到元素开始执行
self.base_url = "https://xxxx.xxxx.xxxx/login"
#测试登录验证各条件
def test_login_sucess(self):
'''测试用户名,密码登录'''
driver.find_element_by_xpath("//*[@id='app']/div/div/div[2]/div/div[2]/div/div[2]/form/div/div[2]/div/div/input").send_keys('xxxxxxxxxxxx')
time.sleep(0.5)
driver.find_element_by_xpath("//*[@id='app']/div/div/div[2]/div/div[2]/div/div[2]/form/div/div[3]/div/div/input").send_keys('xxxxxxx')
time.sleep(0.5)
driver.find_element_by_xpath("//*[@id='app']/div/div/div[2]/div/div[2]/div/div[2]/form/div/div[4]/div/button").click()
time.sleep(2)
self.assertIn('/sup/homecse', driver.current_url) #断言:获取成功后的网页连接是否存在url中
def test_login_error(self):
'''用户名,密码错误提示信息'''
driver = self.driver
driver.get(self.base_url)
#输入账号
driver.find_element_by_xpath("//*[@id='app']/div/div/div[2]/div/div[2]/div/div[2]/form/div/div[2]/div/div/input").send_keys("xxxxxxxxxx")
time.sleep(0.5)
#输入密码
driver.find_element_by_xpath("//*[@id='app']/div/div/div[2]/div/div[2]/div/div[2]/form/div/div[3]/div/div/input").send_keys('xxxxxx')
time.sleep(0.5)
driver.find_element_by_xpath("//*[@id='app']/div/div/div[2]/div/div[2]/div/div[2]/form/div/div[4]/div/button").click()
time.sleep(2)
result = driver.find_element_by_xpath("//*[@id='app']/div/div/div[2]/div/div[2]/div/div[2]/form/div/div[1]/div").text
print(result)
self.assertIn('帐号或密码错误', result, msg="报错原因:不包含")
def tearDown(self):
self.driver.close()这里测试的一个登录页面的登录功能,主要设置了登录成功和登陆失败两种情况,这里设置了一个Test_login类的success和error两种情况,xpath定位方法定位到输入用户名和密码的位置,然后设置两种不同的情况,看页面登录功能是否完整,并且通过unittest的断言方法,进行判代码的运行情况
3.生成HTML测试报告testreport.py
import HTMLTestRunner
import unittest
from demo.testcase import Baidu
def make_report():
testunit = unittest.TestSuite()
#单个添加测试用例
# testunit.addTest(Baidu('test_login_sucess'))
# testunit.addTest(Baidu('test_login_error'))
#多个添加测试用例
tests = [Baidu('test_login_sucess'), Baidu('test_login_error')]
testunit.addTests(tests)
with open('report/result.html', 'wb+') as fp:
runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title='测试报告', description='测试报告详情', verbosity=2)
runner.run(testunit)
fp.close()
if __name__ == '__main__':
make_report()这里unittest提供了单个添加测试用例和多个添加测试用力的方法,将report/reslut.html文件打开,然后以lib/HTMLTestRunner的运行内容在将测试结果写入result.html,具体安装HTMLTestRunner请参考:unittest---测试报告(HTMLTestRunner / BSTestRunner)_宫崎骏的大胖猫的博客-CSDN博客_unittest 测试报告
4.发送Html测试报告send_report.py
import smtplib
from email.header import Header
from email.mime.text import MIMEText
from demo.testreport import make_report
make_report()#执行测试用例,生成报告
# 第三方 SMTP 服务
mail_host = "smtp.163.com" # SMTP服务器
mail_user = "xxxxxxxxxxxx@163.com" # 用户名
mail_pass = "xxxxxxxx" # 授权密码,非登录密码
# 发件人邮箱(最好写全, 不然会失败)
sender = 'xxxxxxxxxx@163.com'
# 接收邮件,可设置为你的QQ邮箱或者其他邮箱
receivers = ['xxxxxxxxxx@qq.com']
html = open('./report/result.html', 'rb')
content = html.read()
html.close()
title = '测试报告' # 邮件主题
def sendEmail():
message = MIMEText(content, 'html', 'utf-8') # 内容, 格式, 编码
message['From'] = "{}".format(sender)
message['To'] = ",".join(receivers)
message['Subject'] = title
try:
smtpObj = smtplib.SMTP_SSL(mail_host, 465) # 启用SSL发信, 端口一般是465
smtpObj.login(mail_user, mail_pass) # 登录验证
smtpObj.sendmail(sender, receivers, message.as_string()) # 发送
print("mail has been send successfully.")
except smtplib.SMTPException:
print('发送失败')
if __name__ == '__main__':
sendEmail()这里需要获取邮箱的第三方服务SMTP,请自行百度。send_report.py中设置邮件的内容再进行发送。技术不好,虚心请教,死不悔改
版权声明:本文为m0_50574727原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。