Python+Selenium+Unittest+HTMLTestRunner生成测试报告+发送至邮箱,记一次完整的cnblog登录测试示例,

时间:2023-01-08 16:52:36

测试思路:单个测试集、单个测试汇成多个测试集、运行测试集、生成测试报告、发送至邮箱。

第一步:建立单个测试集,以cnblog登录为例。

测试用例:

cnblog的登录测试,简单分下面几种情况:
(1)用户名、密码正确
(2)用户名正确、密码不正确
(3)用户名正确、密码为空
(4)用户名错误、密码正确
(5)用户名为空、密码正确

头文件:

import unittest
from selenium import webdriver
import time
 #coding:utf-8
import unittest
from selenium import webdriver
import time class Test(unittest.TestCase):
@classmethod
def setUpClass(cls):
print("开始测试")
@classmethod
def tearDownClass(cls):
print("结束测试")
def setUp(self):
print("开始单个测试用例")
def tearDown(self):
print("结束单个测试用例")
# 定义登录方法
def login(self, username, password):
self.dr = webdriver.Firefox()
self.dr.get('https://passport.cnblogs.com/user/signin') # cnblog登录页面
self.dr.find_element_by_id('input1').send_keys(username)
self.dr.find_element_by_id('input2').send_keys(password)
self.dr.find_element_by_id('signin').click() def test_login_success(self):
'''用户名、密码正确'''
self.login('木xxxx', 'sxxxxx') # 正确用户名和密码
time.sleep(10) #这里等待10秒的原因是由于cnblog存在验证机制,不想在验证码上花过多时间写代码,博主在等待时间手动处理。
link = self.dr.find_element_by_id('lnk_current_user')
self.assertTrue('木秀于林' in link.text) # 用assertTrue(x)方法来断言 bool(x) is True 登录成功后用户昵称在lnk_current_user里 def test_login_pwd_error(self):
'''用户名正确、密码不正确'''
self.login('木秀xxx', 'pwerror') # 正确用户名,错误密码
time.sleep(10) #这里等待10秒的原因是由于cnblog存在验证机制,不想在验证码上花过多时间写代码,博主在等待时间手动处理。
error_message = self.dr.find_element_by_id('tip_btn').text
self.assertIn('用户名或密码错误', error_message) # 用assertIn(a,b)方法来断言 a in b '用户名或密码错误'在error_message里
self.dr.get_screenshot_as_file("F:\\login_pwd_error.jpg") def test_login_pwd_null(self):
'''用户名正确、密码为空'''
self.login('木秀xxx', '') # 密码为空
error_message = self.dr.find_element_by_id('tip_input2').text
self.assertEqual(error_message, '请输入密码') # 用assertEqual(a,b)方法来断言 a == b 请输入密码等于error_message
self.dr.get_screenshot_as_file("F:\\login_pwd_null.jpg") def test_login_user_error(self):
'''用户名错误、密码正确'''
self.login('usernameerror', 'sxxxxxxx') # 密码正确,用户名错误
time.sleep(10) #这里等待10秒的原因是由于cnblog存在验证机制,不想在验证码上花过多时间写代码,博主在等待时间手动处理。
error_message = self.dr.find_element_by_id('tip_btn').text
self.assertIn('用户名或密码错误', error_message) # 用assertIn(a,b)方法来断言 a in b
self.dr.get_screenshot_as_file("F:\\login_user_error.jpg") def test_login_user_null(self):
'''用户名为空、密码正确'''
self.login('', 'sunsea1.') # 用户名为空,密码正确
error_message = self.dr.find_element_by_id('tip_input1').text
self.assertEqual(error_message, '请输入登录用户名') # 用assertEqual(a,b)方法来断言 a == b
self.dr.get_screenshot_as_file("F:\login_user_null.jpg") if __name__=="__main__":
unittest.main()

第二步,建立多个测试用例集

test02.py为第一步建立的单个测试集

test01.py/test03.py/test04.py 为示例测试集

test01.py代码如下:

 #coding:utf-8
import unittest
import time class Test(unittest.TestCase):
@classmethod
def setUpClass(cls):
print("开始测试")
def tearDown(self):
print("测试结束")
def test01(self):
'''测试0201'''
print("执行测试用例1")
def test02(self):
'''测试0202'''
print("执行测试用例02") if __name__=="__main__":
unittest.main()

测试集结构图如下

Python+Selenium+Unittest+HTMLTestRunner生成测试报告+发送至邮箱,记一次完整的cnblog登录测试示例,

