模块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. ASP.NET Core 部署IIS及 OFFSET 附近有语法错误解决

    今天自己开发了一个订机票的微信公众号,功能基本已经完成,然后想部署到服务器实际测试下.结果部署上去出现各种问题.先安装asp.net core模块,然后发现数据库并不像在开发时一样,执行ef的命令行语 ...

  2. arcgis api 3.x for js 入门开发系列十六迁徙流动图

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...

  3. typescript中类的继承

    typescript中类的继承用到的是:extends和super 先看一下typescript中类的写法: class Demo{ //类的属性 name:string; age:number; / ...

  4. TextSwitcher 文本切换器的功能与用法

    TextSwitcher集成了ViewSwitcher, 因此它具有与ViewSwitcher相同的特性:可以在切换View组件时使用动画效果.与ImageSwitcher相似的是,使用TextSwi ...

  5. SQL Server使用sys.master_files计算tempdb大小不正确

    一直习惯使用sys.master_files来统计数据库的大小以及使用情况,但是发现sys.master_files不能准确统计tempdb的数据库大小信息.如下所示: SELECT       da ...

  6. 逆向-攻防世界-CSAW2013Reversing2

    运行程序乱码,OD载入搜索字符串,断电到弹窗Flag附近. 发现跳过00B61000函数,弹窗乱码,我们试试调用00B61000函数.将00B61094的指令修改为JE SHORT 00B6109b. ...

  7. 零代码第一步,做个添加数据的服务先。node.js + mysql

    node.js + mysql 实现数据添加的功能.万事基于服务! 增删改查之添加数据. 优点:只需要设置一个json文件,就可以实现基本的添加功能,可以视为是零代码. 添加数据的服务实现的功能: 1 ...

  8. 03-三层交换机的OSPF实验

    三层交换机的OSPF实验 1.OSPF介绍 开放式最短路径优先(英语:Open Shortest Path First,缩写为 OSPF)是对链路状态路由协议的一种实现,隶属内部网关协议(IGP),故 ...

  9. vue 父子之间的通讯

    //父组件<template>     <Button @click='openChild'><Button>      <child-modal :moda ...

  10. Git操作记录

    记录一些用过的操作 增加远程推送分支 git remote add orgin http://xxxxx.git 直接新建本地分支,将远程分支提取出来. git checkout -t origin/ ...