模块1 :getdata.py 读取测试用例test_case.xlsx,返回测试用例结果

import json
from openpyxl import load_workbook
class DoExcel:
"""
:get_data 读取execl中的测试数据
:write_data 将测试结果写入excel中
""" def get_data(self):
"""读取excel中的登录信息存储到列表中"""
wb = load_workbook("test_case.xlsx")
sheet = wb["test_case"] login_data=[]
print(sheet.max_row) for row in range(2,sheet.max_row+1):
user={"url":sheet.cell(row,5).value,
"method":sheet.cell(row,4).value,
# "data": sheet.cell(row, 6).value,
"data": json.loads(sheet.cell(row, 6).value),
"exp_result":sheet.cell(row,7).value,
"case_id": sheet.cell(row, 1).value
}
login_data.append(user)
wb.close()
return login_data def write_result(self,row,result):
"""将测试结果返回到excel中"""
wb = load_workbook("test_case.xlsx")
sheet = wb["test_case"]
sheet.cell(row,8,result)
wb.save("test_case.xlsx")
wb.close()
if __name__ == '__main__':
res=DoExcel().get_data()
print(res)

模块2 :httprq.py 获取login的请求信息

import  requests
class HttpRequest:
"""完成http的get请求或post请求
:method 请求方法 可以是get or post
:url 请求地址
:data 请求参数,字典的格式 """
def http_request(self,url,method,data):
if method.lower()=="get":
return requests.get(url,params=data)
elif method.lower()=="post":
return requests.post(url,data=data) if __name__ == '__main__':
t=HttpRequest().http_request("http://47.107.168.87:8080/futureloan/mvc/api/member/login",
"get",
{"mobilephone":"", "pwd":123456})
print(t.json())
print(t.text)

模块3 :logintest.py 编写测试用例

import unittest

from ddt import ddt, data, unpack
from httprq import HttpRequest
from homework.ddt_20190323.unittest_ddt_exl_http_request.getdata import * @ddt
class Testlogin(unittest.TestCase):
"""通过ddt将excel中获取的数据循环赋值到data"""
@data(*DoExcel().get_data())
@unpack
def test_httprq(self,method,data,url,exp_result,case_id):#方法名必须以test开头
res=HttpRequest().http_request(url,method,data).json()#http请求的实际值
try:
self.assertEqual(exp_result,res["msg"])#断言,实际值与预期值进行对比
row=case_id+1
DoExcel().write_result(row,"pass") #通过,excel中返回pass
except Exception as e:#捕获异常
row=case_id+1
DoExcel().write_result(row,"fail")#不通过,excel中返回fail
raise Exception #抛出异常

模块4 :runtest.py 执行测试用例,生成测试报告

import unittest
from homework.ddt_20190323.unittest_ddt_exl_http_request import testlogin
import HTMLTestRunnerNew
class RunCase:
"""
:test_suite_html 执行测试用例后生成html的测试报告
:test_suite_module 按test_module来执行测试用例
:test_suite_testcase 按照测试用例类来执行测试用例
""" def test_suite_html(self):
"""
测试步骤:新建一个用例收集器
新建一个用例加载器
suit.addTest()通过加载测试模块来收集用例
新建一个html文档来存放测试报告 :return:
"""
suite=unittest.TestSuite()
loader=unittest.TestLoader()
suite.addTest(loader.loadTestsFromModule(testlogin)) with open ("login_http.html","wb") as file:
runner=HTMLTestRunnerNew.HTMLTestRunner(stream=file,
verbosity=2,#生成报告级别
title="login测试报告",
description="验证登录是否成功",
tester="七月")#创建一个对象来执行测试用例
runner.run(suite)#执行收集器中的所有测试用例 def test_suite_module(self):
suite=unittest.TestSuite()#用例收集器
loader=unittest.TestLoader()#用例加载器
runner=unittest.TextTestRunner(verbosity=0)#用例执行器
suite.addTest(loader.loadTestsFromModule(testlogin))#收集测试用例
runner.run(suite)#执行测试用例
if __name__ == '__main__':
RunCase().test_suite_html()
# RunCase().test_suite_module()

5、sendemail.py发送测试报告邮件

import smtplib

from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
from configparser import ConfigParser
from email.mime.image import MIMEImage class SendMail:
def sent_mail(self):
# 第三方smtp服务
mail_host = "smtp.qq.com" # 设置服务器 # 获取发件箱的登录名,登录密码
cp=ConfigParser()
cp.read("user_pwd.config",encoding="utf-8")
mail_user = cp.get("userinfo","emailname")
mail_pass = cp.get("userinfo","emailpwd") # 配置文件中获取发件地址,收件地址
sender=cp.get("userinfo","emailname")
receivers=[cp.get("userinfo","emailname")] # 创建一个带附件,带图片的邮件实例,添加邮件主题,发件人,收件人
message=MIMEMultipart("mixed")
subject = "Python SMTP 邮件测试"
message["Subject"] = Header(subject,"utf-8")
message["From"] = Header("七月","utf-8")
message["To"] = Header("七月","utf-8") # 添加附件1、test_case.xlsx
with open("test_case.xlsx","rb") as attach_msg1:
attach1 = MIMEText(attach_msg1.read(),"plain","utf-8")
attach1["Content-Type"] = "application/octet-stream"
attach1["Content-Disposition"] = "attachment;filename='test_case.xlsx'"
message.attach(attach1) # 添加附件2、login_http.html
with open("login_http.html", "rb") as attach_msg2:
attach2 = MIMEText(attach_msg2.read(), "html", "utf-8")
attach2["Content-Type"] = "application/octet-stream"
attach2["Content-Disposition"] = "attachment;filename='login_http.html'"
message.attach(attach2) # 添加邮件正文
with open("login_http.html", "rb") as attach_msg2:
mail_msg =attach_msg2.read()
message_con = MIMEText(mail_msg, "html", "utf-8")
message.attach(message_con) try:
server = smtplib.SMTP(mail_host,25) # 创建邮件服务商
server.login(mail_user,mail_pass) # 登录邮箱
server.sendmail(sender,receivers,message.as_string()) # 发送邮件
print("邮件发送成功")
except smtplib.SMTPException :
print("Error:邮件发送失败")
if __name__ == '__main__':
SendMail().sent_mail()