第三步 将所有多个测试集联合起来,一起执行并生成测试报告html文档

在logintest文档下方建立run_all_case.py

头文件:

import unittest
import HTMLTestRunner
from send_email import main2 #这是自己写的发送邮件函数
 #coding:utf-8
import unittest
import os
import HTMLTestRunner
from send_email import main2
#待执行用例的目录
def allcase():
case_dir=r"F:\logintest\case"
#case_path=os.path.join(os.getcwd(),"case")
testcase=unittest.TestSuite()
discover=unittest.defaultTestLoader.discover(case_dir,
pattern='test*.py',
top_level_dir=None)
#discover方法筛选出来的用例,循环添加到测试套件中
#print(discover)
for test_suite in discover:
for test_case in test_suite:
#添加用例到testcase
print(test_case)
testcase.addTest(test_case)
return testcase if __name__=="__main__":
# runner=unittest.TextTestRunner()
# runner.run(allcase())
report_path="F:\\result.html"
fp=open(report_path,"wb")
runner=HTMLTestRunner.HTMLTestRunner(stream=fp,
title="自动化测试unittest测试框架报告",
description="用例执行情况:") runner.run(allcase())
fp.close()
#main2() #from send_email import main2 发送邮件!

第四步:发送邮件,send_email.py

 import smtplib
