模块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. php禁用函数设置及查看方法详解

    这篇文章主要介绍了php禁用函数设置及查看方法,结合实例形式分析了php禁用函数的方法及使用php探针查看禁用函数信息的相关实现技巧,需要的朋友可以参考下 本文实例讲述了php禁用函数设置及查看方法. ...

  2. 《JavaScript高级程序设计》笔记:DOM扩展(十一)

    选择符API querySelector()方法 // 取得body元素 var tbody = document.querySelector('body'); // 取得ID为"myDIV ...

  3. Python查找指定文件

    在当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件,并打印出相对路径: import os testfiles = [] testfilepaths = [] L = len(os.p ...

  4. Java thrift服务器和客户端创建实例

    首先环境介绍一下: 1.IntelliJ IDEA 2017.1 2.thrift-0.9.3 相信大家在看我这篇文章的时候已经对thrift通信框架已有所调研,这里就不再赘述了,直接进入正题: &l ...

  5. 荣耀7.0系统手机最简单激活Xposed框架的步骤

    对于喜欢玩手机的小伙伴来说,很多时候会使用到Xposed框架及各类功能彪悍的模块,对于5.0以下的系统版本,只要手机能获得Root权限,安装和激活Xposed框架是比较简便的,但随着系统版本的不断更新 ...

  6. Chromium被用于Microsoft Edge与ChakraCore的未来【译】

    注:英语不好,力求大概能懂.持笔人是:Limin Zhu,好像是中国人,但是没有提供中文版本. 大家好,ChakraCore的朋友们: 昨天,微软公布,Microsoft Edge桌面浏览器采用Chr ...

  7. websocket简单实现在线聊天

    WebSocket简介与消息推送 B/S架构的系统多使用HTTP协议,HTTP协议的特点: 1 无状态协议2 用于通过 Internet 发送请求消息和响应消息3 使用端口接收和发送消息,默认为80端 ...

  8. xtrabackup备份mysql数据库方法

    1.安装 xtrabackup 工具包 下载percona yum源 https://www.percona.com/redir/downloads/percona-release/redhat/pe ...

  9. SpringBoot搭建

    使用eclipse搭建项目 File>New> 点击下一步 填写相关信息,点击下一步 勾选需要的组件,点击下一步. 会生成一个项目,如下图 打开pom.xml文件 <?xml ver ...

  10. cordova 自定义 plugin

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_30879415/article/details/81265455准备工作安装cordovanp ...