unittest框架(惨不忍睹低配版)
根据我上个随笔的unittest框架优化得来,虽然对于smtp模块还是有点迷糊,不过还是勉强搭建运行成功了,还是先上代码:
#login_test.py
import requests
class Login():
def test_login(self,username,password):
url = "http://localhost:8080r/login"
user_pwd = {}
user_pwd["mobilephone"] = username
user_pwd["pwd"] = password
result = requests.get(url, params=user_pwd)
list = (result.text).split(",")
return list[3].split(":")[1].split("}")[0] if __name__ == '__main__':
result = Login()
Return = result.test_login("18688773461","123456")
print(Return)
#data_test.py
from openpyxl import load_workbook
class Date_test():
@classmethod
def Date_test_1(cls):
wb = load_workbook("login_data.xlsx")
ws = wb.get_sheet_by_name("Sheet1")
list1 = []
for i in range(1, ws.max_row + 1):
list = []
for j in range(1, ws.max_column + 1):
str = ws.cell(i, j).value
list.append(str)
list1.append(list)
wb.close()
return list1
@staticmethod
def Email_Date():
username = “username”
password = “password”
To_Email = “To_Email ” # 可以是多个邮箱地址,用“,”分离开
return username,password,To_Email
#test_case.py
from login_test import Login
from ddt import ddt,unpack,data
from data_test import *
import unittest
@ddt
class Run_Test(unittest.TestCase):#继承unittest.TestCase
"""
读取excel文件和cfg文件中数据
:param xlsx:
:param ws:
:return:
"""
@data(*Date_test.Date_test_1())
@unpack
def test_run1(self,Username,Password,Text):
self.Result = Login()
Return = self.Result.test_login(Username,Password)
self.assertEqual(eval(Return),Text)
#测试用例
if __name__ == '__main__':
unittest.main()
#Email_console.py
import HTMLTestRunnerNew
from email.mime.text import MIMEText
from email.header import Header
import smtplib
import unittest
import os
from data_test import *
from email.mime.multipart import MIMEMultipart
class Email_Console():
def __init__(self):
self.username,self.password,self.To_Email= Date_test.Email_Date() def send_main(self,file_new):
"""
发送邮件方法
:param file_new:
:return:
"""
msg = MIMEMultipart("Emaik_TestText")
msg['Subject'] = Header('自动化测试报告', 'utf-8')
msg['From'] = self.username
msg['To'] = self.To_Email
with open(file_new , 'rb') as f:
mail_body = f.read()
msg.attach(MIMEText(mail_body, 'html', 'utf-8')) with open("result.html","rb") as f:
mail_attach = f.read()
att1 = MIMEText(mail_attach, 'base64', 'utf-8')
att1["Content-Type"] = 'application/octet-stream'
att1["Content-Disposition"] = 'attachment; filename="report_test.html"'
msg.attach(att1) try:
smtp = smtplib.SMTP()
smtp.connect("smtp.163.com",25)
smtp.login( self.username,self.password)
smtp.sendmail( self.username, self.To_Email.split(",") , msg.as_string())
smtp.quit()
except Exception as e:
print("Send Email Failed!!!")
raise e def new_report(self,testreport):
"""
生成并查找查找最新测试报告方法
:param testreport:
:return:
"""
# 生成测试用例
fp = open("result.html", 'wb')
runner = HTMLTestRunnerNew.HTMLTestRunner(stream=fp, title='2019年3月28日作业测试报告', description='所有测试情况',
tester="桂马")
discove = unittest.defaultTestLoader.discover(".", pattern="test_*.py")
runner.run(discove)
fp.close()
#查找测试用例
lists = os.listdir(testreport)
lists.sort(key=lambda fn: os.path.getmtime(testreport + "\\" + fn))
file_new = os.path.join(testreport , lists[-1])
print(file_new)
return file_new if __name__ == "__main__":
email_test = Email_Console()
file_path = email_test.new_report(os.getcwd()) #查找新生的报告
email_test.send_main(file_new = file_path) #调用发邮件模块

