unittest 框架-待优化
模块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 框架-待优化的更多相关文章
- unittest框架(惨不忍睹低配版)
根据我上个随笔的unittest框架优化得来,虽然对于smtp模块还是有点迷糊,不过还是勉强搭建运行成功了,还是先上代码: #login_test.py import requests class L ...
- selenium + python自动化测试unittest框架学习(二)
1.unittest单元测试框架文件结构 unittest是python单元测试框架之一,unittest测试框架的主要文件结构: File >report >all_case.py &g ...
- python+unittest框架第一天unittest之简单认识Test Fixure:测试固件【8月17更新】
20万的慢慢会实现的吧,hhh unittest框架,我就不在介绍了,百度有很详细的介绍. 我们只要了解: 1.unittest是单元测试框架 2.它提供用例组织与执行:在实际工作中案例可能有上百条, ...
- selenium-webdriver(python) (十六) --unittest 框架
学习unittest 很好的一个切入点就是从selenium IDE 录制导出脚本.相信不少新手学习selenium 也是从IED 开始的. IDE学习参考: 菜鸟学自动化测试(一)----selen ...
- Selenium2+python自动化30-引入unittest框架
from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.com ...
- unittest 框架
unittest 框架 学习unittest 很好的一个切入点就是从selenium IDE 录制导出脚本.相信不少新手学习selenium 也是从IED 开始的. IDE学习参考: 菜鸟学自动化测试 ...
- unittest框架概要
unittest是Python语言自带的单元测试框架,原名PyUnit. 认识unittest 在unittest框架中有4个重要概念:test fixture.test case.test suit ...
- 接口登录CSDN发布博客---封装方法,使用unittest框架
一个简单的跑接口流程:登录后发表带图片的博客.这里涉及到的知识点: 1.登录时通过cookies去保持登录状态,把cookies添加到一个session中,这样可以保持长时间登录状态: 2.我们通过爬 ...
- 记录python接口自动化测试--unittest框架基本应用(第二目)
在第一目里写了几个简单demo,并把调用get和post请求的方法封装到了一个类里,这次结合python自带的unittest框架,用之前封装的方法来写一个接口测试demo 1.unittest简单用 ...
随机推荐
- ArcGIS API for JavaScript 入门教程[7] 再讲视图——View的基本属性
[回顾]上篇花大篇幅讲了ArcGIS Server上的数据服务与部分常用可操作图层的创建关系,还讲了OGC的几个规范. 本篇回到JsAPI 4.x的新特性——视图类中来. 在第3篇讲过,4.x将视图从 ...
- Webpack 4教程 - 第六部分 增强开发时体验
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者.原文出处:https://wanago.io/2018/08/06/webpack-4-course-part ...
- Android开发支付集成——支付宝集成
微信支付传送门:https://www.cnblogs.com/dingxiansen/p/9209159.html 一.支付宝支付 1. 支付宝支付流程图 2. 集成前准备 去蚂蚁金服注册应用获取a ...
- typescript的函数
1:默认参数(传入值会覆盖默认参数,不传值也行) function getinfo(name:string,age:number=20):string{ return `${name}---${age ...
- Python安装第三方包(模块/工具)出现链接超时,网速慢,安装不上的问题如何解决
之前我的电脑重新装了系统以后,发现安装完Python后, 使用pip linstall 安装第三方包的时候,网速慢的一匹 有时候只有几百b/s ,而且还动不动就会出现无法安装,链接超时等问题. 今天我 ...
- 【English】十四、英语
一.英语 是 词法(词) + 语法 一个个拥有词法的词,就是材料.通过语法的规则将这些词合理组合排列起来.然后,就可以干很多事了.
- Activi相关表归纳
Activi相关归纳总结记录: ACT_RE_* : 'RE'表示repository.这个前缀的表包含了流程定义和流程静态资源(图片,规则,等等). ACT_RU_* : 'RU'表示 ...
- Go语言打造以太坊智能合约测试框架(level3)
传送门: 柏链项目学院 第三课 智能合约自动化测试 之前课程回顾 我们之前介绍了go语言调用exec处理命令行,介绍了toml配置文件的处理,以及awk处理文本文件获得ABI信息.我们的代码算是完成了 ...
- Carthage入门篇-安装和使用
在iOS开发过程中,用到最多的三方库管理工具也许是Cocoapods.Cocoapods会自动为你创建一个workspace,然后自动将你要用到的三方库集成到Project中,而整个过程,你只需要对P ...
- UML在代码中的展现
依赖:一个类使用了另外一个类,这种关系是临时的.脆弱的. 如人需要过河,需要船,这时人.过河(船) 中船被当做参数传入,船的实现变化会影响过河方法. 聚合:体现是整体与部分.has-a的关系 ...