import os.path as pth
import time
from email.mime.text import MIMEText
from email.header import Header def sendEmail(content, title, from_name, from_address, to_address, serverport, serverip, username, password):
msg = MIMEText(content, _subtype='html', _charset='utf-8')
msg['Subject'] = Header(title, 'utf-8')
# 这里的to_address只用于显示,必须是一个string
msg['To'] = ','.join(to_address)
msg['From'] = from_name
try:
s = smtplib.SMTP_SSL(serverip, serverport)
s.login(username, password)
# 这里的to_address是真正需要发送的到的mail邮箱地址需要的是一个list
s.sendmail(from_address, to_address, msg.as_string())
print('%s----发送邮件成功' % time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
except Exception as err:
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
print(err)
#HEFEN_D = pth.abspath(pth.dirname(__file__)) def main2():
TO = ['864xxxxxxxxx2@qq.com']
config = {
"from": "69xxxxxxxx2@qq.com",
"from_name": '自动化测试unittest测试框架报告:',
"to": TO,
"serverip": "smtp.qq.com",
"serverport": "",
"username": "694xxxxxxx@qq.com",
"password": "xxxxxxxxxxxx" # QQ邮箱的SMTP授权码
} title = "自动化测试unittest测试框架报告"
f = open("F://result.html", 'rb')
mail_body = f.read()
f.close()
sendEmail(mail_body, title, config['from_name'], config['from'], config['to'], config['serverport'], config['serverip'],
config['username'], config['password']) #main2()

最后,邮件效果图和html报告如下:

Python+Selenium+Unittest+HTMLTestRunner生成测试报告+发送至邮箱,记一次完整的cnblog登录测试示例,

Python+Selenium+Unittest+HTMLTestRunner生成测试报告+发送至邮箱,记一次完整的cnblog登录测试示例,

咦!失败了一个。查看截图发现,博客园当用户名错误时,提示的是:用户名不存在,测试用例的预期值是:用户名或密码错误

Python+Selenium+Unittest+HTMLTestRunner生成测试报告+发送至邮箱,记一次完整的cnblog登录测试示例,Python+Selenium+Unittest+HTMLTestRunner生成测试报告+发送至邮箱,记一次完整的cnblog登录测试示例,

分析:

用户名或密码错误时都不能直接提示用户名错误、密码错误。要含蓄的提示用户名或密码错误,cnblog当用户名错误时提示:用户名不存在,密码错误时:提示 用户名或密码错误,当提示用户名或密码错误时,

也就是用户名实际是正确的,再单方面通过破解密码即可破解账户

提示算是一个安全漏洞,不写了,博主得给cnblog提bug去了

Python+Selenium+Unittest+HTMLTestRunner生成测试报告+发送至邮箱,记一次完整的cnblog登录测试示例,的更多相关文章

  1. Python 3+selenium+unittest+HTMLTestRunner生成测试报告

    一.下载HTMLTestRunner.py,解压,将它放到 python安装路径的site-packages目录下 https://pan.baidu.com/s/1epWlibxbxWlNoIcxL ...

  2. Python&Selenium借助HTMLTestRunner生成自动化测试报告

    一.摘要 本篇博文介绍Python和Selenium进行自动化测试时,借助著名的HTMLTestRunner生成自动化测试报告 HTMLTestRunner.py百度很多,版本也很多,自行搜索下载放到 ...

  3. Python&Selenium借助html-testRunner生成自动化测试报告

    一.摘要 本博文将介绍Python和Selenium进行自动化测试时,借助html-testRunner 生成自动化测试报告 安装命令:pip install html-testRunner 二.测试 ...

  4. Python Selenium unittest+HTMLTestRunner实现 自动化测试及发送测试报告邮件

    1.UI测试框架搭建-目录结构 2. 文件介绍 2.1.baseinfo->__init__.py 配置文件定义基础参数 #-*-coding:utf-8-*- #测试用例配置参数 base_u ...

  5. Python+selenium+unittest+HTMLTestReportCN单元测试框架分享

    分享一个比较基础的,系统性的知识点.Python+selenium+unittest+HTMLTestReportCN单元测试框架分享 Unittest简介 unittest是Python语言的单元测 ...

  6. Python+Selenium+Unittest+Ddt+HTMLReport分布式数据驱动自动化测试框架结构

    1.Business:公共业务模块,如登录模块,可以把登录模块进行封装供调用 ------login_business.py from Page_Object.Common_Page.login_pa ...

  7. Pycharm使用python3无法通过HTMLTestRunner生成测试报告《转载》

    Pycharm使用python3无法通过HTMLTestRunner生成测试报告: https://blog.csdn.net/weixin_38981172/article/details/8238 ...

  8. 一次完整的自动化登录测试-基于python+selenium进行cnblog的自动化登录测试

    Web登录测试是很常见的测试!手动测试大家再熟悉不过了,那如何进行自动化登录测试呢!本文作者就用python+selenium结合unittest单元测试框架来进行一次简单但比较完整的cnblog自动 ...

  9. 一次简单完整的自动化登录测试-基于python+selenium进行cnblog的自动化登录测试

    Web登录测试是很常见的测试,手动测试大家再熟悉不过了,那如何进行自动化登录测试呢!本文就基于python+selenium结合unittest单元测试框架来进行一次简单但比较完整的cnblog自动化 ...

随机推荐

  1. ASP------ActioinResult之多种返回值

    转载: http://www.cnblogs.com/jiagoushi/archive/2013/01/24/2875454.html http://www.cnblogs.com/lvcha/ar ...

  2. Android Studio JNI/NDK 编程(二) Windows 下环境搭建 demo 开发

    环境 windows 8  (注:其实 Linux 开发可能更方便) Android Studio 2.1; 一 . 下载 安装android-ndk开发包 地址:链接:http://pan.baid ...

  3. mkdir、whoami、touch

    mkdir whoami touch:"摸",如果文件不存在,就建立新文件,如果存在,就改变文件的访问时间atime等时间戳信息. mkdir aa ls –ld aa 创建多级目 ...

  4. Builder 模式

    Builder 模式和 AbstractFactory 模式在功能上很相似,因为都是用来创建大的复杂的对象,它们的区别是:Builder 模式强调的是一步步创建对象,并通过相同的创建过程可以获得不同的 ...

  5. jdbc select

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...

  6. SQL Server 无法启动的 4 种原因

    SQL Server 无法启动的原因定位.首先要知道SQL Server 启动的过程. 第一步: 读取注册表,创建log文件.检测硬件.初始化系统配置. 第二步: 启动系统数据库. 第三步: 准备好网 ...

  7. [hadoop] - Container [xxxx] is running beyond physical/virtual memory limits.

    当运行mapreduce的时候,有时候会出现异常信息,提示物理内存或者虚拟内存超出限制,默认情况下:虚拟内存是物理内存的2.1倍.异常信息类似如下: Container [pid=13026,cont ...

  8. 表达式求值(栈方法/C++语言描述)(二)

    上篇中完成了对表达式求值的整体过程,接下来看看如何处理不同类型的token. 对运算数的处理比较简单,它直接调用函数strtod(),将字符串中的运算数转换为浮点类型并将它压入运算数栈中: void ...

  9. hdu 3473 划分树

    Minimum Sum Time Limit: 16000/8000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tot ...

  10. Software Testing 3

    Questions: • 7. Use the following method printPrimes() for questions a–d. 基于Junit及Eclemma(jacoco)实现一 ...