unittest 框架-待优化的更多相关文章

  1. unittest框架(惨不忍睹低配版)

    根据我上个随笔的unittest框架优化得来,虽然对于smtp模块还是有点迷糊,不过还是勉强搭建运行成功了,还是先上代码: #login_test.py import requests class L ...

  2. selenium + python自动化测试unittest框架学习(二)

    1.unittest单元测试框架文件结构 unittest是python单元测试框架之一,unittest测试框架的主要文件结构: File >report >all_case.py &g ...

  3. python+unittest框架第一天unittest之简单认识Test Fixure:测试固件【8月17更新】

    20万的慢慢会实现的吧,hhh unittest框架,我就不在介绍了,百度有很详细的介绍. 我们只要了解: 1.unittest是单元测试框架 2.它提供用例组织与执行:在实际工作中案例可能有上百条, ...

  4. selenium-webdriver(python) (十六) --unittest 框架

    学习unittest 很好的一个切入点就是从selenium IDE 录制导出脚本.相信不少新手学习selenium 也是从IED 开始的. IDE学习参考: 菜鸟学自动化测试(一)----selen ...

  5. Selenium2+python自动化30-引入unittest框架

    from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.com ...

  6. unittest 框架

    unittest 框架 学习unittest 很好的一个切入点就是从selenium IDE 录制导出脚本.相信不少新手学习selenium 也是从IED 开始的. IDE学习参考: 菜鸟学自动化测试 ...

  7. unittest框架概要

    unittest是Python语言自带的单元测试框架,原名PyUnit. 认识unittest 在unittest框架中有4个重要概念:test fixture.test case.test suit ...

  8. 接口登录CSDN发布博客---封装方法,使用unittest框架

    一个简单的跑接口流程:登录后发表带图片的博客.这里涉及到的知识点: 1.登录时通过cookies去保持登录状态,把cookies添加到一个session中,这样可以保持长时间登录状态: 2.我们通过爬 ...

  9. 记录python接口自动化测试--unittest框架基本应用(第二目)

    在第一目里写了几个简单demo,并把调用get和post请求的方法封装到了一个类里,这次结合python自带的unittest框架,用之前封装的方法来写一个接口测试demo 1.unittest简单用 ...

随机推荐

  1. Powershell Linux正式版可用,启动名称有变

    CentOS yum install powershell 但并没有powershell这个可执行文件.通过搜索可以发现在powershell目录里有pwsh可执行文件,那么以后就要用pwsh执行了. ...

  2. docker 集群 zookeeper 碰到 java.net.NoRouteToHostException: Host is unreachable (Host unreachable)

    最近在学 zookeeper ,按照 docker 官网的方式集群 zookeeper , 然后发现有路由找不到.最后问题解决了,随手记录下来. 原因是 firewalld 的没有信任 docker ...

  3. 报错TypeError: $(...).live is not a function解决方法

    报错的原因是这个方法在jquery1.7以后就被废除了, 1.7以后的版本改用.on()方法 之前的用法: .live(events, function) 新方法: .on(eventType, se ...

  4. 【原】无脑操作:IDEA使用时,提示"8080端口被占用"的解决

    1.问题描述:IDEA使用时,提示"8080端口被占用" Description:    The Tomcat connector configured to listen on ...

  5. web安全—sql注入漏洞

    SQL注入-mysql注入 一.普通的mysql注入 MySQL注入不像注入access数据库那样,不需要猜.从mysql5.0以上的版本,出现一个虚拟的数据库,即:information_schem ...

  6. RabbitMQ框架构建系列(二)——RabbitMQ基础知识介绍

    上一篇记录了一下AMQP协议,RabbitMQ是一个Erlang开发的AMQP协议的开源实现.这一篇简单的介绍一下RabbitMQ的基本原理. 一.RabbitMQ的特点 1.可靠性:RabbitMQ ...

  7. python已经感觉到放弃接近的day08

    居然能超过一个星期,我甚至都有点佩服我自己了,今天有两个新的知识点,一个简单一个难,先从简单的开始入手吧,进制,进制分为4种,2进制,8进制,10进制,16进制,一般最常用的就是10进制了,计算机用的 ...

  8. Linux基础学习:文件与目录管理

    目录与路径 目录的相关操作 几个特殊的目录: . :表示当前目录 .. :表示上一层目录 - :表示前一个工作目录 ~ :表示当前用户所在的主文件夹 ~account :表示account用户所在的主 ...

  9. HTTPS中间人攻击实践(原理·实践)

      前言 很早以前看过HTTPS的介绍,并了解过TLS的相关细节,也相信使用HTTPS是相对安全可靠的.直到前段时间在验证https代理通道连接时,搭建了MITM环境,才发现事实并不是我想的那样.由于 ...

  10. photoshop实例实战(入门级)教程

    PS对街拍女孩照片增加质感(2019-03-19 17:57) PS制作水火相溶特效文字图片(2019-03-19 17:49) PS制作简洁漂亮的立体抽丝文字(2019-03-19 17:16) P ...