注意点:
1.message[To]和message[From]虽然网上有的人也是直接上的汉字,但是不知道为啥我这边总报错,反而直接上邮件地址运行相当顺利
2.附上附件的代码写了两次,别问为啥,问就是写一遍会报错,卡这个地方卡了许久,留着疑问待后续解决吧
3.虽然说有些惨不忍睹,不过好歹再加上window的定时运行,然后多添加几行测试用例,一个简陋的不能再简陋的框架就算搭起来了
4.邮件模块果然是块硬骨头,写完博客继续啃
备注:2019年4月1日更新,优化邮件模块
unittest框架(惨不忍睹低配版)的更多相关文章
- Jenkins 结合 Docker 为 .NET Core 项目实现低配版的 CI&CD
随着项目的不断增多,最开始单体项目手动执行 docker build 命令,手动发布项目就不再适用了.一两个项目可能还吃得消,10 多个项目每天让你构建一次还是够呛.即便你的项目少,每次花费在发布上面 ...
- 【Java】利用注解和反射实现一个"低配版"的依赖注入
在Spring中,我们可以通过 @Autowired注解的方式为一个方法中注入参数,那么这种方法背后到底发生了什么呢,这篇文章将讲述如何用Java的注解和反射实现一个“低配版”的依赖注入. 下面是我们 ...
- 【Node/JavaScript】论一个低配版Web实时通信库是如何实现的( WebSocket篇)
引论 simple-socket是我写的一个"低配版"的Web实时通信工具(相对于Socket.io),在参考了相关源码和资料的基础上,实现了前后端实时互通的基本功能 选用了Web ...
- 【JavaScript】论一个低配版Web实时通信库是如何实现的之二( EventSource篇)
前情提要 「 话说上回说到!那WebSocket大侠,巧借http之内力,破了敌阵的双工鸳鸯锁,终于突出重围. 然而玄难未了,此时web森林中飞出一只银头红缨枪,划破夜色. "莫非!?&qu ...
- 搭建react项目(低配版)
react项目低配版,可作为react相关测试的基础环境,方便快速进行测试. git clone git@github.com:whosMeya/simple-react-app.git git ch ...
- 基于canvas和web audio实现低配版MikuTap
导言 最近发掘了一个特别happy的网页小游戏--MikuTap.打开之后沉迷了一下午,导致开发工作没做完差点就要删库跑路了,还好boss瞥了我一眼就没下文了.于是第二天我就继续沉迷,随着一阵抽搐,这 ...
- 搭建一个低配版的Mock Server
mock翻译过来是模仿的意思,Server是服务器.粗暴点直译就是模仿服务器. 写在前面 通过阅读本文,你将对Mock的使用有一定的了解,对前后端分离的概念有了更深一步的认识,对Koa的使用有一定的了 ...
- java线程学习第一天__低配版的卖面包机
package Thread;import javax.xml.bind.ValidationEvent;class snacks{ private int SaledSnacks=0; ...
- Java低配版简单的随机点名系统
import java.util.*; public class Dome{ public static void addSname(String[] students){ Scanner sc = ...
随机推荐
- ArcEngine 调用GP里面的Merge工具
这两天,为ArcEngine中的Merge工具的调试伤头脑筋,明明很简单的事情,就是搞不掂儿.今天忽然想到是否是中文的关系,果然,把中文修改成英文成功了.真是快郁闷死了! public static ...
- React 生命周期及使用场景
对比版本:16.4.0 VS 16.3.0 VS 16.2.0 发现最近几次React版本更改比较大,在为17.0的大版本作准备.总结了一下React生命周期函数的变化. 综合对比图如下: 各版本分别 ...
- Promise.all处理多个异步请求
一个前台页面需要请求2个rest接口获取数据,一个用于解析文件获取列名,一个查询数据库获得列值. 有很低的概率页面显示为空,刷新可能就有显示了. 使用Promise.all就解决了上面的问题,2部分数 ...
- TCP的概念
中间节点.虚电路.失败重传 UDP:不可靠传输,并不承诺提供可靠的连接通道,所传送包完全可能失序.重复甚至丢失. TCP:端口号.三次握手建立可靠连接(第一次确认A端发送和B端接收能力,第二次确认A端 ...
- 实现A-Z滑动检索菜单
我们实现一个A-Z滑动检索菜单,这是一个移动端非常常见的功能,页面效果图如下 在实现代码之前我们先了解下JS滚动事件和滑动事件 scrollTop 一个元素的scrollTop是这个元素的顶部 到 可 ...
- Redlock(redis分布式锁)原理分析
Redlock:全名叫做 Redis Distributed Lock;即使用redis实现的分布式锁: 使用场景:多个服务间保证同一时刻同一时间段内同一用户只能有一个请求(防止关键业务出现并发攻击) ...
- vue+vuex+axios实现登录、注册页权限拦截
1.修改config文件夹里的dev.env.js里的BASE_API,把地址改成请求后端的公共部分 1 BASE_API: '"http://192.168.xx.xx"', 2 ...
- C# 使用NPOI 操作Excel
首先 Nuget 引入NPOI 1.读取Excel /// <summary> /// 读取Excel数据 /// </summary> public static void ...
- C++中字符串换行(如何拆分为多行)
在C/C++语言中,可能我们要书写的一个字符串太长了,放在一行上影响代码的可读性.这时我们就需要多行书写了. 字符串多行书写有两种规则: 1. 在字符串换行处加一个反斜杠’\’,下一行前不能有空 ...
- LeetCode 147. Insertion Sort List 链表插入排序 C++/Java
Sort a linked list using insertion sort. A graphical example of insertion sort. The partial sorted l ...